Я использую IBM RAD 7.5 и WebSphere 7.
У меня есть EJB (@Stateless CustomerService), и у меня есть два EJB, которые являются DAO (@Stateless CustomerDAO и @Stateless OrderDAO).
Мой метод в CustomerService работает нормально, когда я выполняю customerDAO.getAll ().
Но если я вызываю customerDAO.getAll (), а затем orderDAO.getByCustomerId (int id), второй getAll создает исключение EJBTransactionRolledBackException.
Почему это происходит и как это предотвратить?
Спасибо, Роб
, обновление с кодом
У меня есть следующее ...
@Stateless
public class CustomerService
@EJB
private CustomerDAO customerDAO;
@EJB
private OrderDAO orderDAO;
public void myMethod() {
List<Customer> customers = customerDAO.getAll();
for (Customer c : customers) {
List<Order> orders = orderDAO.getByCustomerId(c.getId());
/*** THIS THROWS EJBTransactionRolledBackException ***/
}
}
... и мои DAO выглядят так ....
@Stateless
public class CustomerDAO
@PersistenceUnit
private EntityManagerFactory emf;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public List<Customer> getAll() {
try {
em = getEntityManager();
Query query = em.createQuery(" /*...*/ ");
query.getResultList();
} finally {
em.close();
}
}
... и ...
@Stateless
public class OrderDAO
@PersistenceUnit
private EntityManagerFactory emf;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public List<Customer> getByCustomerId(int customerid) {
try {
em = getEntityManager();
Query query = em.createQuery(" /*...*/ ");
/* ... */
query.getResultList();
} finally {
em.close();
}
}
Есть идеи?
Спасибо, Роб