0
votes

I change my Spring-JMS DefaultMessageListenerContainer implementations to use a cacheLevelName of CACHE_NONE and ran into the below exception. The changes were outlined here. I'm using glassfish v 2.1, Open MQ 4.4 and Spring 3.*. Any ideas on where I could have gone wrong?

Web App Log:

[#|2012-05-16T21:18:12.620+0000|SEVERE|sun-appserver9.1|javax.resourceadapter.mqjmsra.outbound.connection|_ThreadID=284;_ThreadName=updateJmsContainer-90;_RequestID=3aa71c9e-3ac0-4142-b914-ffbdc6e6bb37;|MQJMSRA_MC4001: constructor:Aborting:JMSException on createConnection=[C4000]: Packet acknowledge failed. user=admin, broker=localhost:45088(55601)|#]

2012-05-16 21:18:17,636 [updateJmsContainer-90] WARN org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'TestQ' - trying to recover. Cause: MQRA:CFA:allocation failure:createConnection:Error in allocating a connection. Cause: MQJMSRA_MC4001: constructor:Aborting:JMSException on createConnection=[C4000]: Packet acknowledge failed. user=admin, broker=localhost:45088(55601)

Broker Log File:

[16/May/2012:21:10:14 UTC] [B1039]: Broker "appbroker@host:45028" ready.
[16/May/2012:21:10:41 UTC] [B1065]: Accepting: [email protected]:56811->jms:55601. Count: service=1 broker=1
[16/May/2012:21:10:48 UTC] [B1065]: Accepting: [email protected]:25432->jms:55601. Count: service=2 broker=2
[16/May/2012:21:10:55 UTC] [B1065]: Accepting: [email protected]:25478->jms:55601. Count: service=3 broker=3
[16/May/2012:21:11:56 UTC] [B1065]: Accepting: [email protected]:44040->jms:55601. Count: service=4 broker=4
[16/May/2012:21:11:56 UTC] [B1065]: Accepting: [email protected]:33237->jms:55601. Count: service=5 broker=5
...
...
[16/May/2012:21:17:50 UTC] [B1065]: Accepting: [email protected]:46564->jms:55601. Count: service=500 broker=500

[16/May/2012:21:17:50 UTC] WARNING [B3004]: **No threads are available to process a new connection on service jms. 1000 threads out of a maximum of 1000 threads are already in use by other connections.** A minimum of 2 threads must be available to process the connection. Please either limit the # of connections or increase the imq.<service>.max_threads property. Closing the new connection.
[16/May/2012:21:18:01 UTC] [B1066]:   Closing: [email protected]:0->jms:0 because "[B3004]: No threads are available to process a new connection on service jms. 1000 threads out of a maximum of 1000 threads are already in use by other connections. A minimum of 2 threads must be available to process the connection. Please either limit the # of connections or increase the imq.<service>.max_threads property. Closing the new connection. ". Count: service=0 broker=500
[16/May/2012:21:18:01 UTC] WARNING Problem detected while attempting to send notification mq.connection.close from MBean Service Monitor
[16/May/2012:21:18:01 UTC] WARNING Cannot determine service name from connection ID: 7881641671884329217
1

1 Answers

1
votes

This C4000 error is a network generic exception handler. It may be a consequence of the cache level change. The application may open too many connections to the server, depending on your pool setup, and the server may lack resources to manage them - the best guess is probably memory.

Please check your OpenMQ server log files and memory usage.

Is there any network configuration (firewall, QoS router...) between consumer and MQ server that may control connection establishment ? Opening many connections very quickly may be considered as a SYN flood which is a common DoS attack.