Hi, I have a pool of MDBs listening to a queue. I bombard the queue with 1000 messages concurrently (I made an app that creates 1000 threads that each sends a JMS message to the queue all at the same time approximately). The messages in the queue are persisted in a MySQL database.
As the onMessage() method of the MDB is triggered, I log that event to a file. I'm wondering why sometimes, I dont get 1000 logs which I expect and instead get logs less than 1000. There are times when a number of messages stay stuck on the queue even if there are active MDBs listening. I can say the MDBs are listening because when I send a JMS message, it gets processed, yet the previously stuck messages remain stucked. I suspect It has something to do with the memory. I tried to cut down the number of threads into half, so that's 500 concurrent messages sent to the queue and out of the 12 times I tested, only once did I not receive all 500. I lost about 48 messages, which neither was logged (pulled by MDB) nor exists in the queue. Another reason I suspect the memory is because I stripped down my onMessage() method. I simply logged into a file. I haven't lost any message even If there were 1000 threads that sent the jms messages concurrently. Here's my ejb-jar.xml | <?xml version="1.0" encoding="UTF-8"?> | <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> | <ejb-jar> | <description>RequestProcessor</description> | <display-name>RequestProcessor</display-name> | <enterprise-beans> | <message-driven> | <ejb-name>RequestProcessor</ejb-name> | <ejb-class>com.mobilegroupinc.gospel.RequestProcessor</ejb-class> | <transaction-type>Container</transaction-type> | <message-selector></message-selector> | <message-driven-destination> | <destination-type>javax.jms.Queue</destination-type> | </message-driven-destination> | </message-driven> | </enterprise-beans> | <assembly-descriptor> | <container-transaction> | <method> | <ejb-name>RequestProcessor</ejb-name> | <method-name>onMessage</method-name> | <method-params> | <method-param>javax.jms.Message</method-param> | </method-params> | </method> | <trans-attribute>Required</trans-attribute> | </container-transaction> | </assembly-descriptor> | </ejb-jar> | Here's my jboss.xml | <?xml version="1.0"?> | <jboss> | | <invoker-proxy-bindings> | <invoker-proxy-binding> | <name>mgi-message-driven-bean</name> | <invoker-mbean>default</invoker-mbean> | <proxy-factory>org.jboss.ejb.plugins.jms.JMSContainerInvoker</proxy-factory> | <proxy-factory-config> | <JMSProviderAdapterJNDI>DefaultJMSProvider</JMSProviderAdapterJNDI> | <ServerSessionPoolFactoryJNDI>StdJMSPool</ServerSessionPoolFactoryJNDI> | <MinimumSize>1</MinimumSize> | <MaximumSize>20</MaximumSize> | <KeepAliveMillis>30000</KeepAliveMillis> | <MaxMessages>1</MaxMessages> | <MDBConfig> | <ReconnectIntervalSec>10</ReconnectIntervalSec> | <DLQConfig> | <DestinationQueue>queue/DLQ</DestinationQueue> | <MaxTimesRedelivered>10</MaxTimesRedelivered> | <TimeToLive>0</TimeToLive> | </DLQConfig> | </MDBConfig> | </proxy-factory-config> | </invoker-proxy-binding> | </invoker-proxy-bindings> | | <container-configuration> | <container-name>MGI Message Driven Bean</container-name> | <call-logging>false</call-logging> | <container-interceptors> | <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor</interceptor> | <interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor> | <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptor</interceptor> | <!-- CMT --> | <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor> | <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor> | <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor> | <!-- BMT --> | <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor> | <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT</interceptor> | <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptor</interceptor> | <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor> | </container-interceptors> | <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool</instance-pool> | <instance-cache></instance-cache> | <persistence-manager></persistence-manager> | <container-pool-conf> | <MinimumSize>1</MinimumSize> | <MaximumSize>20</MaximumSize> | <MaxMessages>1</MaxMessages> | </container-pool-conf> | </container-configuration> | | <enterprise-beans> | <message-driven> | <ejb-name>RequestProcessor</ejb-name> | <configuration-bean>MGI Message Driven Bean</configuration-bean> | <destination-jndi-name>queue/gospelQueue</destination-jndi-name> | <invoker-bindings> | <invoker> | <invoker-proxy-binding-name>mgi-message-driven-bean</invoker-proxy-binding-name> | </invoker> | </invoker-bindings> | <mdb-user>mdb</mdb-user> | <mdb-passwd>mgimdb</mdb-passwd> | <!--<resource-ref> | <res-ref-name>java:/JVMILXAConnectionFactory</res-ref-name> | <res-type>javax.jms.QueueConnectionFactory</res-type> | <jndi-name>java:/JVMILXAConnectionFactory</jndi-name> | </resource-ref>--> | </message-driven> | </enterprise-beans> | </jboss> | My threads are set to send the message with the following settings: priority=1 timeout=30000ms My queue settings: redelivery=3 redeliverywait=3000ms I'm on a development pc: P4 3.06GHz 512RAM WinXP Home using JBoss 4.0.2, MySQL 4.1 Is this a tweaking issue or a programming issue? How do I tweak JBoss so JMS will behave as expected? Any help is appreciated. Thank you very much. View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3900552#3900552 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3900552 ------------------------------------------------------- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl _______________________________________________ JBoss-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jboss-user
