Skip to main content

Glassfish 3.0.1 and ActiveMQ 5.4.2 JNDI names cannot be found

Please note these java.net forums are being decommissioned and use the new and improved forums at https://community.oracle.com/community/java.
2 replies [Last post]
v2cg4ss
Offline
Joined: 2004-02-12

I am using ActiveMQ as an embedded broker, I have everything setup and I'm able to receive messages from an external client to my message driven bean. The problem I am having is injecting resources from a session bean for the connection factory and messge queue. Glassfish is not able to resolve the JNDI names for those definitions in an application client. Here is my setup:

Resource Adapter Config:

ServerURL = vm://localhost
BrokerXmlConfig = broker:(tcp://localhost:61616)
Password = defaultPassword
UseInboundSession = false
UserName = defaultUser

Connector Connection Pool:

PoolName = ActiveMQMsgPool
Resource Adapter = activemq-rar-5.4.2
Connection Definition = javax.jms.ConnectionFactory
Transaction Support = XATransaction

Connector Resource:

JNDI Name = ActiveMQConnResource
Pool Name = ActiveMQMsgPool
Status = Enabled

Admin Object Resource:

JNDI Name = ActiveMQ_MsgQueue
Resource Adapter = activemq-rar-5.4.2
Resource Type = javax.jms.Queue
Class Name = org.apache.activemq.command.ActiveMQQueue
Status = Enabled
PhysicalName = ActiveMQ_MsgQueue

JMS Resources -> Connection Factories shows my connection pool definition in the navigation tree but not in the details list to the right of the tree. When I click on the ActiveMQMsgPool tree item I get the following error in the right pane of the web page. "REST Request 'http://localhost:4848/management/domain/resources/connector-resource/ActiveMQMsgPool' failed with response code '404'" When I click on the JMS Resources -> Destination Resources I don't see the "ActiveMQ_MsgQueue" definition of the Admin Object Resources in the right side details list of destinations. However I can click on the ActiveMQ_MsgQueue destination which displays with no error however the Physical Destination Name is blank.

My Message Driven Bean uses this sun-resources.xml file:

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

My Message Driven Bean uses this sun-ejb-jar.xml file:

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

NewMessageBean
NewMessageBean

activemq-rar-5.4.2

And inside my MDB I have the following annotation:

@MessageDriven(mappedName = "ActiveMQ_MsgQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "ActiveMQ_MsgQueue")
})

The message driven bean works correctly and receives messages from an external ActiveMQ client sending a message on the queue. Also from a Glassfish EE application client I can send a message to the queue and it is recieved by the MDB using the following code:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( "tcp://localhost:61616" ); // I cannot use - vm://localhost

Connection connection = connectionFactory.createConnection();
connection.start();

Session session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE );

Destination destination = session.createQueue( "ActiveMQ_MsgQueue" );

MessageProducer producer = session.createProducer( destination );
producer.setDeliveryMode( DeliveryMode.PERSISTENT );

String text = "Hello from App Client";

MapMessage message = session.createMapMessage();
message.setString( "name", text );

producer.send( message );

But what I cannot do and what I thought I should be able to do is inject the connection factory and queue like I can with a non-activemq (jmsra) Connection Factory and Destination Resource. So the following code fails because Glassfish cannot resolve the JNDI names of the connection factory and queue:

@Resource(mappedName = "ActiveMQMsgPool")
private static ConnectionFactory connectionFactory = null;

@Resource(mappedName = "ActiveMQ_MsgQueue")
private static Queue queue = null;

I have the following sun-resources.xml file embedded in my App Client NetBeans project:

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

I have tried to use a sun-ejb-jar.xml with settings for "Resource References" and "Resource Environment References" with no success. So the question is why does are JNDI names for the ActiveMQ resources not visible within the Glassfish container? Are there other settings within the Admin Console that need to be setup? or are there other defintions I need to set in the App Client NetBeans project?

Thanks in advance for the help...

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
reza_rahman
Offline
Joined: 2007-10-15

I have this exact issue in GlassFish 3.1 and ActiveMQ 5.6. Anyone know what this is about? It seems clumsy to have to use ActiveMQ APIs to send messages...

reza_rahman
Offline
Joined: 2007-10-15

Interestingly, using asadmin to mimic the actions in the UI results in the JNDI references working correctly. I think this indicates a bug in the admin UI?