Никак не получается заставить работать Hibernate через JBoss. Hibernate 3.0, JBoss 4.0.4. Сам EAR отлично деплоится, и DataSource жив, EJB компоненты тоже работают. orgs.har: META-INF/hibernate-service.xml Orgs.class Orgs.hbm.xml hibernate-service.xml: Код | <server> <mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate"> <attribute name="DatasourceName">java:/jdbc/PostgresDS</attribute> <attribute name="Dialect">org.hibernate.dialect.PostgreSQLDialect</attribute> <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute> <attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute> <attribute name="ShowSqlEnabled">true</attribute> </mbean> </server>
|
Test.ear: META-INF/application.xml META-INF/jboss-app.xml orgs.har jboss-app.xml: Код | <!DOCTYPE jboss-app PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN" "http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd"> <jboss-app> <module> <har>orgs.har</har> </module> </jboss-app>
|
Во время деплоймента в JBoss смущает запись в логах: Код | 23:35:40,825 INFO [SessionFactoryImpl] building session factory 23:35:40,825 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured 23:35:40,825 INFO [NamingHelper] JNDI InitialContext properties:{} 23:35:40,840 INFO [Hibernate] SessionFactory successfully built and bound intoJNDI [java:/hibernate/SessionFactory]
|
Если в клиенте попробывать найти запись в JNDI, то ловится exception: Код | javax.naming.NameNotFoundException: hibernate not bound
|
Код | Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "localhost:1099"); try { InitialContext ctx = new InitialContext(env); ctx.lookup("java:/hibernate/SessionFactory") } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
|
В документации по Hibernate в JBoss примерно такой пример (не считая свойств контекста). В инете нашёл вариант, где в файле hibernate-service.xml значение аттрибута SessionFactoryName задаётся без "java:/", т.е. Код | <server> ... <attribute name="SessionFactoryName">hibernate/SessionFactory</attribute> ... </server>
|
Но при таком варианте ctx.lookup вообще ругается на отсутствие класса org/apache/commons/logging/LogFactory. Код | Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
|
Добавляем пакет commons-logging, раз так нужно. Теперь выдаётся более осмысленная ошибка: Код | 20.07.2006 23:44:37 org.hibernate.impl.SessionFactoryObjectFactory getInstance WARNING: Not found: 8a739a910c8d795d010c8d79adb20001
|
, где "8a739a910c8d795d010c8d79adb20001" этот как раз кусочек смущающего лога (виден при DEBUG детализации лога) Код | 23:46:37,106 DEBUG [SessionFactoryObjectFactory] registered: 8a739a910c8d795d010c8d79adb20001 (unnamed) 23:46:37,106 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured 23:46:37,106 DEBUG [SessionFactoryImpl] instantiated session factory 23:46:37,106 DEBUG [SessionFactoryImpl] obtaining JTA TransactionManager 23:46:37,106 INFO [NamingHelper] JNDI InitialContext properties:{} ... 23:46:37,137 DEBUG [SessionFactoryImpl] Returning a Reference to the SessionFactory 23:46:37,137 INFO [Hibernate] SessionFactory successfully built and bound intoJNDI [hibernate/SessionFactory]
|
Как нормально деплоить hibernate классы в JBoss, чтобы их можно было использовать в клиентской части?
|