Перенесите архив Hibernate HAR в JBoss 7 - PullRequest
2 голосов
/ 18 августа 2011

Я переношу приложение, упакованное в архив Hibernate HAR, из JBoss AS5 в AS7. У меня есть ряд вопросов, и я знаю, что у меня есть ряд препятствий, с которыми мне приходится сталкиваться, чтобы успешно перенести мое приложение. Я не против исследовать вещи самостоятельно - но на данный момент я не совсем уверен, что возможно, или направление, которое я должен выбрать, и буду признателен за любые указатели или комментарии.

Я знаю, что JBoss AS7 не поддерживает HAR-архивы HAR - поэтому мне нужно внести какие-то изменения, чтобы это работало. Мое приложение требует 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>

Мы используем файлы * hbm.xml в нашем HAR для определения сущностей, а не новый стиль аннотаций гибернации. У меня есть пара вопросов:

-Есть ли способ, которым я могу просто упаковать свой HAR в качестве JAR и использовать его внутри AS7 без необходимости переписывать мои бизнес-классы, чтобы использовать аннотации для определения сущностей вместо использования файлов * hbm.xml?
-Если где-то есть руководство по конвертации вашего кода для использования спящих аннотаций и persistence.xml? Я не против проводить исследования, но сейчас я не уверен, что мне следует исследовать.

1 Ответ

1 голос
/ 19 января 2015

Архивы HAR больше не существуют в JBoss 7.На самом деле даже ServiceMBeanSupport больше не существует.Одна возможность - использовать некоторый механизм для создания SessionFactory и внедрения его в JNDIДругая возможность - «использовать, а не использовать» новый API JPA.Под «использованием» я подразумеваю определение конфигурации Hibernate в файле persistence.xml и использование доступной функции обнаружения сопоставления.Это позволило бы простым переименованием .har в .jar с добавленным файлом META-INF / persistence.xml без необходимости жестко кодировать все отображения и классы в длинном списке где-либо.Под «не использовать» я имею в виду инициализацию JPA, но вместо этого использую старый SessionFactory, потому что нет причин переходить на новый 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...