天天看點

EntityManager的注入

 第一步:伺服器資料源釋出 

第二步:持久化單元配置

persistence.xml   放置到jar包的META-INF(強烈注意,千萬不要用記事本寫persistence.xml 就算另存為UTF-8的格式,記事本會預設在前面加一個你看不見的BOM頭,而釋出時JBOSS解析XML是不認識它的。是以正确的做法是在eclipse中建立persistence.xml,然後再黏貼過去文本 就不會出問題了,我在這個地方栽過)

<?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="mysql_pu" transaction-type="JTA">

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

   <properties>

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

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

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

   </properties>

</persistence-unit>

</persistence>

----------------------------------------------------------------------------------------------

ANT  (其實eclipse就可以 幫我們打包工程了,是以我一般不用ANT,eclipse自己會用它自己的ANT)

build.xml

<?xml version="1.0"?> 

<project name="EJB_JTA" default="ejbjar" basedir="."> 

<property environment="env" /> 

<property name="src.dir" value="${basedir}/src" /> 

<property name="jboss.home" value="${env.JBOSS_HOME}" /> 

<property name="jboss.server.config" value="default" /> 

<property name="build.dir" value="${basedir}/build" />  

<!-- Build classpath --> 

<path id="build.classpath"> 

   <fileset dir="${jboss.home}/client"> 

    <include name="*.jar" /> 

   </fileset> 

   <pathelement location="${build.dir}" /> 

</path>

<target name="undeploy" description="解除安裝EJB"> 

<delete file="${jboss.home}/server/${jboss.server.config}/deploy/${ant.project.name}.jar"/> 

</target>

<target name="prepare" depends="undeploy"> 

<delete dir="${build.dir}"/> 

<mkdir dir="${build.dir}" /> 

</target> 

<target name="compile" depends="prepare" description="編繹"> 

   <javac srcdir="${src.dir}" destdir="${build.dir}"> 

    <classpath refid="build.classpath" /> 

   </javac> 

<!-- -->

<copy file="${src.dir}/META-INF/persistence.xml" todir="${build.dir}/META-INF"/>

</target> 

<target name="ejbjar" depends="compile" description="建立EJB釋出包"> 

   <jar jarfile="${basedir}/${ant.project.name}.jar" basedir="${build.dir}"> 

    <fileset dir="build"> 

     <include name="*"/> 

    </fileset> 

   </jar> 

</target> 

<target name="deploy" depends="ejbjar" description="釋出EJB"> 

   <copy file="${basedir}/${ant.project.name}.jar" todir="${jboss.home}/server/${jboss.server.config}/deploy" /> 

</target> 

</project> 

第三步:注入EntityManager  (不是線程安全的)

@PersistenceContext(unitName="my_u")           //推薦的方式,EJB容器負責EntityManager 的生命周期

protected EntityManager entityManager;

 -----------------------------------------------------------------------------------------------------------------------------------------

@PersistenceUnit(unitName="my_u")

protected EntityManagerFactory entityManagerFactory ;

@PostConstruct

EntityManager entityManager=entityManagerFactory .createEntityManager();

@PreDestroy

entityManager.close();

繼續閱讀