4 Replies Latest reply on Nov 30, 2004 11:15 AM by rajs1

    Hibernate2 with JBoss4 (cannot bind) ?

    rajs1

      I posted this on Persistence & CMP/JBoss but did not get much milage. I am hoping I will have some better luck in this forum. Failing this, I wil have to give up on JBoss on move on, I really hope you can help.

      I am trying a simple test with Hibernate on JBoss 4 (with Firebird as the DB) but cannot get a context.lookup to work.


      I have replaced the jboss-hibernate.jar file with the one mentioned in the http://www.jboss.org/wiki/Wiki.jsp?page=JBossHibernate and renamed it (from: jboss-hibernate-NEW.jar) to jboss-hibernate.jar

      I have deployed the har file with the following structure:

      test.har:
      meta-inf/hibernate-service.xml
      com/test/myclasses
      com/test/mymapping.hbm.xml

      The hibernate-service.xml is

      <mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
       <attribute name="DatasourceName">java:/DefaultDS</attribute>
       <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute>
       <attribute name="Dialect">net.sf.hibernate.dialect.FirebirdDialect</attribute>
       <attribute name="CacheProviderClass">net.sf.hibernate.cache.HashtableCacheProvider</attribute>
      </mbean>
      


      The jboss output is as follows:

      ...
       [StandardService] Starting service jboss.web
       [StandardEngine] Starting Servlet Engine: Apache Tomcat/5.0.28
       [StandardHost] XML validation disabled
       [Catalina] Server startup in 62 ms
       [TomcatDeployer] deploy, ctxPath=/invoker, warUrl=file:/D:/jboss-4.0.0RC2/server/default/deploy/htt
      p-invoker.sar/invoker.war/
       [TomcatDeployer] deploy, ctxPath=/ws4ee, warUrl=file:/D:/jboss-4.0.0RC2/server/default/tmp/deploy/t
      mp10181jboss-ws4ee-exp.war/
       [TomcatDeployer] deploy, ctxPath=/, warUrl=file:/D:/jboss-4.0.0RC2/server/default/deploy/jbossweb-t
      omcat50.sar/ROOT.war/
       [TomcatDeployer] deploy, ctxPath=/jbossmq-httpil, warUrl=file:/D:/jboss-4.0.0RC2/server/default/dep
      loy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/
       [ConnectionFactoryBindingService] Bound connection factory for resource adapter for ConnectionManag
      er 'jboss.jca:name=DefaultDS,service=ConnectionFactoryBinding to JNDI name 'java:DefaultDS'
       [ConnectionFactoryBindingService] Bound connection factory for resource adapter for ConnectionManag
      er 'jboss.jca:name=JmsXA,service=ConnectionFactoryBinding to JNDI name 'java:JmsXA'
       [MailService] Mail Service bound to java:/Mail
       [Environment] Hibernate 2.1.5
       [Environment] hibernate.properties not found
       [Environment] using CGLIB reflection optimizer
       [Configuration] Searching for mapping documents in jar: test.har
       [Configuration] Found mapping documents in jar: com/test/Person.hbm.xml
       [Binder] Mapping class: com.test.Person -> Cnt_Person
       [Configuration] processing one-to-many association mappings
       [Configuration] processing one-to-one association property references
       [Configuration] processing foreign key constraints
       [Dialect] Using dialect: net.sf.hibernate.dialect.FirebirdDialect
       [SettingsFactory] Use outer join fetching: true
       [NamingHelper] JNDI InitialContext properties:{}
       [DatasourceConnectionProvider] Using datasource: java:/DefaultDS
       [TransactionFactoryFactory] Transaction strategy: net.sf.hibernate.transaction.JTATransactionFactor
      y
       [NamingHelper] JNDI InitialContext properties:{}
       [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: net.sf.hibernate.transact
      ion.JBossTransactionManagerLookup
       [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
       [NamingHelper] JNDI InitialContext properties:{}
       [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: net.sf.hibernate.transact
      ion.JBossTransactionManagerLookup
       [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
       [SettingsFactory] Use scrollable result sets: true
       [SettingsFactory] Use JDBC3 getGeneratedKeys(): false
       [SettingsFactory] Optimize cache for minimal puts: false
       [SettingsFactory] Query language substitutions: {}
       [SettingsFactory] cache provider: net.sf.hibernate.cache.HashtableCacheProvider
       [Configuration] instantiating and configuring caches
       [SessionFactoryImpl] building session factory
       [SessionFactoryObjectFactory] Factory name: java:/hibernate/SessionFactory
       [NamingHelper] JNDI InitialContext properties:{}
       [NamingHelper] Creating subcontext: hibernate
       [SessionFactoryObjectFactory] Bound factory to JNDI name: java:/hibernate/SessionFactory
       [SessionFactoryObjectFactory] InitialContext did not implement EventContext
       [NamingHelper] JNDI InitialContext properties:{}
       [EjbModule] Deploying MEJB
       [EJBDeployer] Deployed: file:/D:/jboss-4.0.0RC2/server/default/deploy/management/ejb-management.jar
      
       [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=file:/D:/jboss-4.0.0RC2/server/default/deploy
      /jmx-console.war/
       [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=file:/D:/jboss-4.0.0RC2/server/default/tmp/de
      ploy/tmp10233web-console-exp.war/
      ...
      


      I can see this line:

      [SessionFactoryObjectFactory] Bound factory to JNDI name: java:/hibernate/SessionFactory

      But when I run this:

       Context context = null;
       SessionFactory fac = null;
       try
       {
       env = new Hashtable();
       env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
       env.put(Context.PROVIDER_URL, "localhost:1099");
       env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
       context = new InitialContext(env);
       fac = (SessionFactory)context.lookup("java:/hibernate/SessionFactory");
       ...
      


      I get:

      javax.naming.NameNotFoundException: hibernate not bound
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)
       at org.jnp.server.NamingServer.getBinding(NamingServer.java:503)
       at org.jnp.server.NamingServer.getObject(NamingServer.java:509)
       at org.jnp.server.NamingServer.lookup(NamingServer.java:253)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:529)
       at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:508)
       at javax.naming.InitialContext.lookup(InitialContext.java:347)
       at connection.TestJBossConnection.testConnection(TestJBossConnection.java:33)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:324)
       at junit.framework.TestCase.runTest(TestCase.java:154)
       at junit.framework.TestCase.runBare(TestCase.java:127)
       at junit.framework.TestResult$1.protect(TestResult.java:106)
       at junit.framework.TestResult.runProtected(TestResult.java:124)
       at junit.framework.TestResult.run(TestResult.java:109)
       at junit.framework.TestCase.run(TestCase.java:118)
       at junit.framework.TestSuite.runTest(TestSuite.java:208)
       at junit.framework.TestSuite.run(TestSuite.java:203)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
      


      If I run this:

       HibernateContext.getSession("java:/hibernate/SessionFactory");
      
      


      I get

      java.lang.ExceptionInInitializerError
       at connection.TestJBossConnection.testConnection(TestJBossConnection.java:37)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:324)
       at junit.framework.TestCase.runTest(TestCase.java:154)
       at junit.framework.TestCase.runBare(TestCase.java:127)
       at junit.framework.TestResult$1.protect(TestResult.java:106)
       at junit.framework.TestResult.runProtected(TestResult.java:124)
       at junit.framework.TestResult.run(TestResult.java:109)
       at junit.framework.TestCase.run(TestCase.java:118)
       at junit.framework.TestSuite.runTest(TestSuite.java:208)
       at junit.framework.TestSuite.run(TestSuite.java:203)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
       at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
       Caused by: java.lang.IllegalStateException: An error occured while looking up the transaction manage
       r: javax.naming.NoInitialContextException: Need to specify class name in environment or system prope
       rty, or as an applet parameter, or in an application resource file: java.naming.factory.initial
       at org.jboss.tm.TransactionLocal.<init>(TransactionLocal.java:57)
       at org.jboss.hibernate.session.HibernateContext$1.<init>(HibernateContext.java:40)
       at org.jboss.hibernate.session.HibernateContext.<clinit>(HibernateContext.java:38)
      


      Documentation on using Hibernate with JBoss seems to be very thin on the ground. Most of the Hibernate links in the JBoss website redirect to the Hibernate site.

      All the hibernate docs seem to talk about using Hibernate with Tomcat (which works without any problems).

      Cheers
      -raj


        • 1. Re: Hibernate2 with JBoss4 (cannot bind) ?
          darranl

          You are trying to access the java: namespace remotely.

          • 2. Re: Hibernate2 with JBoss4 (cannot bind) ?
            rajs1

            Yes, I know, but I can only bind as to what JBoss tells me the JNDI name is.

            It says:

            Bound factory to JNDI name: java:/hibernate/SessionFactory
            


            I have tried it without the java: etc etc etc but I always get the same error:

            javax.naming.NameNotFoundException: hibernate not bound


            I am on the verge of giving up on JBoss and trying something like JoNAS.

            Cheers
            -raj

            • 3. Re: Hibernate2 with JBoss4 (cannot bind) ?
              darranl

               

              Bound factory to JNDI name: java:/hibernate/SessionFactory


              This tells you that it has been bound to the java namespace, this means that you must be within the JBoss JVM and access JNDI locally to get access to it.

              It is not bound to the global namespace so removing the java: just means that you will be looking up something that does not exist.



              • 4. Re: Hibernate2 with JBoss4 (cannot bind) ?
                rajs1

                Thanks for the replies Darran.

                I went through the forum archives and thought that was the case. But then I came across a snippet of code where someone claimed to use the above and got a session.

                Anyway it is much is clearer now.

                So does this mean that (one of) the only means of operating on Hibernate POJO persistent beans is to use a (J2EE) session facade?

                Cheers
                -raj