Accessing JMS from stand-alone client
I'm currently attempting to access EJBs, JMS topics and JMS queues from a swing client running on a different machine to the application server (in this case, Sun App Server 9).
I have added the following jars to the classpath: appserv-rt.jar, javaee.jar and imqjmsra.jar, as well as generated EJB stubs. I have specified the two -D options on the command line:
-Dorg.omg.CORBA.ORBInitialHost=<server>
-Dorg.omg.CORBA.ORBInitialPort=3700
I have tried adding my own jndi.properties with:
java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
java.naming.provider.url=iiop://<server>:3700
I have also tried without including a jndi.properties file and using the one supplied by the appserv-rt.jar (this causes more errors than adding my own).
I am able to lookup an EJB using the global JNDI name and successfully invoke methods on the EJB. If I use the java:comp/env context then I receive the same error as I do with the JMS issues which I'm about to describe.
When I attempt to access the JMS factories, topics and queues using both the java:comp/env and the global JNDI name I receive the following error:
javax.naming.NameNotFoundException [Root exception is org.omg.CosNaming.NamingCo
ntextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
at com.sun.jndi.cosnaming.ExceptionMapper.mapException(ExceptionMapper.j
ava:44)
at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:453)
at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:492)
at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:470)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
The global JNDI name for the topic factory (for example) is jms/TopicConnectionFactory - I have tried both lookups:
InitialContext context =new InitialContext();
context.lookup("jms/TopicConnectionFactory")//lookup 1
context.lookup("java:comp/env/jms/TopicConnectionFactory")//lookup 2
The factory is clearly visible in JNDI under the jms/TopicConnectionFactory when I browse the JNDI from the Sun Admin Console.
I run the application on a separate machine via the standard java.exe -jar myclient.jar (the jar's manifest has the main class and the classpath described above set)
Does anybody see anything that I could be missing to get JMS lookups to work from a thick client. As mentioned I can lookup EJBs with no problems so I am definitely connecting to the app server correctly - I figure I'm missing another jar or something like that.
I have also tried adding application-client.xml and sun-application-client.xml descriptors to myclient.jar/META-INF but that doesn't seem to work either, and when I do I don't think the descriptors are being read because I am unable to lookup the EJB with the java:comp/env JNDI reference - I still need to use the global JNDI name. I would like to use the java:comp/env but I'm not certain how I get the application client jar to load these descriptors, or does something in the appserv-rt.jar do that when it is first accessed (a little unsure of this bit).
My main concern though, even with global JNDI lookups is that the JMS lookups fail and the EJB lookups succeed.
Any help would be greatly appreciated.
******************************************************
I tried again with using the jndi.properties file in the appserv-rt.jar rather than setting anything on the InitialContext. After getting past all of the NoClassDefFound errors by adding more of the app server jars onto the client classpath I managed to get something working, however with the information that was spat out on the client console while performing the lookup I'm pretty certain this isn't exactly what I want - it does work however. My concern is that the messages that are being displayed makes me think I have created my own factory locally (or something weird like that). The messages I received were:
Looking up: jms/TopicConnectionFactory
23/06/2006 16:40:45 com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: SJSMQ JMS Resource Adapter starting...
=============================================================================== =
Sun Java(tm) System Message Queue 4.0
Sun Microsystems, Inc.
Version: 4.0 (Build 27-a)
Compile: Thu Mar 2 22:14:05 PST 2006
Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
This product includes code licensed from RSA Data Security.
=============================================================================== =
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: SJSMQ JMS ResourceAdaapter configuration=
raUID=null
brokerType =REMOTE
brokerInstanceName=imqbroker
brokerBindAddress=null
brokerPort =7676
brokerHomeDir=/u2/sas9/imq/bin/..
brokerVarDir=/u2/sas9/domains/domain1/imq
brokerJavaDir=/usr/java
brokerArgs =null
brokerStartTimeout=60000
adminUsername=admin
adminPassFile=/var/tmp/asmq40969.tmp
useJNDIRmiServiceURL=true
rmiRegistryPort =8686
startRmiRegistry=false
useSSLJMXConnector=true
brokerEnableHA =false
clusterId=null
brokerId=null
jmxServiceURL=null
dbType=null
dbProps={}
dsProps={}
ConnectionURL=mq://<server>:7676/
UserName=guest
ReconnectEnabled=true
ReconnectInterval=5000
ReconnectAttempts=3
AddressListBehavior=RANDOM
AddressListIterations=3
InAppClientContainer=true
InClusteredContainer=false
GroupName=null
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: start:SJSMQ JMSRA Connection Factory Config={imqOverrideJM
SPriority=false, imqConsumerFlowLimit=1000, imqOverrideJMSExpiration=false, imqA
ddressListIterations=3, imqLoadMaxToServerSession=true, imqConnectionType=TCP, i
mqPingInterval=30, imqSetJMSXUserID=false, imqConfiguredClientID=, imqSSLProvide
rClassname=com.sun.net.ssl.internal.ssl.Provider, imqJMSDeliveryMode=PERSISTENT,
imqConnectionFlowLimit=1000, imqConnectionURL=http://localhost/imq/tunnel, imqB
rokerServiceName=, imqJMSPriority=4, imqBrokerHostName=localhost, imqJMSExpirati
on=0, imqAckOnProduce=, imqEnableSharedClientID=false, imqAckTimeout=0, imqAckOn
Acknowledge=, imqConsumerFlowThreshold=50, imqDefaultPassword=guest, imqQueueBro
wserMaxMessagesPerRetrieve=1000, imqDefaultUsername=guest, imqReconnectEnabled=f
alse, imqConnectionFlowCount=100, imqAddressListBehavior=RANDOM, imqReconnectAtt
empts=3, imqSetJMSXAppID=false, imqConnectionHandler=com.sun.messaging.jmq.jmscl
ient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimestamp=false, imqBrokerServi
cePort=0, imqDisableSetClientID=false, imqSetJMSXConsumerTXID=false, imqOverride
JMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueueBrowserRetrieveTimeout=60
000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted=false, imqConnectionFlowL
imitEnabled=false, imqReconnectInterval=5000, imqAddressList=mq://<server>:7676/, i
mqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ResourceAdapter start
INFO: MQJMSRA_RA1101: SJSMQ JMSRA Started
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnectionFactory setPasswor
d
INFO: MQJMSRA_MF1101: setPassword:NOT setting default value
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnectionFactory setAddress
List
INFO: MQJMSRA_MF1101: setAddressList:NOT setting default value=localhost
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnectionFactory setUserNam
e
INFO: MQJMSRA_MF1101: setUserName:NOT setting default value=guest
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=1:xacId=4902744336909087232:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=2:xacId=4902744336909100288:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=3:xacId=4902744336909108480:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=4:xacId=4902744336909117696:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=5:xacId=4902744336909126400:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:46 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=6:xacId=4902744336909134336:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:47 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=7:xacId=4902744336909143040:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
23/06/2006 16:40:47 com.sun.messaging.jms.ra.ManagedConnection <init>
INFO: MQJMSRA_MC1101: constructor:Created mcId=8:xacId=4902744336909151488:Using
xacf config={imqOverrideJMSPriority=false, imqConsumerFlowLimit=1000, imqOverri
deJMSExpiration=false, imqAddressListIterations=3, imqLoadMaxToServerSession=tru
e, imqConnectionType=TCP, imqPingInterval=30, imqSetJMSXUserID=false, imqConfigu
redClientID=, imqSSLProviderClassname=com.sun.net.ssl.internal.ssl.Provider, imq
JMSDeliveryMode=PERSISTENT, imqConnectionFlowLimit=1000, imqConnectionURL=http:/
/localhost/imq/tunnel, imqBrokerServiceName=, imqJMSPriority=4, imqBrokerHostNam
e=localhost, imqJMSExpiration=0, imqAckOnProduce=, imqEnableSharedClientID=false
, imqAckTimeout=0, imqAckOnAcknowledge=, imqConsumerFlowThreshold=50, imqDefault
Password=guest, imqQueueBrowserMaxMessagesPerRetrieve=1000, imqDefaultUsername=g
uest, imqReconnectEnabled=true, imqConnectionFlowCount=100, imqAddressListBehavi
or=RANDOM, imqReconnectAttempts=3, imqSetJMSXAppID=false, imqConnectionHandler=c
om.sun.messaging.jmq.jmsclient.protocol.tcp.TCPStreamHandler, imqSetJMSXRcvTimes
tamp=false, imqBrokerServicePort=0, imqDisableSetClientID=false, imqSetJMSXConsu
merTXID=false, imqOverrideJMSDeliveryMode=false, imqBrokerHostPort=7676, imqQueu
eBrowserRetrieveTimeout=60000, imqSetJMSXProducerTXID=false, imqSSLIsHostTrusted
=false, imqConnectionFlowLimitEnabled=false, imqReconnectInterval=5000, imqAddre
ssList=mq://<server>:7676/, imqOverrideJMSHeadersToTemporaryDestinations=false}
Looking up: jms/topic/MyTopic
Does anybody know what these messages mean and also whether or not this is what I should be seeing on the client side?

