5 Replies Latest reply on Mar 17, 2002 10:33 PM by davidjencks

    Lookup problem with JNDI

    shailesh_dangi

      Guys:

      I have a little trouble understanding how the objects are bound and discovered with JNDI in Jboss. Do I specify the JNDI Binding in Jboss.xml file? Does Jboss follow the standard J2EE Naming Conventions to find objects relative to java:comp/env.? Even though I have specified
      <jndi-name>interest/Interest</jndi-name> the jboss.xml file why is the object (proxy)
      bound against “Interest” name under the root context?

      More over I am not able to find resources if I use java:comp/env/jdbc/OraclePoolDS to get Connection objects. This happens no matter what I user “jdbc/OraclePoolDS” or just “OraclePoolDS” or even “java:/jdbc/OracleDBPool”. The built in “java:/DefaultDS” also doesn’t work. Could some one spend some time explaining how to do the bindings?


      Secondly, as part of Bean-Container contract, the container provider is mandated to implement enterprise bean's home and component interfaces. Where does JBoss generate and store these implementations?.

      I also have a test JNDI program (see below) that looks up jndi.properties from the classpath.
      I am printing the env variables and the all the objects bound. There is nothing bound under
      “java:”. Weird.

      Please help !!!


      [INFO,HypersonicDatabase] Database started
      [INFO,HypersonicDatabase] Started
      [INFO,DefaultDS] Starting
      [INFO,DefaultDS] XA Connection pool DefaultDS bound to java:/DefaultDS
      [INFO,DefaultDS] Started
      [INFO,jdbc/OracleDBPool] Starting
      [INFO,jdbc/OracleDBPool] XA Connection pool jdbc/OracleDBPool bound to java:/jdbc/OracleDBPool
      [INFO,jdbc/OracleDBPool] Started
      .
      .
      .
      ******************************************************************************************
      Sample JNDI Program

      package com.companyname.utils;

      import javax.naming.*;
      import java.util.*;

      public class TestJNDI extends Object {

      /**
      * Constructor
      */
      public TestJNDI() {

      }

      public static void main(String [] args) throws Exception{
      InitialContext jndiContext = new InitialContext();
      Hashtable env = jndiContext.getEnvironment();
      System.out.println("*****************************************");
      for(Enumeration enum = env.keys();enum.hasMoreElements();){
      String key = enum.nextElement().toString();
      System.out.println(key+"="+env.get(key).toString());
      }
      System.out.println("*****************************************");
      NamingEnumeration enum = jndiContext.list("");
      while (enum.hasMore()) {
      System.out.println(enum.next());
      }

      System.out.println("*****************************************");
      enum = jndiContext.list("java:/");
      while (enum.hasMore()) {
      System.out.println(enum.next()); ß This is empty
      }
      System.out.println("*****************************************");

      Object ref = jndiContext.lookup("Interest"); //From example – shouldn’t this be java:comp/env/ejb/
      System.out.println(ref.getClass().getName());
      System.out.println("*****************************************");


      System.out.println("*****************************************");

      ref = jndiContext.lookup("java:/DefaultDS”);//From example throws Exception
      System.out.println(ref.getClass().getName());
      System.out.println("*****************************************");

      jndiContext.close();
      }
      }


      ******************************************************************************************
      Sample JNDI Output

      ******************************************************************************************
      java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
      java.naming.provider.url=NY500-03-164A.bloomberg.com:1099
      java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
      ******************************************************************************************
      TopicConnectionFactory: javax.naming.LinkRef
      jmx: org.jboss.jmx.server.JMXAdaptorImpl
      ConnectionFactory: org.jboss.mq.SpyConnectionFactory
      UserTransactionSessionFactory: org.jboss.tm.usertx.server.UserTransactionSessionFactoryImpl
      Interest: $Proxy2
      jmx:ny500-03-164a:rmi: org.jboss.jmx.server.RMIConnectorImpl
      XAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
      invokers: org.jnp.interfaces.NamingContext
      UserTransaction: org.jboss.tm.usertx.client.ClientUserTransaction
      UILXAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
      RMIXAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
      queue: org.jnp.interfaces.NamingContext
      topic: org.jnp.interfaces.NamingContext
      FwkTab: $Proxy4
      UILConnectionFactory: org.jboss.mq.SpyConnectionFactory
      servercollector: org.jboss.management.ServerDataCollector
      RMIConnectionFactory: org.jboss.mq.SpyConnectionFactory
      QueueConnectionFactory: javax.naming.LinkRef
      ******************************************************************************************
      ******************************************************************************************
      $Proxy0
      ******************************************************************************************
      ******************************************************************************************
      javax.naming.NameNotFoundException: DefaultDS 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:282)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:349)
      at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:333)
      at javax.naming.InitialContext.lookup(InitialContext.java:350)
      at com.companyname.utils.TestJNDI.main(TestJNDI.java:50)


      JBOSS.XML

      <?xml version="1.0" encoding="UTF-8"?>

      <enterprise-beans>

      <ejb-name>Interest</ejb-name>
      <jndi-name>interest/Interest</jndi-name>


      <ejb-name>FwkTab</ejb-name>
      <jndi-name>portal/FwkTab</jndi-name>
      <resource-ref>
      <res-ref-name>jdbc/OracleDBPool</res-ref-name>
      <jndi-name>java:/OracleDBPool</jndi-name> <- Not sure.
      </resource-ref>

      </enterprise-beans>
      <resource-managers>
      <resource-manager res-class="org.jboss.jdbc.XADataSourceLoader">
      <res-name>jdbc/OracleDBPool</res-name>
      <res-jndi-name>java:/OracleDBPool</res-jndi-name>
      </resource-manager>
      </resource-managers>



      EJB-JAR.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar>
      Portal Application
      <display-name>Portal EJB</display-name>
      <enterprise-beans>

      <ejb-name>Interest</ejb-name>
      com.companyname.ejbs.sessionbeans.InterestHome
      com.companyname.ejbs.sessionbeans.Interest
      <ejb-class>com.companyname.ejbs.sessionbeans.InterestBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Bean</transaction-type>
      <resource-ref>
      Oracle DS
      <res-ref-name>jdbc/OracleDBPool</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      </resource-ref>



      FwkTab
      <ejb-name>FwkTab</ejb-name>
      com.companyname.ejbs.entitybeans.FwkTabHome
      com.companyname.ejbs.entitybeans.FwkTab
      <ejb-class>com.companyname.ejbs.entitybeans.FwkTabBean</ejb-class>
      <persistence-type>Bean</persistence-type>
      <prim-key-class>java.lang.Integer</prim-key-class>
      False
      <resource-ref>
      Oracle DS
      <res-ref-name>jdbc/OracleDBPool</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      </resource-ref>

      </enterprise-beans>
      </ejb-jar>


      Section of jboss.jcml


      <!-- ==================================================================== -->
      <!-- JDBC -->
      <!-- ==================================================================== -->


      oracle.jdbc.driver.OracleDriver,org.hsqldb.jdbcDriver




      1476
      true
      default
      false



      DefaultDS
      org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl

      jdbc:hsqldb:hsql://localhost:1476
      1200000
      sa
      10

      false
      false
      false
      true
      120000
      1800000
      false
      false
      1.0
      0




      oracle.jdbc.driver.OracleDriver,org.hsqldb.jdbcDriver



      org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl
      jdbc/OracleDBPool
      jdbc:oracle:thin:@crmdev:1521:blpt

      apps
      apps
      2
      2
      true
      20
      20
      false
      false
      true
      false
      false
      1800000
      1.0




      Section of Output from: http://ny500-03-164a.bloomberg.com:8082

      DefaultDomain
      .
      .
      service=XADataSource,name=DefaultDS
      service=XADataSource,name=jdbc/OracleDBPool
      type=Shutdown
      .
      .

      Management
      jndiName=FwkTab
      jndiName=Interest

        • 1. Re: Lookup problem with JNDI
          armint

          Things are working just as they should. There are a few reasons why your test program doesn't work the way you expect. Your datasources are bound to the java:/ namespace which only visible inside the vm of the server. So, your remote client cannot access them. Also, when you create a resource-ref like jdbc/OracleDBPool in ejb-jar.xml, that ref is bound to java:comp/env/jdbc/OracleDBPool. You can use that ref inside the component (i.e. FwkTab), but it is not visible elsewhere.

          • 2. Re: Lookup problem with JNDI
            shailesh_dangi

            What about the beans that are deployed under interest/Interest context and portal/FwkTab context?

            Why does the client have to find object by "Interest"
            when I am using "interest/Interest" in the jboss.xml which actually translates to java:comp/env/ejb/interest/Interest?


            Thanks.

            • 3. Re: Lookup problem with JNDI
              davidjencks

              You might be able to find out more about what is going on by using the jndiview mbean -- look on port 8082

              • 4. Re: Lookup problem with JNDI
                shailesh_dangi

                Thanks David. In my first posting (see above) I already have the a section of the output. Here it is again

                Section of Output from: http://ny500-03-164a.bloomberg.com:8082

                DefaultDomain
                .
                .
                service=XADataSource,name=DefaultDS
                service=XADataSource,name=jdbc/OracleDBPool
                type=Shutdown
                .
                .

                Management
                jndiName=FwkTab
                jndiName=Interest

                • 5. Re: Lookup problem with JNDI
                  davidjencks

                  You found the jmx management console, now look for the jndiview mbean in it and see what you can learn from the "list" operation.