我是 JPA 的新手,想在 glassfish 3.1 上尝试简单的示例。我能够使用 Bean 托管事务运行一些示例程序。但是,当我使用 CMT 尝试相同的示例时,我得到了事务必需的异常。
无法知道我哪里出错了。
我的项目是简单的 Web 项目,我包含了用于实体生成的 JPA 方面。
可能是一个原因,因为我没有使用 EJB 项目,所以无法获得 glassfish 应用服务器的 EJB 容器的功能......不确定这个......
我的 persitence.xml 如下:
<?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>
普通 servlet 作为触发点:
@WebServlet("/TestJPA")
public class TestJPA extends HttpServlet {
private static final long serialVersionUID = 1L;
@PersistenceUnit
EntityManagerFactory emf;
/*@Resource
UserTransaction tx;*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
EntityManager em = emf.createEntityManager();
Employee e1 = new Employee();
e1.setEmployeeID("290874");
e1.setName("Shashi Shankar");
e1.setSalary(60000);
try{
//tx.begin();
em.persist(e1);
em.flush();
//tx.commit();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
请帮助我了解真正的问题。