First, my apologies in advance is this should be posted on a
Hibernate board.
But this seems more of a configuration issue specific to Geronimo
so...
Geronimo: v2.1.4
Hibernate core: v3.3.2
Derby Network Server: v10.4.2
I was able to get Hibernate working as my JPA provider (instead of
OpenJPA)
for my EJB3 module. However, as an academic/learning exercise, I
have been
trying to get Hibernate core working as my persistence layer for my
EJB3
module. The problem I'm seeing is that during the Hibernate
Configuration.buildSessionFactory() call, a JNDI exception is thrown
stating
that the datasource could not be found.
I have an application-scoped managed datasource declared for my EAR as
follows:
application.xml:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:application="http://java.sun.com/xml/ns/javaee/
application_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
id="Application_ID"
version="5">
<display-name>PsopEAR5_Test</display-name>
<module>
<connector>Derby/tranql-connector-derby-client-local-1.4.rar</
connector>
</module>
<module>
<web>
<web-uri>Psop_Servlet25_Jsp21.war</web-uri>
<context-root>Psop_Servlet25_Jsp21</context-root>
</web>
</module>
<module>
<ejb>Psop_Ejb30_Hibernate33.jar</ejb>
</module>
</application>
geronimo-application.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<app:application
xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0
"
xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2
"
xmlns:pers="http://java.sun.com/xml/ns/persistence"
xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1
"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0
"
xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1"
application-name="PsopEAR5_Test">
<dep:environment>
<dep:moduleId>
<dep:groupId>default</dep:groupId>
<dep:artifactId>PsopEAR5_Test</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>car</dep:type>
</dep:moduleId>
<dep:dependencies />
</dep:environment>
<app:module>
<!--
This connector module is provided by Geronimo to wrap the
JDBC
client driver needed to access a Derby Network Server data
source.
-->
<app:connector>Derby/tranql-connector-derby-client-local-1.4.rar</
app:connector>
<!--
This deployment plan provides the vendor-specific details
(eg.
Derby-specific requirements) about the data source.
-->
<app:alt-dd>Derby/derby-network-server-plan.xml</app:alt-dd>
</app:module>
</app:application>
derby-network-server-plan.xml:
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/
connector-1.2">
<dep:environment
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
<dep:moduleId>
<dep:groupId>console.dbpool</dep:groupId>
<dep:artifactId>jdbc_psop_derbyDs1</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>org.apache.geronimo.configs</dep:groupId>
<dep:artifactId>system-database</dep:artifactId>
<dep:version>2.1.4</dep:version>
<dep:type>car</dep:type>
</dep:dependency>
</dep:dependencies>
</dep:environment>
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.sql.DataSource</connectionfactory-
interface>
<connectiondefinition-instance>
<name>jdbc/psop/derbyDs1</name>
<config-property-setting
name="DatabaseName">E:\PSOP\Databases\Derby\PSOP_DATABASE</config-
property-setting>
<config-property-setting
name="Password">app</config-property-setting>
<config-property-setting
name="UserName">app</config-property-setting>
<config-property-setting name="LoginTimeout"/>
<connectionmanager>
<local-transaction/>
<single-pool>
<max-size>10</max-size>
<min-size>0</min-size>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
My EJB3 module metadata is as follows:
ejb-jar.xml (essentially empty since I'm using EJB3 annotations):
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<description>PSOP model implemented with EJB 3.0. PSOP persistence
implemented with Hibernate 3.3 (native).</description>
<display-name>Psop_Ejb30_Hibernate33</display-name>
</ejb-jar>
openejb-jar.xml (all of the dependency jars were copied into the
Geronimo
repository):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
xmlns:naming="http://geronimo.apache.org/xml/ns/
naming-1.2"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2
">
<sys:environment>
<sys:moduleId>
<sys:groupId>default</sys:groupId>
<sys:artifactId>Psop_Ejb30_Hibernate33</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>car</sys:type>
</sys:moduleId>
<sys:dependencies>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>core</sys:artifactId>
<sys:version>3.3</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>antlr</sys:artifactId>
<sys:version>2.7.6</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>commons-collections</sys:artifactId>
<sys:version>3.1</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>dom4j</sys:artifactId>
<sys:version>1.6.1</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>javassist</sys:artifactId>
<sys:version>3.9.0.GA</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>jta</sys:artifactId>
<sys:version>1.1</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>psop_hibernate</sys:groupId>
<sys:artifactId>GeronimoTransactionManager</
sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>org.slf4j</sys:groupId>
<sys:artifactId>slf4j-api</sys:artifactId>
<sys:version>1.4.3</sys:version>
<sys:type>jar</sys:type>
</sys:dependency>
</sys:dependencies>
</sys:environment>
</openejb-jar>
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="jdbc/psop/hibernateSf1">
<!-- Derby Network Server data source as configured in the
EAR -->
<property
name="hibernate.connection.datasource">jdbc/psop/derbyDs1</property>
<!-- Derby SQL dialect -->
<property
name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
<!-- Transaction manager lookup class for Geronimno manually
provided. -->
<property
name
=
"hibernate
.transaction
.manager_lookup_class
">org.hibernate.transaction.GeronimoTransactionManagerLookup</
property>
<!-- Transaction manager factory class provided by Hibernate.
-->
<property
name
=
"hibernate
.transaction
.factory_class">org.hibernate.transaction.JTATransactionFactory</
property>
<!-- Show and print nice SQL on stdout -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- List of XML mapping files -->
<mapping
resource="META-INF/mappings/com/psop/model/hibernate/
PlayerHibernateEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Here is the code that tries to build the SessionFactory:
Configuration hibernateConfiguration = new Configuration().configure(
"/META-INF/hibernate.cfg.xml" );
hibernateConfiguration.setProperty(
org.hibernate.cfg.Environment.JNDI_CLASS,
"org.apache.openejb.client.RemoteInitialContextFactory" ) );
hibernateConfiguration
.setProperty( org.hibernate.cfg.Environment.JNDI_URL,
"ejbd://localhost:4201" );
sessionFactorySingleInstance =
hibernateConfiguration.buildSessionFactory();
// throws JNDI exception
// as a test, if I do a JNDI lookup on "jdbc/psop/derbyDs1", I get
the same
exception
Here is the exception that occurs during publishing (I'm using Eclipse
Ganymede with GEP):
javax.naming.NameNotFoundException: /jdbc/psop/derbyDs1 does not
exist in
the system. Check that the app was successfully deployed.
at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:277)
at javax.naming.InitialContext.lookup(Unknown Source)
at
com
.psop
.model
.ejb
.config
.EjbHibernateModelConfig
.initializeSessionFactory(EjbHibernateModelConfig.java:234)
at
com
.psop
.model
.ejb
.config
.EjbHibernateModelConfig
.initializeModel(EjbHibernateModelConfig.java:292)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext
$Invocation.invoke(ReflectionInvocationContext.java:158)
at
org
.apache
.openejb
.core
.interceptor
.ReflectionInvocationContext
.proceed(ReflectionInvocationContext.java:141)
at
org
.apache
.openejb
.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
at
org
.apache
.openejb
.core.stateless.StatelessContainer._invoke(StatelessContainer.java:
210)
at
org
.apache
.openejb
.core.stateless.StatelessContainer._invoke(StatelessContainer.java:
188)
at
org
.apache
.openejb
.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
at
org
.apache
.openejb
.server
.ejbd
.EjbRequestHandler
.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238)
at
org
.apache
.openejb
.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:
129)
at
org
.apache
.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:164)
at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:
122)
at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:
84)
at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:
60)
at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:78)
at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:101)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Geronimo log (I don't see any binding of the datasource to JNDI here):
2009-11-14 14:30:06,903 INFO [config] Configuring Service(id=Default
Stateless Container, type=Container, provider-id=Default Stateless
Container)
2009-11-14 14:30:06,903 INFO [config] Configuring Service(id=Default
Stateful Container, type=Container, provider-id=Default Stateful
Container)
2009-11-14 14:30:06,903 INFO [config] Configuring
Service(id=Default BMP
Container, type=Container, provider-id=Default BMP Container)
2009-11-14 14:30:06,903 INFO [config] Configuring
Service(id=Default CMP
Container, type=Container, provider-id=Default CMP Container)
2009-11-14 14:30:06,903 INFO [config] Configuring app:
default/PsopEAR5_Test/1.0/car
2009-11-14 14:30:06,919 INFO [OpenEJB] Auto-deploying ejb
ejb/psop/ejbHibernateFinder:
EjbDeployment(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateFinder)
2009-11-14 14:30:06,919 INFO [OpenEJB] Auto-deploying ejb
ejb/psop/ejbHibernateDestroyer:
EjbDeployment(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateDestroyer)
2009-11-14 14:30:06,919 INFO [OpenEJB] Auto-deploying ejb
ejb/psop/ejbHibernateCreator:
EjbDeployment(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateCreator)
2009-11-14 14:30:06,919 INFO [OpenEJB] Auto-deploying ejb
ejb/psop/ejbHibernateModelConfig:
EjbDeployment(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateModelConfig)
2009-11-14 14:30:06,919 INFO [config] Loaded Module:
default/PsopEAR5_Test/1.0/car
2009-11-14 14:30:07,810 INFO [KernelContextGBean] bound gbean
default/PsopEAR5_Test/1.0/car?J2EEApplication=default/PsopEAR5_Test/
1.0/car,JCAConnectionFactory=jdbc/psop/derbyDs1,JCAResource=Derby/
tranql-connector-derby-client-local-1.4.rar,ResourceAdapter=Derby/
tranql-connector-derby-client-
local-1.4.rar,ResourceAdapterModule=Derby/tranql-connector-derby-
client-local-1.4.rar,j2eeType=JCAManagedConnectionFactory,name=jdbc/
psop/derbyDs1
at name default/PsopEAR5_Test/JCAManagedConnectionFactory/jdbc/psop/
derbyDs1
2009-11-14 14:30:07,810 INFO [startup] Assembling app: C:\Documents
and
Settings\Bevon Palod\Local
Settings\Temp\geronimo-deploymentUtil3743899707090395072.jar
2009-11-14 14:30:07,872 INFO [startup]
Jndi(name=ejb/psop/ejbHibernateFinderRemote) -->
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateFinder)
2009-11-14 14:30:07,872 INFO [startup]
Jndi(name=ejb/psop/ejbHibernateDestroyerRemote) -->
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateDestroyer)
2009-11-14 14:30:07,872 INFO [startup]
Jndi(name=ejb/psop/ejbHibernateCreatorRemote) -->
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateCreator)
2009-11-14 14:30:07,872 INFO [startup]
Jndi(name=ejb/psop/ejbHibernateModelConfigRemote) -->
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateModelConfig)
2009-11-14 14:30:07,872 INFO [startup] Created
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateFinder,
ejb-name=ejb/psop/ejbHibernateFinder, container=Default Stateless
Container)
2009-11-14 14:30:07,872 INFO [startup] Created
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateDestroyer,
ejb-name=ejb/psop/ejbHibernateDestroyer, container=Default Stateless
Container)
2009-11-14 14:30:07,872 INFO [startup] Created
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateCreator,
ejb-name=ejb/psop/ejbHibernateCreator, container=Default Stateless
Container)
2009-11-14 14:30:07,872 INFO [startup] Created
Ejb(deployment-id=Psop_Ejb30_Hibernate33.jar/ejb/psop/
ejbHibernateModelConfig,
ejb-name=ejb/psop/ejbHibernateModelConfig, container=Default Stateless
Container)
2009-11-14 14:30:07,872 INFO [startup] Deployed
Application(path=C:\Documents and Settings\Bevon Palod\Local
Settings\Temp\geronimo-deploymentUtil3743899707090395072.jar)
2009-11-14 14:30:08,013 INFO [OpenEJB] invoking method create on
Psop_Ejb30_Hibernate33.jar/ejb/psop/ejbHibernateModelConfig
2009-11-14 14:30:08,013 INFO [OpenEJB] finished invoking method
create
2009-11-14 14:30:08,013 INFO [Transaction] TX Required: Started
transaction
org.apache.geronimo.transaction.manager.transactioni...@188807b
2009-11-14 14:30:08,091 INFO [Environment] Hibernate 3.3.2.GA
2009-11-14 14:30:08,091 INFO [Environment] hibernate.properties not
found
2009-11-14 14:30:08,106 INFO [Environment] Bytecode provider name :
javassist
2009-11-14 14:30:08,122 INFO [Environment] using JDK 1.4
java.sql.Timestamp
handling
2009-11-14 14:30:08,356 INFO [Configuration] configuring from
resource:
/META-INF/hibernate.cfg.xml
2009-11-14 14:30:08,356 INFO [Configuration] Configuration resource:
/META-INF/hibernate.cfg.xml
2009-11-14 14:30:08,497 INFO [Configuration] Reading mappings from
resource
: META-INF/mappings/com/psop/model/hibernate/
PlayerHibernateEntity.hbm.xml
2009-11-14 14:30:08,606 INFO [HbmBinder] Mapping class:
com.psop.model.hibernate.PlayerHibernateEntity -> PLAYERS
2009-11-14 14:30:08,685 INFO [Configuration] Configured
SessionFactory:
jdbc/psop/hibernateSf1
2009-11-14 14:30:08,685 INFO [Transaction] TX Required: Committing
transaction
org.apache.geronimo.transaction.manager.transactioni...@188807b
I do not see this exception when I make use of Hibernate Annotations +
EnitityManager and stick with JPA-only API/annotations in my code.
In terms
of configuration, the EAR metadata is exactly the same (save for
swapping
the EJB3 modules). The EJB3 module metadata has two differences:
1. I've got a persistence.xml instead of hibernate.cfg.xml.
2. I've added the Hibernate Annotations + EntityManager
dependencies to my
openejb-jar.xml (won't bother pasting it again here).
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_1_0.xsd"
version="1.0" >
<persistence-unit name="Psop_Ejb30_Jpa10" transaction-type="JTA">
<description>Hibernate v3.3 JPA provider</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/psop/derbyDs1</jta-data-source>
<class>com.psop.model.jpa.PlayerJpaEntity</class>
<properties>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.GeronimoTransactionManagerLookup"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.dialect"
value="org.hibernate.dialect.DerbyDialect"/>
</properties>
</persistence-unit>
</persistence>
My best guess -- I'm doing something wrong or it's a faulty
assumption that
my datasource will automagically be registered in JNDI (as it is
with JPA).
Please bear with me as I'm a newbie. I've been banging on Geronimo
for just
about a month and have been at Hibernate for maybe a week. If
someone could
shed some light on this problem or perhaps point me to some
documentation
(yes, I've read the Hibernate to Geronimo migration docs, yes, I've
googled,
yes, I did a keyword search on this forum for "Hibernate datasource").
Many thanks in advance!!!
Bevon
--
View this message in context:
http://old.nabble.com/JNDI-lookup-fails-with-Hibernate-%2B-application-scoped-datasource-tp26353366s134p26353366.html
Sent from the Apache Geronimo - Users mailing list archive at
Nabble.com.