Seam管理的事务操作方法
Seam建议在有状态会话Bean中使用扩展持久化上下文,以便拥有Seam管理的持久性。
我不清楚上述建议是否对我们希望拥有Seam管理的交易的方式产生任何影响。这是因为我们的架构不同。我们在无状态EJB中具有以下持久性上下文:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class CrudServiceBean implements CrudService {
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
private EntityManager em;
...
}
我们的DAO使用@TransactionAttribute(TransactionAttributeType.REQUIRED)调用上面的CrudServiceBean是无状态EJB(其中一些也是Seam组件)。因此,我们的事务由容器(WebLogic)而不是Seam处理。
但是,我们现在需要满足以下场景:我们需要有一个前端Seam组件(非EJB)调用多个DAO(EJB)方法,并将所有这些方法包装在一个事务中。如果我理解正确,我们需要有Seam管理的事务。
我们是否可以像我描述的场景一样拥有Seam管理的事务,而没有Seam管理的持久化上下文?或两者无关?
没有找到相关结果
已邀请:
1 个回复
痴浪墨
但Java EE规范3.0指出 具有Bean管理或容器管理的事务划分的企业bean必须是会话bean或消息驱动的bean。 所以你不能使用上面的场景。并且因为所有DAO都使用容器管理的事务,所以Java EE规范不允许您同时使用容器管理和bean管理的事务 所以解决方案是 将所有DAO包装在其事务由容器管理的EJB无状态会话Bean中。它的行为类似于委托组件
在非EJB组件中,使用