有了 JEE 5 / EJB 3.0,Java 开发人员的生活变得更加轻松。后来,受 Spring 和 CDI 的影响,JEE 也采用了类似的方法。现在,我希望我做得对,但只是为了确定:我有几个无状态 EJB,它们都查询和/或修改数据库。一个例子是
@Stateless
public class AddressDBService {
@PersistenceContext
protected EntityManager em;
一些无状态 EJB 像这样引用其他服务:
@Stateless
public class AVeDBService {
@PersistenceContext
protected EntityManager em;
@Inject
private HomeToDealDBService homeToDealDBService;
@Inject
private AddressDBService addressDBservice;
在无状态 EJB 中,我有如下公共方法:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void saveEntity(Home home) throws EntityExistsException {
this.em.persist(home);
addressDBservice.saveAddress(home.getMainAddress(), home);
}
虽然我几乎可以肯定这种用法是正确的并且是线程安全的(上述服务又被注入到 JSF Managed Beans 中)。有人可以确认我的用法是正确的、线程安全的并且符合良好的做法吗?
我的用法似乎符合以下问题: