Ich bin gerade dabei, eine Anwendung von JBoss 4.2.1 auf RH EAP 4.3.0 (basiert auf JBoss 4.2.3) zu "portieren". Ich nutze die im JBoss gebundelten hibernate-Jars. Auf dem 4.2.1 liest er die hibernate.cfg.xml korrekt ein, auf dem 4.3.0 nicht. Das EAR-File ist jedes mall wie folgt aufgebaut:
Code:
basis
+- ejb.jar
| +- hibernate.cfg.xml
| +- hibernate.properties
| +- de/... (classes)
| +- ...
+- ... [diverse jars]
+- mein-tool.jar
Die Hibernate-Session wird in mein-tool.jar zusammengebaut per
Code:
sessFactory = new Configuration().configure().buildSessionFactory();
Dazu habe ich noch 2 Anmerkungen:
1. Die komische Lage der hibernate-Configfiles kommt daher, daß es beim 4.2.1 so war, daß er die Files im Classpath des EJBs, das auf die mein-tool.jar zugreift, gesucht hat. Daher wird sie zwar aus mein-tool.jar aufgerufen aber mit dem Classpath der EJB.
2. Ich brauche sowohl hibernate.cfg.xml wie auch hibernate.properties, da hibernate die Einstellung "hibernate.bytecode.provider=javassist" nicht in der hibernate.cfg.xml auslesen kann sondern nur aus der properties. Eventuell hat sich das inzwischen geändert (die Recherche ist jetzt 1,5 Jahre alt).
Beim 4.3.0er-EAP kommt jetzt die folgende Exception:
Code:
Caused by: org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1500)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)
at de.telefonica.jwe.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:26)
... 55 more
Caused by: org.dom4j.DocumentException: org.dom4j.DocumentFactory Nested exception: org.dom4j.DocumentFactory
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1490)
... 58 more
Die hibernate.cfg.xml sieht so aus:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="SessionFactory">
<property name="session_factory_name">hibernate/jweSessionFactory</property>
<property name="default_entity_mode">pojo</property>
<!-- Database connection settings -->
<property name="connection.datasource">java:/A049orderMGM</property>
<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
<!-- Transaction Manager -->
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
<property name="hibernate.transaction.auto_close_session">true</property>
<!-- Caching -->
<property name="hibernate.cache.provider_class">org.jboss.hibernate.cache.DeployedTreeCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_minimal_puts">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_structured_entries">true</property>
<!-- JWE tables -->
<mapping resource="de/telefonica/jwe/hibernate/PerformanceLog.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(Im echten System sind da noch mehr Mappings und ein paar SQL-Formatierungsstatements drin, aber mit dieser Config tritt der Fehler auch auf). Und ja, die Connection-Datasource existiert.
Und dom4j-1.6.1.jar nutze ich auch.
Das waren die Tipps, die ich bis jetzt finden konnte. Übersehe ich da was wichtiges? Wie gesagt: das Verhalten ändert sich zwischen JBoss 4.2.1 und RH EAP 4.3.0 (basierend auf JBoss 4.2.3) ...
bye, Roland