在我刚刚完成的项目中,我正在努力使分布式事务正常运行。

我们使用JBoss的Arjuna事务管理器和Spring的声明式事务边界实现了这一点。

我们的请求序列如下:

browser -> secured servlet -> 'wafer-thin' SLSB -> spring TX-aware proxy -> request-handler POJO

这意味着我们有一个WAR来服务我们的安全servlet和一个EAR来服务我们的SLSB。

我们的SLSB有一个静态初始化块来引导我们的Spring应用程序上下文。

我不喜欢混合技术,但我确实喜欢将演示文稿和业务层分开,这些层可能位于不同的物理位置。

我有兴趣知道其他人在使用Spring时建议分隔层的内容吗?

有帮助吗?

解决方案

仅仅针对作为外观的SLSB而要求EJB3应用服务器似乎不值得为我付出努力。没有理由你不能删除它并让你的servlet直接使用Spring。您可以将ContextLoaderListener添加到WAR以加载ApplicationContext,然后添加WebApplicationContextUtils以获取它。或者,您可以使用SpringMVC,Struts或其他Web技术,如果您需要做的不仅仅是Servlet本身允许的内容。

其他提示

一种非常典型的方法是定义Web层,服务层和DAO层,并将事务语义附加到服务层。例如,服务层可能是一堆带有@Transactional注释的POJO。 Web层可能是Spring Web MVC控制器。在这种方法中,Web层实质上是将服务层调整为HTTP。良好的分离,不需要SLSB。

争论的一个方面是关于域对象,如Employee或PurchaseOrder等等。这些跨应用程序层和注释似乎正在发生的一件事是域对象获得与特定层绑定的注释。所以你可能在这里有ORM注释,但是然后使用相同的域对象作为表单支持bean作为避免并行域/表单对象类的方法。有些人反对这一点,因为他们违反了建筑师关注点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top