Purpose: create 20 THread ,each create connection to JMS. Sometimes it's OK but occassionally it will throw ConcurrentModificationException ..... Please help to have a look
| public class JRouterJmsHandler { | private static Logger logger = Logger.getLogger(JRouterJmsHandler.class.getName()); | RouterInitializer ri; | int ThreadPoolSize =20; | | public JRouterJmsHandler(RouterInitializer ri){ | this.ri = ri; | } | | public void handle(){ | ExecutorService exec = Executors.newFixedThreadPool(ThreadPoolSize); | for(int i = 0;i<ThreadPoolSize;i++){ | RouterJmsProcesser processer = new RouterJmsProcesser(ri); | exec.execute(processer); | } | | } | } public class RouterJmsProcesser implements Runnable{ | ..... | .... | | public void run() { | if(setupJMS()){ | logger.info("setup JMS environment sucessfully"); | doJmsRoute(); | }else{ | logger.warn(" setup JMS environment error ......"); | } | | } | | /** | * @return boolean -> if jms object setup ok | * | */ | public synchronized boolean setupJMS() { | try { | this.serviceFactory = new ServiceFactory("/ConnectionFactory",new JrouterExceptionListener()); | String inQueue = ri.getInoutMap().get(Constants.CONF_XMS_FW_QUEUEIN); | this.queue = QueueService.getQueue(inQueue); | this.receiver = serviceFactory.createReceiver(queue); | | String strOutQueue = ri.getInoutMap().get(Constants.CONF_XMS_FW_QUEUEOUT); | this.outputQueueu = QueueService.getQueue(strOutQueue); | this.sender = serviceFactory.createSender(outputQueueu); | // to judge if jboss connection is ok or not | return true; | | } catch (Exception e) { | logger.error("Error setting up JMS", e); | try{ | serviceFactory.destroy(); | }catch (Exception ignored){ | // Pointless | } | return false; | } | } | | } Error information: java.util.ConcurrentModificationException | at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:617) | at java.util.LinkedList$ListItr.next(LinkedList.java:552) | at java.util.AbstractCollection.toString(AbstractCollection.java:453) | at java.lang.String.valueOf(String.java:2615) | at java.lang.StringBuffer.append(StringBuffer.java:220) | at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.initPool(MicroSocketClientInvoker.java:715) | at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.handleConnect(MicroSocketClientInvoker.java:450) | at org.jboss.remoting.transport.bisocket.BisocketClientInvoker.handleConnect(BisocketClientInvoker.java:283) | at org.jboss.remoting.MicroRemoteClientInvoker.connect(MicroRemoteClientInvoker.java:242) | at org.jboss.remoting.ConnectionValidator.start(ConnectionValidator.java:301) | at org.jboss.remoting.ConnectionValidator.addConnectionListener(ConnectionValidator.java:228) | at org.jboss.remoting.Client.addConnectionListener(Client.java:367) | at org.jboss.remoting.Client.addConnectionListener(Client.java:339) | at org.jboss.jms.client.remoting.JMSRemotingConnection.addConnectionListener(JMSRemotingConnection.java:378) | at org.jboss.jms.client.container.StateCreationAspect.handleCreateConnectionDelegate(StateCreationAspect.java:103) | at org.jboss.aop.advice.org.jboss.jms.client.container.StateCreationAspect0.invoke(StateCreationAspect0.java) | at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate$createConnectionDelegate_N3019492359065420858.invokeNext(ClientConnectionFactoryDelegate$createConnectionDelegate_N3019492359065420858.java) | at org.jboss.jms.client.delegate.ClientConnectionFactoryDelegate.createConnectionDelegate(ClientConnectionFactoryDelegate.java) | at org.jboss.jms.client.JBossConnectionFactory.createConnectionInternal(JBossConnectionFactory.java:205) | at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:87) | at org.jboss.jms.client.JBossConnectionFactory.createConnection(JBossConnectionFactory.java:82) | at net.netm.framework.messaging.jms.ServiceFactory.<init>(Unknown Source) | at net.netm.jrouter.RouterJmsProcesser.setupJMS(RouterJmsProcesser.java:136) | at net.netm.jrouter.RouterJmsProcesser.run(RouterJmsProcesser.java:51) | at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) | at java.lang.Thread.run(Thread.java:595) Please help!!! View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4110411#4110411 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4110411 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user