users@genericjmsra.java.net

Problems with SJAS 8.1 and WebSphere MQ 5.3

From: <conny.gyllendahl_at_crosskey.fi>
Date: Mon, 12 Jun 2006 14:09:16 +0300

First of all, my apologies if this has already been posten to the list by
someone else.

Sun application server 8.1 enterprise edition
IBM Websphere MQ 5.3
Solaris 10 / sparc

We are trying to get an MDB to talk to a Websphere MQ qmgr using the
genericra.

I have done the following:

JMSAdmin:
def qcf(QCF) hostname(localhost) port(1414) channel(SYSTEM.DEF.SVRCONN)
transport(CLIENT) qmanager(QM1)
def q(TQueue) queue(QM1.QUEUE) qmanager(QM1)

InitCtx> dis ctx

  Contents of InitCtx

      .bindings java.io.File
   a QCF com.ibm.mq.jms.MQQueueConnectionFactory
   a TQueue com.ibm.mq.jms.MQQueue

  3 Object(s)
    0 Context(s)
    3 Binding(s), 2 Administered

asadmin:
asadmin create-resource-adapter-config
--property=SupportsXA=false:ProviderIntegrationMode=jndi:UserName=###:Password=###:RMPolicy=OnePerPhysicalConnection:JndiProperties=java.naming.factory.url.pkgs\\=com.ibm.mq.jms.naming,java.naming.factory.initial\\=com.sun.jndi.fscontext.RefFSContextFactory,java.naming.provider.url\\=file\\:\\/\\/\\/var\\/mqm\\/jndi:LogLevel=finest
 genericra
asadmin create-connector-connection-pool --raname genericra
--connectiondefinition javax.jms.QueueConnectionFactory
--transactionsupport NoTransaction --property ConnectionFactoryJndiName=QCF
mypool
asadmin create-connector-resource --poolname mypool jms/MyQCF
asadmin create-admin-object --raname genericra --restype javax.jms.Queue
--property DestinationJndiName=TQueue jms/RequestQ

JVM-settings/Classpath suffix:
/opt/mqm/java/lib/com.ibm.mq.jar
/opt/mqm/java/lib/com.ibm.mqbind.jar
/opt/mqm/java/lib/com.ibm.mqjms.jar
/opt/mqm/java/lib/providerutil.jar
/opt/mqm/java/lib/jndi.jar
/opt/mqm/java/lib/fscontext.jar

JVM-settings/Native library suffix:
/opt/mqm/java/lib
/opt/mqm/lib

Now, if I'm not completely mistaken this should give the JMS queue
jms/RequestQ which would map to the MQ queue QM1.QUEUE

Upon starting the application server I get the following errors:

[#|2006-06-12T13:36:11.126
+0300|FINEST|sun-appserver-ee8.1_02|com.sun.genericjmsra|_ThreadID=10;|Properties
 passed to InitialContext ::
{java.naming.provider.url=file:///var/mqm/jndi,
java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory,
java.naming.security.authentication=none,
java.naming.factory.url.pkgs=com.ibm.mq.jms.naming}|#]

[#|2006-06-12T13:36:11.168
+0300|FINEST|sun-appserver-ee8.1_02|com.sun.genericjmsra|_ThreadID=10;|Looking
 the JNDI name :jms/MyQCF|#]

[#|2006-06-12T13:36:11.182
+0300|WARNING|sun-appserver-ee8.1_02|javax.enterprise.system.stream.err|_ThreadID=10;|javax.resource.spi.InvalidPropertyException:
 MyQCF
        at
com.sun.genericra.util.ExceptionUtils.newInvalidPropertyException(ExceptionUtils.java:40)
        at
com.sun.genericra.util.ObjectBuilderFactory$JndiObjectBuilder.createObject(ObjectBuilderFactory.java:89)
        at
com.sun.genericra.util.ObjectBuilder.build(ObjectBuilder.java:90)
        at
com.sun.genericra.inbound.EndpointConsumer.initializeAdministeredObjects(EndpointConsumer.java:282)
        at
com.sun.genericra.inbound.EndpointConsumer.<init>(EndpointConsumer.java:69)
        at
com.sun.genericra.GenericJMSRA.endpointActivation(GenericJMSRA.java:96)
        at
com.sun.enterprise.connectors.inflow.ConnectorMessageBeanClient.setup(ConnectorMessageBeanClient.java:221)
        at
com.sun.ejb.containers.MessageBeanContainer.<init>(MessageBeanContainer.java:187)
        at
com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:221)
        at
com.sun.enterprise.server.AbstractLoader.loadEjbs(AbstractLoader.java:477)
        at
com.sun.enterprise.server.ApplicationLoader.load(ApplicationLoader.java:125)
        at
com.sun.enterprise.server.HttpServiceApplicationLoader.load(HttpServiceApplicationLoader.java:97)
        at
com.sun.enterprise.server.AbstractManager.load(AbstractManager.java:185)
        at
com.sun.enterprise.server.ApplicationLifecycle.onStartup(ApplicationLifecycle.java:200)
        at
com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:300)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:294)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:220)
Caused by: javax.naming.NameNotFoundException: MyQCF
        at
com.sun.jndi.fscontext.RefFSContext.getObjectFromBindings(RefFSContext.java:400)
        at
com.sun.jndi.fscontext.RefFSContext.lookupObject(RefFSContext.java:327)
        at
com.sun.jndi.fscontext.RefFSContext.lookup(RefFSContext.java:146)
        at com.sun.jndi.fscontext.FSContext.lookup(FSContext.java:127)
        at javax.naming.InitialContext.lookup(InitialContext.java:351)
        at
com.sun.genericra.util.ObjectBuilderFactory$JndiObjectBuilder.createObject(ObjectBuilderFactory.java:87)
        ... 15 more
|#]

Is it using the JNDI-settings for the resource adapter to try and look up
jms/MyQCF, which should only be available
in the appserver JNDI namespace?

I have tried to follow the integration guide but it feels as if I have made
some silly mistake.

Here's the sun-ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application
Server 8.1 EJB 2.1//EN"
"http://www.sun.com/software/appserver/dtds/sun-ejb-jar_2_1-1.dtd">

<sun-ejb-jar>
  <enterprise-beans>
    <unique-id>1</unique-id>
    <ejb>
      <ejb-name>RequestListener</ejb-name>
      <jndi-name>jms/RequestQ</jndi-name>
      <ejb-ref>
        <ejb-ref-name>ejb/WebServiceEJBLocal</ejb-ref-name>
        <jndi-name>ejb/WebServiceEJBLocal</jndi-name>
      </ejb-ref>
      <resource-ref>
        <res-ref-name>jms/MyQCF</res-ref-name>
        <jndi-name>jms/MyQCF</jndi-name>
      </resource-ref>
      <mdb-connection-factory>
        <jndi-name>jms/MyQCF</jndi-name>
      </mdb-connection-factory>
      <!-- Activation related RA specific configuration for this MDB -->
      <mdb-resource-adapter>
        <resource-adapter-mid>genericra</resource-adapter-mid>
        <activation-config>
                    <activation-config-property>

<activation-config-property-name>DestinationType</activation-config-property-name>

<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>ConnectionFactoryJndiName</activation-config-property-name>

<activation-config-property-value>jms/MyQCF</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>DestinationJndiName</activation-config-property-name>

<activation-config-property-value>jms/RequestQ</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>MaxPoolSize</activation-config-property-name>

<activation-config-property-value>32</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>RedeliveryAttempts</activation-config-property-name>

<activation-config-property-value>0</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>ReconnectAttempts</activation-config-property-name>

<activation-config-property-value>4</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>ReconnectInterval</activation-config-property-name>

<activation-config-property-value>10</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>RedeliveryInterval</activation-config-property-name>

<activation-config-property-value>1</activation-config-property-value>
                    </activation-config-property>
                    <activation-config-property>

<activation-config-property-name>SendBadMessagesToDMD</activation-config-property-name>

<activation-config-property-value>false</activation-config-property-value>
                    </activation-config-property>
            </activation-config>
      </mdb-resource-adapter>
    </ejb>
    <ejb>
      <ejb-name>WebServiceEJB</ejb-name>
    </ejb>
  </enterprise-beans>
</sun-ejb-jar>

regards,
Conny