我正在将从JBoss AS5打包为HAR hibernate存档的应用程序迁移到AS7。我有很多问题,我知道为了成功迁移我的应用程序,我必须面对许多障碍。我不介意自己研究东西 - 但是在这一点上我不太确定什么是可能的,或者我应该采取的方向,并且会欣赏任何指针或评论。
我知道JBoss AS7不支持HAR hibernate档案 - 因此我必须进行某些更改才能使其正常工作。我的应用程序需要hibernate3,我将其作为依赖项包含在内。我的HAR结构就像
HAR
|
|-com
| |-business classes
| |-*class files and *hbm.xml files
|
|-META-INF
|-hibernate.xml
我的hibernate.xml文件看起来像
<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
<session-factory name="java:/hibernate/SessionFactory" bean="jboss.har:service=Hibernate">
<property name="datasourceName">java:/MySqlDS</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- <property name="sessionFactoryInterceptor">org.jboss.test.hibernate.SimpleInterceptor</property> -->
<!-- <property name="hbm2ddlAuto">create</property> -->
<depends>jboss:service=Naming</depends>
<depends>jboss:service=TransactionManager</depends>
</session-factory>
</hibernate-configuration>
我们在HAR中使用* hbm.xml文件来定义实体,而不是更新的hibernate注释样式。我有几个问题:
- 有没有办法我可以将我的HAR打包为JAR并在AS7中使用它,而不必经历重写我的业务类以使用注释来定义实体而不是使用* hbm.xml文件的麻烦?
- 如果没有关于将代码转换为使用hibernate注释和persistence.xml的指南吗?我不介意做研究,但现在我不确定我应该研究什么。
答案 0 :(得分:1)
JBoss 7中不再存在HAR档案。实际上甚至ServiceBeanSupport都不存在了。一种可能性是使用某种机制来创建SessionFactory并将其注入JNDI。另一种可能性是“使用而不使用”新的JPA API。 “使用”是指在persistence.xml文件中定义Hibernate配置并使用可用的映射检测功能。这将允许使用添加的META-INF / persistence.xml文件将.har简单重命名为.jar,而无需在某个地方对长列表中的所有映射和类进行硬编码。通过“不使用”我的意思是初始化JPA但使用旧的SessionFactory,因为没有理由在旧API工作得很好时更改为新的API。 但是,另一个问题是JBoss 7与Hibernate 4捆绑在一起,迁移可能并不简单。但是,仍然有可能在应用程序中将Hibernate捆绑为低至3.5。这是persistence.xml:
<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_2_0.xsd"
version="2.0">
<persistence-unit name="X">
<description>X</description>
<jta-data-source>java:/XOracleDS</jta-data-source>
<properties>
<!-- This tells JBoss to use Hibernate 3 (as low as 3.5) bundled into the application -->
<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
<!--<property name="jboss.as.jpa.managed" value="false"/>-->
<!-- This will bind the session factory to JNDI as we require -->
<property name="hibernate.session_factory_name" value="java:/hibernate/XOracleSessionFactory"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<!-- This is one of the trickiest parts as Hibernate 3.5 does not has a RegionFactory and we must use the one from ehcache to bridge the gap -->
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory"/>
<!-- very important to allow same names as in JBoss 4 -->
<property name="hibernate.cache.region_prefix" value=""/>
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
<!-- This will make use of JBoss managed transactions. The factory is already present in JNDI -->
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
<property name="hibernate.jdbc.batch_size" value="20"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
</properties>
</persistence-unit>
</persistence>
&#13;