Hi Bevon,

I haven't looked through all the files you post but want to give a couple hints, maybe you can easily track down what is going on.

In Geronimo, the jta-datasource and non-jta-datasource values don't refer to anything in jndi, they basically look up components registered in the geronimo kernel. The JPA architecture has the container (geronimo's jpa support) setting up an object that includes these datasources and the rest of the info from the persistence.xml, suitably resolved. So, you don't need to declare any resource-refs in your ejb jar anywhere to use jpa.

For non-jpa hibernate, IIUC your explanation, jndi is really used to find the datasource(s). I'm not clear on exactly what is getting looked up.... I strongly advise finding out. I also suggest using the standard geronimo jndi rather than the openejb jndi context which is unlikely to have any datasources in it since it is for looking up ejbs. I'd hope that if you _don't_ set the hibernate property it would just use
new InitialContext() which ought to work.

Finally, hibernate might be trying to look up a java:comp/env jndi name defined by a resource ref in the ejb jar or some completely specified string for a global jndi name. In the latter case, you'll want to check the geronimo.log to make sure you know exactly what the global jndi name for your datasource actually is.... it gets logged as the datasource starts.

hope this helps, and if you want to update our docs when you get it working that would be great!

thanks
david jencks

On Nov 14, 2009, at 11:59 AM, Bevon wrote:


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.


Reply via email to