2008-09-29 47 views
4

在我刚完成的项目中,我正在使分布式事务工作。用Spring分离演示文稿和业务层

我们使用JBoss的Arjuna事务管理器和Spring的声明式事务边界来实现这个功能。

我们的请求序列看上去像:

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

这是什么意思是,我们有一个WAR服务于我们的安全的servlet和一个EAR为我们的SLSB。

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

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

我很想知道其他人在使用Spring时如何分层?

+0

SLSB为您做了什么?你可以在他们的地方使用http://static.springframework.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes会话bean吗? – MetroidFan2002 2008-09-30 22:30:03

回答

2

要求一个EJB3应用程序服务器仅用于作为门面的SLSB,似乎不值得为此付出努力。没有理由不能删除它,并让你的servlet直接与Spring一起工作。您可以将ContextLoaderListener添加到WAR以加载您的ApplicationContext,然后加载WebApplicationContextUtils来获取它。另外,如果你需要做的比Servlet自己允许的更多,你可以使用SpringMVC,Struts或其他Web技术。

2

一个非常典型的方法是定义一个Web层,一个服务层和一个DAO层,并将事务语义附加到服务层。例如,服务层可能是一群使用@Transactional注释的POJO。 Web层可能是Spring Web MVC控制器。在这种方法中,Web层基本上将服务层调整为HTTP。良好的分离和无需SLSB在这里。

尽管一个领域的争论是关于域对象,比如Employee或PurchaseOrder或其他。这些跨越应用程序层和一个似乎与注释有关的事情是域对象获得与特定层绑定的注释。因此,您可能在此处具有ORM注释,但随后使用相同的域对象作为表单支持bean,以避免并行域/表单对象类。有些人反对说这违反了关注的架构分离。