我在EJB中有一个java.lang.IllegalStateException。
@Stateless
@LocalBean
public class SalesRequestSession {
@PersistenceContext(unitName = "IPMSPU")
private EntityManager em;
@Resource
private javax.transaction.UserTransaction utx;
public void persist(Object object) {
try {
utx.begin();
em.persist(object);
utx.commit();
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
throw new RuntimeException(e);
}
}
public Customer insertNewCustomer(Customer cust){
try{
persist(cust);
Query query = em.createNamedQuery("Customer.findByName");
query.setParameter("name", cust.getName());
return (Customer)query.getSingleResult();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public Request insertNewRequest(Request request) {
persist(request);
return getInsertedRequest();
}
public Request getInsertedRequest() {
return (Request) em.createNamedQuery("Request.getInserted").getSingleResult();
}
public List<Request> getRequestByEmployee(Employee emp){
Query query = em.createNamedQuery("Request.findBySalesId");
query.setParameter("salesid", emp);
return query.getResultList();
}
public List<Customer> getAllCustomers(){
return em.createNamedQuery("Customer.findAll").getResultList();
}
}
当我试图通过调用managedbean中的insertNewCustomer方法插入新Customer时,就会发生这种情况
下面是例外情况的详细信息
默认情况下,会话bean使用容器管理的事务划分。当容器管理事务时,不需要使用UserTransaction。
在使用容器管理的事务划分时,不允许从会话bean的方法调用UserTransaction的方法。调用这些将导致IllegalStateException。例如,在EJB 3.1规范第4.7.2章中记录了这种限制。