技术开发 频道

Spring PK EJB 3.0,我们该选择哪一个?



事务管理的输入层面包括定界、传播、隔离。将一组操作与事务作语义绑定称为定界。如果需多个组件在一组操作范围协作,其事务也应在这些组件间共享。隔离允许开发人员细致地调整事务间的隔离程度。
 
Spring中,事务定界、传播和隔离均通过AOP工具来声明。在xml配置文件中可定义事务代理对象,或通过面向方面的语义来实现。事务代理的操作方法如下:
 
<bean id="bookingAgent" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager" /> <property name="target" ref="bookingAgentSpring" /> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="bookingAgentSpring" class="org.jug.flight.booking.spring.BookingAgentSpring"> <property name="flightDAO" ref="flightDAO" /> <property name="ticketDAO" ref="ticketDAO" /> <property name="screener" ref="screener" /> </bean>
EJB 3.0 中,所有会话 bean的公共方法自动应用了事务语义,不再需要专门的配置文件。并且通过注释或xml可微调事务传播级别。
 
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Ticket purchaseTicket(Ticket ticket)
{
 ...
    }
 
EJB 3.0规范将事务隔离声明为针对资源管理,没有标准的表述方式。Spring集成了各种事务管理API 如JDBC, Hibernate, and JTA。而EJB 3.0仅支持JTA。
 
对于API的选择主要有两个要点:首先,并非所有的Java容器支持JTA(如Tomcat就不支持),尽管所有的EJB容器支持JTA。其次,如果某一分布式的事务操作涉及各种资源(JDBC , JMS),则JTA开发环境的支持是必须的。如果容器本身不提供JTA的支持,而又必须JTA的时候,可考虑采用开源的JTA实现如JOTM。
 
事务管理——小结
 
Spring 和 EJB 3.0均提供了与各自持久化机制相兼容针对事务处理的集成管理方式。(见表3)
 
3. Spring和EJB 3.0事务管理功能性比较
特性 
Spring 
EJB 3.0
声明式事务
可编程事务
定界
AOP
会话 bean 方法
支持的事务类别
JDBC, Hibernate, JTA
JTA
分布式事务的支持
(With JTA)
配置
XML
默认情况下支持事务,通过注释或xml微调
标准
(With JTA)
0
相关文章