Tag: architecture

如何在null自由设计中实现List,Set和Map?

在大多数情况下,当你可以返回null / empty对象以避免空值时,它很棒,但是像对象一样集合呢? 在Java中,如果在地图中找不到get(key) key ,则Map返回null 。 在这种情况下,我能想到避免null的最好方法是返回一个Entry对象,它可以是EmptyEntry ,也可以包含值T 当然我们避免使用null ,但是如果不检查它是否为EmptyEntry ,现在可以有一个类EmptyEntryexception。 有没有更好的方法来避免Map的get(K) null ? 为了论证,让我们说这种语言甚至没有null ,所以不要说只使用nulls 。

MVP和GWT小部件之间的通信

如果我在GWT中使用MVP模式,就像在GWT架构中从2009年的Google I / O谈论最佳实践,但是将信息分散到多个小部件中,应该如何填充值对象? 假设我有一个EditPersonView / Presenter,一个EditPetView / Presenter和一个EditAddressView / Presenter,后两个是小部件,作为EditPersonView中面板的一部分。 有了这些,我有以下课程: class PersonDetails { private PetDetails pet; private AddressDetails addressDetails; // … } PetDetails和AddressDetails实例变量在其演示者对应物中进行管理。 当用户单击EditPersonView中的“保存”按钮时,如何完成窗口小部件之间的通信,以便PersonDetails充满来自其子窗口小部件的信息?

如何进行JMS同步请求

我有一个webapp,可以从外部应用程序获取和显示数据,只能通过消息传递(JMS)访问。 因此,如果用户在浏览器上提交请求,则相同的HTTP请求线程必须与Messaging系统(MQ Series)交互,以便相同的请求线程可以显示从Messaging System接收的数据。 我可以在这里使用一种模式吗? 我在网上看到了一些模糊的引用,它们以这种方式使用“Correlation ID”: Msg m = new TextMsg(“findDataXYZ”); String cr_id = m.setCorrelationID(id); sendQueue.send(m). // now start listening to the Queue for a msg that bears that specific cr_id Response r = receiverQueue.receive(cr_id); 那里有更好的东西吗? 我发现的其他模式希望响应是异步接收的……这对我来说不是一个选项,因为我必须在同一个HTTP请求上发回响应。

Spring:如何在Webapp和Standalone程序中获取Application上下文

我是Spring Framework的新手。 我们想在Web应用程序中引入它(3.1),目前使用Web层中的struts,业务层中的服务外观和业务对象以及持久层中自编写的JDBC DAO(所有这些都紧密耦合!) 我创建了几个.xml配置,一个用于servlet配置,仅扫描com.mydomain.web包。 另一个在服务层appContext-service.xml上扫描com.mydomain.bs和.bo包,另一个用于DAO层appContext-persistence.xml扫描.dao包。 我们有四个具有适当项目依赖性的Eclipse项目:Web,Business,Common(包含域对象,DTO,Exceptions等),DataAccess。 我想在可能的情况下使用注释,并且已经创建了一个MVC控制器,一个带接口的新服务和一个带接口的新dao,使用JDBC模板,这一切都很有效。 现在我的问题是: 我们不能一次重写所有代码,我们在这里谈论更大的代码库。 但是,如果还需要从尚未知道Spring的服务和业务对象中获取新创建的服务,我该怎么办? 它们不是bean,也不是Spring创建的。 我怎么能抓住我的服务bean? 我们有几个独立的应用程序用于批处理,定期清理文件系统和数据库表等。它们由cron(UNIX cron)触发,因此有自己的JVM。 考虑到不同的.xml配置,我最好如何在这里使用Spring服务? 我的设置是否有任何意义? 感谢您的任何见解。

哪种语言(在JVM上运行)最适合创建DSL?

我们需要创建复杂的固定长度和可变长度的字符串。 这些字符串可能代表客户档案,订单等。您建议使用哪种基于JVM的编程语言? 想法是让最终用户使用此DSL创建字符串。 所以我正在寻找validation,代码完成等。

使用JMS临时队列进行同步使用是一种好习惯吗?

如果我们使用“临时队列”使用JMS请求/回复机制,那么该代码是否可扩展? 截至目前,我们不知道我们是否每秒支持100个请求,或者每秒支持1000个请求。 下面的代码是我正在考虑实现的。 它以“同步”方式使用JMS。 关键部分是创建“消费者”以指向为此会话创建的“临时队列”的位置。 我无法弄清楚使用这样的临时队列是否是可扩展的设计。 destination = session.createQueue(“queue:///Q1”); producer = session.createProducer(destination); tempDestination = session.createTemporaryQueue(); consumer = session.createConsumer(tempDestination); long uniqueNumber = System.currentTimeMillis() % 1000; TextMessage message = session .createTextMessage(“SimpleRequestor: Your lucky number today is ” + uniqueNumber); // Set the JMSReplyTo message.setJMSReplyTo(tempDestination); // Start the connection connection.start(); // And, send the request producer.send(message); System.out.println(“Sent message:\n” […]

为什么不使用带JSON的SOAP?

JSON与REST相关联。 使用REST,您还可以使用XML。 那么为什么不反过来呢? 使用JSON的SOAP仅用于数据格式,同时保留wsdl用于在某些企业场景中有用的合同方面? 更新:所以评论席指向http://en.wikipedia.org/wiki/SOAPjr但是这不能回答我的问题: 如果它是两个品种中最好的,为什么几乎没有人包括我从未听说过它? 是不是因为像SOAP一样,人们只是遵循传统,直到一些大师醒来并哭泣:至少对某些企业应用来说,我们再次做错了吗?

使用IAM身份validation和Spring JDBC(DataSource和JdbcTemplace)访问AWS RDS

我无法弄清楚如何实现这一点。 任何帮助和/或指针将不胜感激。 目前,我的Java / Spring应用程序后端部署在EC2上,并使用常规的Spring JDBC设置成功访问RDS上的MySQL 。 也就是说,将数据库信息存储在application.properties ,并在@Configuration类中配置DataSource和JdbcTemplate 。 一切正常。 现在,我需要安全地访问RDS上的MySQL。 RDS实例已启用IAM身份validation。 我还成功创建了IAM角色并应用了内联策略 。 然后,按照此链接上的AWS RDS文档和Java示例,我能够使用身份validation令牌和我创建的用户而不是常规的db用户名和密码,从独立的Java类成功访问数据库。 这个独立的Java类直接处理“ Connection ”对象。 我被困的地方是我如何将其转换为Spring JDBC配置 。 也就是说,在我的@Configuration类中为此设置DataSource和JdbcTemplate bean。 实现这一目标的正确/正确方法是什么? —–编辑 – 开始—– 我试图将其实现为可用于多个项目的库。 也就是说,它将用作JAR并在项目的POM文件中声明为依赖项。 该库将包括可配置的AWS服务,例如使用通用DB用户名和密码的RDS访问,使用IAM认证的RDS访问,用于数据加密的KMS(CMK /数据密钥)等。 想法是根据项目在任何Web / app服务器上使用此库。 希望这更能说明我的需要。 —–编辑 – 结束—– DataSource内部有getConnection(),所以我基本上可以创建自己的DataSource实现来实现我想要的。 但这是一个好方法吗? 就像是: public class MyDataSource implements DataSource { @Override public Connection getConnection() throws SQLException […]

如何设置Hibernate来读/写不同的数据源?

使用Spring和Hibernate,我想写一个MySQL主数据库,并从基于云的Java webapp中的一个或多个复制的从属数据库中读取。 我找不到对应用程序代码透明的解决方案。 我真的不想改变我的DAO来管理不同的SessionFactories,因为这看起来非常混乱,并且将代码与特定的服务器架构相结合。 有没有办法告诉Hibernate自动将CREATE / UPDATE查询路由到一个数据源,SELECT到另一个数据源? 我不想做任何基于对象类型的分片或任何东西 – 只是将不同类型的查询路由到不同的数据源。

如何使java Web应用程序完全无状态

我知道有很多关于有状态应用程序和无状态应用程序之间差异的讨论,无状态是函数编程语言所做的事情,每个使用相同args的函数调用将返回相同的值。 这是否意味着面向对象的语言无法构建完全无状态的应用程序,因为每个对象通常都具有状态。 此外,在Java Web应用程序中,我们通常需要跟踪用户状态,并通过会话解决。 但是如何在无状态方式的分布式系统中做到这一点? 当一个系统死亡时,我们需要通过另一个服务器以某种方式识别会话,以便转移用户状态。 我们是否需要将会话放在中央数据库(缓存)中?但这是无状态的吗? 在我们使java Web应用程序无状态之前,除了会话之外还需要关注什么?