从EJB3迁移到Spring,Hibernate

jde*_*per 6 jboss spring 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查找访问.

任何建议都非常感谢.

Tom*_*icz 8

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我不认为Spring和Hibernate比Java EE更轻量级.JPA - 通常是Hibernate,而Spring只将自己视为轻量级产品,但一直未能明确定义轻量级的确切含义.无论轻量级意味着什么,在实践中我发现EJB更容易编程.性能更多地取决于您自己的算法和体系结构,而不是Java EE和Spring之间的差异.大多数情况下,我能够创建性能更好的Java EE应用程序,但这主要是因为我比认识Spring更了解Java EE. (2认同)

Mik*_*aun 8

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

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

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

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


Tri*_*tan 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).