当前位置: 首页 > 知识库问答 >
问题:

EJB java.lang.IllegalStateException

楮乐邦
2023-03-14

我在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时,就会发生这种情况

下面是例外情况的详细信息

共有1个答案

鱼恩
2023-03-14

默认情况下,会话bean使用容器管理的事务划分。当容器管理事务时,不需要使用UserTransaction。

在使用容器管理的事务划分时,不允许从会话bean的方法调用UserTransaction的方法。调用这些将导致IllegalStateException。例如,在EJB 3.1规范第4.7.2章中记录了这种限制。

 类似资料:

相关问答

相关文章

相关阅读