Let's go inside

this blog is deprecated as a result of laziness.
posts - 59, comments - 2, trackbacks - 0, articles - 0

TrailBlazer第12天--Configure Persistence Context

Posted on 2006-07-28 04:03 Earth 阅读(529) 评论(0)  编辑  收藏 所属分类: JavaEE5/EJB3

这是TrailBlazer Hike 3最后一节,  全文翻译

要在应用中发布entity beans,你仅需要将这些类文件打包成JAR. EJB 3.0 规范要求你在JAR包的META-INF目录下提供一个persistence.xml。 在persistence.xml定义你将使用哪个数据库,定义EntityManager的默认行为。你既可以把JAR发布到server的deploy目录下,也可以把JAR放在EAR包中。
 
persistence.xml文件
   
persistence.xml包含一个或多个persistence-unit元素. 每一个persistence-unit定义了一个persistence context名字, data source设置, 和vendor specific properties. 以下是一个典型的persistence.xml文件.

< persistence >
  
< persistence-unit  name ="ejb3trail" >
    
< jta-data-source > java:/DefaultDS </ jta-data-source >
    
< properties >
      
< property  name ="hibernate.hbm2ddl.auto"
                value
="create-drop" />
    
</ properties >
  
</ persistence-unit >
</ persistence >

它定义了以 ejb3trail命名的EntityManager 是用 java:/DefaultDS 作为数据源来持久化它所管理的entity beans的. 如果你想使用一个不同的数据库来映射当前persistence context中的entity beans,你可以改变数据源的JNDI名字以替换java:/DefaultDS(你需要提供相应的*-ds.xml文件). 另外,还指定了JBoss服务器应该在应用deploy之时给这些entity beans创建相应的表, 在应用un-deploy之时删除这些表。注意应用的deploy和un-deploy是在server startup或shutdown时进行的。

persistence.xml中的properties是application server specific的. 在JBoss AS中, 它们是简单的Hibernate properties因为Hibernate是JBoss EJB 3.0的内在实现框架.你可以在[server_installation]/server/deploy/ejb3.deployer/META-INF/persistence.properties 中找到一系列可用的properties 和它们的默认值.
 
从一个特定的context中注入EntityManager
     正如我们所看到的,JAR包中的persistence.xml可以用不同的名字定义多个persistence contexts.为了从一个有名字的persistence context中得到EntityManager,  你只需要指定@PersistenceContext标注的unitName属性. 下面的例子就是把ejb3trail persistence context注入到EntityManager.

@PersistenceContext(unitName = " ejb3trail " )
EntityManager em;

如果满足下面的条件,你可以省去unitName:

1,仅在persistence.xml文件中定义了一个persistence context.
2,在应用中使用了scoped classloader.
 
第2条可能需要更多的解释. 如果在EAR包中包含WEB应用, 意味着你需要在EAR包中的META-INF目录下提供一个 jboss-app.xml文件. 在这个文件中你可以给classloader指定任意一个名字,这里是一个例子:

< jboss-app >
  
< loader-repository >
    trailblazer:app=ejb3
  
</ loader-repository >
</ jboss-app >

如果你在应用中未定义scoped classloader, 所有该应用中定义的persistence contexts将在整个服务器中全局可用, 相应地@PersistenceContext injection将在global context查找EntityManager. 这样你可以使用在该应用之外定义的persistence context. 但是此时你不得不通过unitName显示地指定persistence context的名字。
 
小结 
    在这一节中,我们讨论了怎样给应用配置多个persistence contexts.接下来我们将探讨一章全新的内容。


只有注册用户登录后才能发表评论。


网站导航: