3 Replies Latest reply on Dec 10, 2007 9:55 PM by Tony Lu

    ConcurrentModificationException when setup connection with s

    Tony Lu Newbie

      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!!!