JavaEE5学习笔记08-JPA与EJB集成总结(4)

1.       JavaEE容器中使用JPA和不在JavaEE容器中使用JPA的区别

1):首先在JavaEE容器中使用JPA不必在自己的项目中再加入JPA实现的jar包了,因为在应用服务器中已经含有实现JPA标准的jar包了,所以您的项目不必加入了。而如果项目不是在JavaEE容器中跑的话(比如轻量级的Spring+JPA+Hibernate实现),就得自己加入JPA实现的jar包了。

2):第二个就是/META-INF/persistence.xml文件的书写,在JavaEE容器中运行的项目不必显示的写出JPA的实现者——provider,因为在使用应用服务器的过程中,服务器底层已经自己默认使用了某些框架实现了JPA标准。当然,一些特殊属性——property为了运行时环境的移植性,一般在开发阶段不会指定实现者的特殊属性。除非项目的需求已经决定了,应用服务器不会发生变动,想让JPA执行的更有效率,而且开发人员本身已经十分清楚该应用服务器底层的JPA实现框架,指定property属性也是可以的。

3):事务的类型,一般在JavaEE容器中执行事务类型为JTA,到写代码的时候再确定到底是CMT还是BMT。如果在其他容器,比如Spring管理的时候,通常会采用RESOURCE_LOCAL,将事务交给Spring这个本地的局部容器去管理事务。

以下是2种情况的persistence.xml文件内容

JavaEE容器实现JPA

<?xml version="1.0" encoding="UTF-8"?>

<persistence 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_1_0.xsd"

    version="1.0">

 

    <persistence-unit name="JavaEE4JbossPU"

       transaction-type="JTA">

       <jta-data-source>java:/jbossdemo</jta-data-source>

       <class>jpa.vo.Person</class>

    </persistence-unit>

 

</persistence>

JavaEE容器实现JPA

<?xml version="1.0" encoding="UTF-8"?>

<persistence 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_1_0.xsd"

    version="1.0">

 

    <persistence-unit name="ApplicationNewWebPU"

       transaction-type="RESOURCE_LOCAL">

       <provider>org.hibernate.ejb.HibernatePersistence</provider>

       <properties>

           <!--不用Spring的数据源连接池的时候打开以下代码-->

           <!--

              <property name="hibernate.connection.driver_class"

              value="com.mysql.jdbc.Driver" /> <property

              name="hibernate.connection.url"

              value="jdbc:mysql://127.0.0.1:3306/ejbjpa" /> <property

              name="hibernate.connection.username" value="root" /> <property

              name="hibernate.connection.password" value="root" />

           -->

 

           <!-- Hibernate 方言(只有Hibernate 才需要设置) -->

           <property name="hibernate.dialect"

              value="org.hibernate.dialect.MySQLDialect" />

           <!-- Hibernate 显示调试 SQL -->

           <property name="hibernate.show_sql" value="true" />

           <!-- Hibernate 缓存设置(默认可不设置) -->

           <!--

              <property name="hibernate.cache.provider_class"

              value="org.hibernate.cache.NoCacheProvider" />

           -->

           <!-- Hibernate 格式化sql -->

           <property name="hibernate.format_sql" value="true" />

           <property name="hibernate.hbm2ddl.auto" value="update" />

       </properties>

    </persistence-unit>

</persistence>

你可能感兴趣的:(spring,Hibernate,javaee,jpa,ejb)