3 Replies Latest reply on Jul 26, 2006 11:24 AM by jaikiran

    Lookup of ConnectionFactory from standalone client returns N

    jaikiran

      I have created a -ds.xml file and placed it in %JBOSS_HOME%/server/default/deploy directory. This ds file contains the configuration of a connection factory and i have pointed it to jms-ra.rar by setting the rar-name as follows:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <connection-factories>
      
       <tx-connection-factory>
       <jndi-name>TestRA</jndi-name>
       <xa-transaction/>
       <rar-name>jms-ra.rar</rar-name>
       <use-java-context>false</use-java-context>
       <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
       <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Topic</config-property>
       <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider2</config-property>
       <max-pool-size>20</max-pool-size>
       <security-domain-and-application>JmsXARealm</security-domain-and-application>
       </tx-connection-factory>
      
      </connection-factories>


      This is just a sample connection factory which i have created as a test.

      Note that i have set "use-java-context" attribute to false, so that this can be looked up from outside the appserver JVM.

      The ds file deploys fine and the jndi name gets bound to the global namespace as expected. Here's the output from the jmx-console:

      Global JNDI Namespace
      +- TopicConnectionFactory (class: org.jboss.naming.LinkRefPair)
      +- jmx (class: org.jnp.interfaces.NamingContext)
      | +- invoker (class: org.jnp.interfaces.NamingContext)
      | | +- RMIAdaptor (proxy: $Proxy47 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt)
      | +- rmi (class: org.jnp.interfaces.NamingContext)
      | | +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef)
      +- HTTPXAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory)
      +- TestRA (class: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl)


      However, when i do a lookup of the jndi name "TestRA" from a standalone java client, the object returned is NULL. Note that there are no NameNotFound or any other such exceptions. Just to make sure that my jndi lookup code was not wrong, i did a lookup of another object which was present in the Global namespace(i.e. UserTransaction) and i got the correct reference of the object. The code, hence, does not look to be wrong. Here's the standalone client code:

      package org.myapp;
      
      import javax.naming.Context;
      import javax.naming.InitialContext;
      
      public class TestLookup {
      
       /**
       * @param args
       */
       public static void main(String[] args) {
       try {
      
       Context ctx = new InitialContext();
       Object ref = ctx.lookup("TestRA");
       if (ref==null) {
       System.out.println("My connection factory is null");
       /*
       * Try looking up some other object in global JNDI namespace
       *
       */
       Object anotherObj = ctx.lookup("UserTransaction");
       if (anotherObj == null) {
       System.out.println("Could *not* lookup even this object. Something wrong with setup or code");
       } else {
       System.out.println("Successfull lookup of the other object from the jndi: " + anotherObj);
       System.out.println("Why is lookup of my connection factory failing");
       }
       } else {
       System.out.println("My connection factory is *not* null: " + ref);
       }
      
      
      
       } catch(Exception e) {
       e.printStackTrace();
       }
       }
      
      }


      Why is it that i am getting a NULL when i lookup the connection factory?