现在的位置: 首页 > 综合 > 正文

容器资源 vs 本地资源

2013年11月11日 ⁄ 综合 ⁄ 共 1226字 ⁄ 字号 评论关闭

Spring的资源管理考虑到了在JNDI SessionFactory和local的SessionFactory之间的简单切换,对于JNDI DataSource也是这样的,不需要修改一行代码。把资源定义放在容器中还是放在应用程序本地中主要是由使用的事务策略决定的。同Spring定义的本地SessionFactory相比,一个手动注册的JNDI SessionFactory并不会提供任何多余的好处。如果通过Hibernate的JCA连接器进行注册,对于参与JTA事务有明显的好处,尤其在EJB中。而Spring的transaction支持的一个重要好处就是不依赖于任何一个容器。使用非JTA的策略配置,程序将会在独立的或测试的环境下同样正常工作。尤其在典型的单数据库事务情况下,这将是JTA的轻便和强大的替换方案。当使用一个本地的EJB SLSB来驱动事务时,尽管你可能只访问一个数据库而且仅仅通过CMT使用SLSBs的声明性事务,你仍然要依赖于EJB容器和JTA。编程式使用JTA的替换方案依然需要J2EE环境。JTA不仅仅在自己这一方面而且在JNDI DataSource方面,引入了容器依赖。对于非Spring的,JTA驱动的Hibernate事务,为了在适当的JVM层次上做caching,你必须使用Hibernate JCA连接器或者额外的Hibernate事务代码及配置好的JTA事务。Spring驱动的事务能够很好地使用本地定义的Hibernate SessionFacotry工作,就像使用本地的JDBC DataSource工作(当然访问的必须是一个单独的数据库)。因此你只需要在面对分布式事务需求的时候退回到Spring的JTA事务策略。必须要注意,一个JCA连接器需要特定容器的部署步骤,而且首先要支持JCA。这要比使用本地资源定义和Spring驱动事务来部署一个简单的Web应用麻烦多了。而且你通常需要企业版本的容器,比如WebLogic的Express版本并不提供JCA。一个仅使用本地资源并且事务仅跨越一个数据库的Spring应用将会在任何一种J2EE Web容器中工作(不需要JTA,JCA或者EJB),比如Tomcat,Resin, 甚至普通的Jetty。更多的是,这样的中间层可以在桌面应用或测试用例中简单地重用。综上所述:如果你不使用EJB,坚持使用本地SessionFactory的创建和Spring的HibernateTransactionManager或JtaTransactionManager。你可得到包括适当的JVM层次上的caching以及分布式事务在内的所有好处,却不会有任何容器部署的麻烦。通过JCA连接器的Hibernate SessionFactory 的JNDI注册仅仅在EJB中使用会带来好处。
【转自:http://dev.21tx.com/2004/10/25/12017.html

抱歉!评论已关闭.