以下是一些在将基于Hibernate 3的应用程序迁移到JBoss AS7时的一些快速技巧,涵盖了JBoss AS 7.0.0.Final提供的选项。
在JBoss AS的早期版本中,类路径上始终存在Hibernate的一个版本。因此,直接使用Hibernate的应用程序传统上避免将其包含在部署中,以避免类加载冲突,或者采取额外步骤来强制类加载器隔离。
由于新的模块化类加载模型,AS7中的可见性规则已更改,因此Hibernate库默认情况下仅对JPA部署可见。这些更改可能会影响现有的Hibernate应用程序,因此这是在JBoss AS7上运行时可用选项的简要概述。无论在未来的版本中这些内容如何变化,我们也会提供即将推出的改进的简要描述。
原生Hibernate应用程序
从JBoss AS 7.0.0.Final版本开始,原生(即非JPA)Hibernate应用程序可以在以下选项之间进行选择
- 在应用程序内部打包他们选择的Hibernate版本;
- 将'org.hibernate'模块作为应用程序的依赖项添加(添加Hibernate 4),例如通过向部署添加一个包含以下行的META-INF/MANIFEST.MF文件
Dependencies: org.hibernate
- 创建一个自定义的Hibernate 3模块,并将其作为应用程序的依赖项添加,例如
Dependencies: my-custom-hibernate-module
请注意,JBoss AS7的未来版本可能已经提供了Hibernate 3模块的框架。
应用程序创建的持久单元
创建EntityManagerFactory的JPA应用程序,无论是直接使用PersistenceProvider SPI还是通过Spring的LocalContainerEntityManagerFactoryBean等中介机制,它们与原生Hibernate应用程序具有相同的选项,需要注意的是'org.hibernate'模块可能默认作为依赖项添加,如此处所述 - 因此,如果您想提供自己的版本,您可能需要显式排除它。因此,在典型情况下,此类应用程序可以
- 使用默认设置(并使用Hibernate 4)
- 选择一个Hibernate版本进行打包,并通过添加WEB-INF/jboss-deployment-structure.xml或META-INF/jboss-deployment-structure.xml文件(取决于部署是WAR还是其他类型)来排除默认的'org.hibernate'模块,具体如下:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="org.hibernate"/> </exclusions> <deployment> </jboss-deployment-structure>
- 创建一个自定义模块,并用它来替代默认的'org.hibernate';
容器部署的持久化单元
一般来说,标准的Java EE应用程序可以忽略提供者实现,并依赖于容器提供的标准功能——JBoss AS7支持标准JPA 1.0和2.0。
然而,在JBoss AS7的未来版本中,将能够使用替代的持久化提供者实现——更多详情请参阅 AS7-566。