AS 7.0.1 已发布!!!

AS 7.0.1 已发布,其中包括了对使用不同持久化提供程序(除了包含的 Hibernate 4.0.0)的改进。该框架已就位,可以插入 Hibernate 3.5(或更高版本)的持久化提供程序。这解决了用户反馈,即在 AS7 上使用 Hibernate 3.x 的重要性,以在迁移到 Hibernate 4.0.0 之前有更多的时间。应尽快将应用程序切换到 Hibernate 4.x。Hibernate 4.0.0 已修改以支持 AS7 模块化类加载环境以及 JBoss 日志(以及其他许多改进)。

插入 Hibernate 3.6.6.Final 模块

默认情况下,JPA 应用程序将使用 AS7 中的 Hibernate 4.0.0,除非您在 persistence.xml 属性列表中添加了属性 jboss.as.jpa.providerModule 并将其设置为 org.hibernate:3。您还需要创建一个代表将用于您的应用程序的 Hibernate 3.6.6.Final 发布 JAR 的 org.hibernate:3 模块。我下载了 hibernate-distribution-3.6.6.Final 来创建新模块。

创建 Hibernate 3.6.6.Final 模块的步骤

  1. 创建 as/modules/org/hibernate/3 文件夹
  2. 将 hibernate-distribution-3.6.6.Final 文件夹中的 JAR 复制到 as/modules/org/hibernate/3 文件夹
  3. 创建 as/modules/org/hibernate/3/module.xml 文件
  4. 更新 persistence.xml 以使用 org.hibernate:3 模块
<!-- as/modules/org/hibernate/3/module.xml file -->
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.hibernate" slot="3">
    <resources>
        <resource-root path="hibernate3.jar"/>
        <resource-root path="javassist-3.12.0.GA.jar"/>
        <resource-root path="antlr-2.7.6.jar"/>  
        <resource-root path="commons-collections.jar"/>  
        <resource-root path="dom4j-1.6.1.jar"/>  
        <!-- Insert other Hibernate 3 jars to be used here -->
    </resources>
    <dependencies>
        <module name="org.jboss.as.jpa.hibernate" slot="3"/>
        <module name="asm.asm"/>
        <module name="javax.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.validation.api"/>
        <module name="org.apache.ant"/>
        <module name="org.infinispan"/>
        <module name="org.javassist"/>
        <module name="org.slf4j"/>
    </dependencies>
</module>
<!-- persistence.xml using Hibernate 3.6.6.Final -->
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="GameOfThrones_pu">
    <description>my Hibernate 3 persistence unit.</description>
    <jta-data-source>java:jboss/datasources/gameDS</jta-data-source>
    <properties>
        <property name="jboss.as.jpa.providerModule" value="org.hibernate:3"/>
    </properties>
</persistence-unit>
</persistence>

使用 org.hibernate:3 模块的 AS7(Arquillian)单元测试示例。 注意,此测试被 @Ignored,直到我们安排测试构建创建 org.hibernate:3 模块。

我可以创建一个独立的应用程序,但我更喜欢推动 惊人的 Arquillian 项目! ;) 我希望您能在有空的时候为 AS7 项目贡献类似的 JPA 测试。

在 AS 7.0.1 上实验性使用 OGM

我想看看我能否使用OGM(OGM)创建一个AS7单元测试,创建一些实体。为了完成这个任务,我从OGM源代码的副本检出并构建它们。

cd work
git clone git://github.com/hibernate/hibernate-ogm.git
Cloning into hibernate-ogm...
  remote: Counting objects: 4371, done.
  remote: Compressing objects: 100% (1357/1357), done.
  remote: Total 4371 (delta 1694), reused 4262 (delta 1599)
  Receiving objects: 100% (4371/4371), 1.17 MiB, done.
  Resolving deltas: 100% (1694/1694), done.

cd hibernate-ogm
mvn clean install
... lots of output from building ogm jars....

Folder hibernate-ogm-core/target will contain hibernate-ogm-core-3.0.0-SNAPSHOT.jar 

接下来,您需要为AS7构建我的实验性OGM分支(哦,是的,您需要一些工具mavengit)。

cd ..
git clone git://github.com/scottmarlow/jboss-as.git
cd jboss-as
git checkout ogm
./build.sh clean install
OR build.bat clean install
  1. 按照上述创建org.hibernate:3模块的说明
  2. 创建as/modules/org/hibernate/ogm文件夹
  3. 将您刚刚构建的hibernate-ogm-core-3.0.0-SNAPSHOT.jar(从OGM构建)复制到as/modules/org/hibernate/ogm文件夹
  4. 创建as/modules/org/hibernate/ogm/module.xml文件
  5. 更新您的persistence.xml以使用org.hibernate:3模块和org.hibernate:ogm providerModule。
  6. 为您的应用程序创建一个本地唯一的infinispan.xml。
<!-- as/modules/org/hibernate/ogm/module.xml file -->
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.hibernate" slot="ogm">
    <resources>
        <resource-root path="hibernate-ogm-core-3.0.0-SNAPSHOT.jar"/>
    </resources>

    <dependencies>
        <module name="org.jboss.as.jpa.hibernate" slot="3"/>
        <module name="org.hibernate" slot="3" export="true" />
        <module name="javax.api"/>
        <module name="javax.persistence.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.validation.api"/>
        <module name="org.apache.ant"/>
        <module name="org.infinispan"/>
        <module name="org.javassist"/>
        <module name="org.slf4j"/>
    </dependencies>
</module>
<!-- persistence.xml using OGM -->
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="OGMExperiment_pu">
    <description>my OGM persistence unit.</description>
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
    <properties>
        <property name="jboss.as.jpa.providerModule" value="org.hibernate:ogm"/>
        <property name="jboss.as.jpa.adapterModule" value="org.jboss.as.jpa.hibernate:3"/>
        <property name="hibernate.ogm.infinispan.configuration_resourcename" value="infinispan.xml"/>
    </properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
  
<!-- 
    infinispan.xml
    This is the testing configuration, running in LOCAL clustering mode to speedup tests.
-->
<infinispan
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:infinispan:config:5.0 http://www.infinispan.org/schemas/infinispan-config-5.0.xsd"
    xmlns="urn:infinispan:config:5.0">

    <global>
    </global>

    <!-- *************************** -->
    <!--   Default cache settings    -->
    <!-- *************************** -->

    <default>
    </default>

    <!-- *************************************** -->
    <!--     Cache to store the OGM entities     -->
    <!-- *************************************** -->
    <namedCache
        name="ENTITIES">
    </namedCache>

    <!-- *********************************************** -->
    <!--   Cache to store the relations across entities  -->
    <!-- *********************************************** -->
    <namedCache
        name="ASSOCIATIONS">
    </namedCache>

    <!-- ***************************** -->
    <!--   Cache to store identifiers  -->
    <!-- ***************************** -->
    <namedCache
        name="IDENTIFIERS">
    </namedCache>

</infinispan>

要运行我添加的OGM单元测试(在手动创建org.hibernate:ogm模块后),按照以下步骤运行单元测试

  1. cd testsuite
  2. cd compat
  3. mvn clean install -DallTests

单元测试将运行一个AS7实例,并使用Infinispan在本地模式。将创建一些实体(在JTA事务下)并读取。如果您看到错误org.jboss.as.testsuite.compat.jpa.hibernate.OGMHibernate3SharedModuleProviderTestCase: Could not deploy to container,请打开./target/jbossas/standalone/log/server.log以查看错误原因(您是否创建了as/modules/org/hibernate/3和as/modules/org/hibernate/ogm模块?)

参见OGM文档以了解有关OGM的更多信息。

正如我之前所说的,在AS7上使用OGM目前是实验性的。 ;)

AS 7.0.1 JPA文档

AS7 JPA的文档可在此处获得.

我开始了一个新的git仓库,用于进行EclipseLink集成。这将需要与EclipseLink项目协调,因为可能也需要在那里进行更改。EclipseLink有eclipselink.target.server属性可以设置为JBoss,但它还不支持AS7。此外,我们需要修复AS7中的PersistenceUnitMetadata.getNewTempClassLoader()。根据兴趣程度,AS7中的EclipseLink集成将结合起来(更多的工作可能是在EclipeLink项目本身内)。

欢迎社区贡献

请继续在AS7用户讨论论坛上提问/回答问题。我希望与更多社区成员一起进一步修改AS7中JPA集成支持的代码。如果您愿意志愿者,在IRC上找到Scott Marlow(irc://irc.freenode.org/jboss-as)。同时,我们也在与其他持久化提供程序进行集成支持。


返回顶部