从EJB3迁移到Spring,Hibernate

时间:2011-06-02 07:07:50

标签: spring jboss ejb-3.0

我们有一个基于桌面的应用程序,基于EJB3,Oracle 10和JBoss 4.这是在三年前创建的。 JPA实体用于ORM,业务逻辑在无状态会话bean中实现。客户端是使用Swing API开发的。

现在需要将Spring,Hibernate和JBoss的先前技术替换为下一个应用程序版本。客户仍然在Swing。计划是用POJO替换实体,并将业务逻辑从Session Beans放到Spring Beans,即数据访问对象(扩展HibernateDaoSupport)。

所以问题是,我们是否有可能从Session Bean完全释放我们的应用程序并将业务逻辑移至Spring Dao?或者我们还要保留会话豆吗?如果完全避免会话Bean,客户端应用程序将如何访问业务方法?与基于JavaEE的应用程序一样,会话bean可通过Jndi查找访问。

非常感谢任何建议。

3 个答案:

答案 0 :(得分:8)

如果你正在将一个非常好的EJB3 / JPA应用程序迁移到Spring / Hibernate只是因为你认为最终结果会更轻量级,那么恕我直言你这样做是因为错误的原因而你可能正在考虑浪费大量的工程努力。

Spring和EJB3都非常相似。 Spring在XML部门历史上更重要,但它现在更紧密地遵循EJB3基于注释的方法。一般来说,这两个似乎是在一个兔子跳跃比赛。有时Spring会进行创新,并且是一步之遥,但是随后EJB3又进行了创新,并且又一次跳跃。两者都不断将其特征基于另一个特征。

我建议不要迁移到Spring,而是将服务器从JBoss AS 4升级到6,或者如果你能忍受等待,请等待几个月直接进入JBoss AS 7.

P.S。如果你已经拥有一个非常精细的Spring应用程序,我也不建议迁移到EJB3只是因为更轻量级。

答案 1 :(得分:7)

这是完全可能的,事实上这些技术并没有那么不同。要立即开始,请尝试以下方法:

<context:component-scan
        base-package="com.example.project"
        scope-resolver="org.springframework.context.annotation.Jsr330ScopeMetadataResolver">
    <context:include-filter type="annotation" expression="javax.ejb.Stateless"/>
</context:component-scan>

对齐!现在你所有的SLSB现在都是Spring bean的原型。如果某些SLSB具有状态(duh!),则必须将它们包装在池代理中,还有很多工作要做。但Spring已经支持大多数EE功能。例如,在开始时坚持使用JPA和Hibernate后端 - 不需要更改DAO代码,@EntityManger可以以相同的方式注入Spring bean。

同时,您可以混合使用Spring和EJB - 可以轻松地将EJB注入Spring bean,从而提供良好的互操作性。

更新:另外,为什么要从JPA做“Hibernate”降级?如果您的应用程序与JPA一起正常工作,那么也可以在Spring应用程序中使用它 - 当您需要Hibernate特定功能时,您仍然可以偶尔使用它们。

答案 2 :(得分:5)

Spring bean不仅仅是“DAO”,您还可以使用“服务”来实现业务逻辑(参见http://biese.wordpress.com/2007/10/08/service-layer-and-dao-architecture/)。

服务将在表示层中注入依赖项。如果您需要在表示层和业务层之间使用RMI,则应使用Spring Remoting http://static.springsource.org/spring/docs/2.5.x/reference/remoting.html(使用RMI)。