i have a stateless ejb, and in that i make a connection with a jms queue and send message to it.
Part of the code where i do this:
@Resource(mappedName = "jms/abcd")
private ConnectionFactory abcd;
@Resource(mappedName = "jms/xyz")
private Queue xyz;
@Override
public void saveCounter(String protocolName, String serialNumber, String counterName,CounterAction action)
{
Connection connection = null;
Session session=null;
try
{
connection = abcd.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(xyz);
Message message = session.createMessage();
message.setStringProperty("serialNumber", serialNumber);
producer.send(message);
}
catch (Exception e)
{
logger.error("Sending message to queue", e);
}
finally
{
try
{
if(session!=null){
session.close();
}
if (connection != null)
{
connection.close();
}
}
catch (JMSException e)
{
logger.warn(e);
}
}
}
I am using MDB. The consumer code is as shown:
@MessageDriven(name = "XXMessageDrivenBean", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue") }, mappedName = "jms/xyz")
public class CounterMessageDrivenBean {
...
@Override
public void onMessage(Message message){
System.out.println("got message: " + message);
log.debug("got message: " + message);
}
.....
}
I use the functionality of this ejb from other ejbs, by doing dependency injection of this ejb and calling its method. It works fine for some requests
But when i try to do load test of my code, after some number of requests like thousand, the crateConnection part of the code starts to fail with exception:
Thread 64518 "httpWorkerThread-38080-1": (state = BLOCKED)
at com.sun.enterprise.resource.AbstractResourcePool.getResourceFromPool(AbstractResourcePool.java:788)
at com.sun.enterprise.resource.AbstractResourcePool.getUnenlistedResource(AbstractResourcePool.java:682)
at com.sun.enterprise.resource.AbstractResourcePool.internalGetResource(AbstractResourcePool.java:624)
at com.sun.enterprise.resource.AbstractResourcePool.getResource(AbstractResourcePool.java:470)
at com.sun.enterprise.resource.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:248)
at com.sun.enterprise.resource.PoolManagerImpl.getResource(PoolManagerImpl.java:176)
at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:323)
at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:245)
at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:175)
at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:168)
at com.sun.messaging.jms.ra.ConnectionFactoryAdapter._allocateConnection(ConnectionFactoryAdapter.java:179)
at com.sun.messaging.jms.ra.ConnectionFactoryAdapter.createConnection(ConnectionFactoryAdapter.java:166)
at com.sun.messaging.jms.ra.ConnectionFactoryAdapter.createConnection(ConnectionFactoryAdapter.java:148)
at above code shown : saveCounter : createConnection
Please help me to understand why my code starts to fail.
I am glassfish application server.
Thanks in advance