如何在glassfish 3.1中使用JPA CMT
我是JPA新手,想尝试一下glassfish 3.1上的简单示例。我能够使用Bean管理的事务运行一些示例程序。 然而,当我使用CMT尝试sames示例时,我得到了事务必需的异常 我不知道我哪里出错了 我的项目是一个简单的web项目,我包含了用于实体生成的JPA方面 可能是因为我没有使用EJB项目,所以无法获取glassfish应用服务器EJB容器的功能…对此不确定 我的persistence.xml如下所示:如何在glassfish 3.1中使用JPA CMT,jpa,glassfish,Jpa,Glassfish,我是JPA新手,想尝试一下glassfish 3.1上的简单示例。我能够使用Bean管理的事务运行一些示例程序。 然而,当我使用CMT尝试sames示例时,我得到了事务必需的异常 我不知道我哪里出错了 我的项目是一个简单的web项目,我包含了用于实体生成的JPA方面 可能是因为我没有使用EJB项目,所以无法获取glassfish应用服务器EJB容器的功能…对此不确定 我的persistence.xml如下所示: <?xml version="1.0" encoding="UTF-8"?&g
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="JPAPractise" transaction-type="JTA">
<jta-data-source>jdbc/JPAConnPool</jta-data-source>
<class>model.Address</class>
<class>model.Employee</class>
</persistence-unit>
}
请帮助我了解真正的问题。在BMT中,您负责管理事务,而在CMT中则是容器的事务。因此,您的示例使用BMT
TestJPA
是一个servlet,而不是容器管理事务的企业bean
来自文档:
在具有容器管理的事务划分的企业bean中,
EJB容器设置事务的边界。你可以用
具有任何类型企业bean的容器管理事务:
会话或消息驱动。容器管理的事务简化了
开发,因为企业bean代码没有显式标记
交易的边界。代码不包括语句
开始和结束事务
<persistence-unit name="JPAPractise" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>jdbc/JPAConnPool</non-jta-data-source>
您可以尝试下面的代码
try{
em.getTransaction().begin();`
em.persist(e1);
em.getTransaction().commit();`.
}catch(Exception e){
e.printStackTrace();
}finally{
em.close();
}
此外,必须将persistence.xml更改为具有RESOURCE\u LOCAL
事务
<persistence-unit name="JPAPractise" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>jdbc/JPAConnPool</non-jta-data-source>
jdbc/jpaconpol