我正在使用JSF,PrimeFaces,JPA开发动态Web项目(Java EE),并在Tomcat 7上运行。该项目开发基于http://www.simtay.com/simple-crud-web-application-with- jsf-2-1-primefaces-3-5-maven-and-jpa / 现在,我正在开发该软件的JPA部分。过去,当我在Java SE中开发一些小东西(作为练习)时,曾经使用以下数据库属性:
jdbc.drivers=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=password
但是现在我正在Java EE上学习JPA。
在“ Pro JPA 2 Mastering the Java trade Persistance API”一书的第3章“打包”中,您可以阅读:
在Java EE环境中,可以省略persistence.xml文件中Java SE所需的许多属性。在清单3-32中,您可以看到清单2-11中的persistence.xml文件已转换为部署为Java EE应用程序的一部分。现在,我们声明实体管理器应使用数据源名称“ jdbc / EmployeeDS”,而不是用于创建连接的JDBC属性。如果将数据源定义为在应用程序名称空间中可用,而不是在本地组件命名上下文中可用,则我们可以改用数据源名称“ java:app / jdbc / EmployeeDS”。事务类型属性也已删除,以允许持久性单元默认为JTA。应用程序服务器将自动查找实体类,因此,甚至类列表也已删除。此示例表示理想的最低Java EE配置。因为使用此持久性单元的业务逻辑是在无状态会话Bean中实现的,所以persistence.xml文件通常位于相应的EJB JAR的META- INF目录中。
清单3-32 在Java EE中定义持久性单元
<persistence> <persistence-unit name="EmployeeService"> <jta-data-source>jdbc/EmployeeDS</jta-data-source> </persistence-unit> </persistence>
清单2-11 persistence.xml文件中的元素
<persistence> <persistence-unit name="EmployeeService" transaction-type="RESOURCE_LOCAL"> <class>examples.model.Employee</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527 EmpServDB;create=true"/> <property name="javax.persistence.jdbc.user" value="APP"/> <property name="javax.persistence.jdbc.password" value="APP"/> </properties> </persistence-unit> </persistence>
我的问题是:如何使用我在文章顶部输入的属性来适应Java EE环境中的通用persistence.xml文件以连接到MySQL / JDBC数据库?
给定的示例需要JTA,Java Transaction API。它将事务管理委托给容器。启用JTA后,如果您使用的是@StatelessEJB,则默认情况下,单个方法调用将被计为单个完整事务。这使您无需编写任何tx.begin,tx.commit,tx.rollback等样板即可编写干净的代码。
@Stateless
像JSF,EJB和JPA一样,默认情况下,JTA在像Tomcat和Jetty这样的准JSP / Servlet容器上不可用。像JSF,EJB和JPA一样,您需要在Tomcat上分别安装JTA。
An alternative is to switch from a JSP/Servlet container to a real Java EE (web profile) container, such as Glassfish, JBoss AS and TomEE. It offers everything directly out the box with regard to Java EE. Note that JBoss AS and TomEE basically use Tomcat’s JSP/Servlet engine under the covers.