Title: [855] trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jms: ensure don't create consumers multiple times
Revision
855
Author
rajdavies
Date
2005-11-16 13:02:03 -0500 (Wed, 16 Nov 2005)

Log Message

ensure don't create consumers multiple times

Modified Paths


Diff

Modified: trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jca/JCAFlow.java (854 => 855)

--- trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jca/JCAFlow.java	2005-11-16 16:14:15 UTC (rev 854)
+++ trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jca/JCAFlow.java	2005-11-16 18:02:03 UTC (rev 855)
@@ -343,37 +343,38 @@
      * 
      * @param event
      */
-    public void onEvent(final ComponentPacketEvent event) {
-        try {
-            String componentName = event.getPacket().getComponentNameSpace().getName();
-            if (event.getStatus() == ComponentPacketEvent.ACTIVATED){          
-            	ActiveMQActivationSpec ac = new ActiveMQActivationSpec();
-            	ac.setDestinationType("javax.jms.Queue");
-            	ac.setDestination(INBOUND_PREFIX + componentName);
-            	JCAConnector connector = new JCAConnector();
-            	connector.setBootstrapContext(getBootstrapContext());
-            	connector.setActivationSpec(ac);
-            	connector.setResourceAdapter(resourceAdapter);
-            	connector.setEndpointFactory(new SingletonEndpointFactory(this, getTransactionManager()));
-            	connector.afterPropertiesSet();
-                connectorMap.put(componentName, connector);
-            } else if (event.getStatus() == ComponentPacketEvent.DEACTIVATED){
-            	JCAConnector connector = (JCAConnector) connectorMap.remove(componentName);
-                if (connector != null){
-                	connector.destroy();
+    public void onEvent(final ComponentPacketEvent event){
+        try{
+            String componentName=event.getPacket().getComponentNameSpace().getName();
+            if(event.getStatus()==ComponentPacketEvent.ACTIVATED){
+                if(!connectorMap.containsKey(componentName)){
+                    ActiveMQActivationSpec ac=new ActiveMQActivationSpec();
+                    ac.setDestinationType("javax.jms.Queue");
+                    ac.setDestination(INBOUND_PREFIX+componentName);
+                    JCAConnector connector=new JCAConnector();
+                    connector.setBootstrapContext(getBootstrapContext());
+                    connector.setActivationSpec(ac);
+                    connector.setResourceAdapter(resourceAdapter);
+                    connector.setEndpointFactory(new SingletonEndpointFactory(this,getTransactionManager()));
+                    connector.afterPropertiesSet();
+                    connectorMap.put(componentName,connector);
                 }
+            }else if(event.getStatus()==ComponentPacketEvent.DEACTIVATED){
+                JCAConnector connector=(JCAConnector) connectorMap.remove(componentName);
+                if(connector!=null){
+                    connector.destroy();
+                }
             }
             // broadcast change to the network
-            log.info("broadcast to internal JMS network: " + event);
-            jmsTemplate.send(broadcastTopic, new MessageCreator() {
-				public Message createMessage(Session session) throws JMSException {
-					return session.createObjectMessage(event);
-				}
+            log.info("broadcast to internal JMS network: "+event);
+            jmsTemplate.send(broadcastTopic,new MessageCreator(){
+                public Message createMessage(Session session) throws JMSException{
+                    return session.createObjectMessage(event);
+                }
             });
+        }catch(Exception e){
+            log.error("failed to broadcast to the internal JMS network: "+event,e);
         }
-        catch (Exception e) {
-            log.error("failed to broadcast to the internal JMS network: " + event, e);
-        }
     }
 
     /**

Modified: trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jms/JMSFlow.java (854 => 855)

--- trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jms/JMSFlow.java	2005-11-16 16:14:15 UTC (rev 854)
+++ trunk/core/src/main/java/org/servicemix/jbi/nmr/flow/jms/JMSFlow.java	2005-11-16 18:02:03 UTC (rev 855)
@@ -275,14 +275,16 @@
     public void onEvent(ComponentPacketEvent event) {
         try {
             String componentName = event.getPacket().getComponentNameSpace().getName();
-            if (event.getStatus() == ComponentPacketEvent.ACTIVATED){
-                Queue queue = inboundSession.createQueue(INBOUND_PREFIX +componentName);
-                MessageConsumer consumer = inboundSession.createConsumer(queue);
-                consumer.setMessageListener(this);
-                consumerMap.put(componentName,consumer);
-            } else if (event.getStatus() == ComponentPacketEvent.DEACTIVATED){
-                MessageConsumer consumer = (MessageConsumer) consumerMap.remove(componentName);
-                if (consumer != null){
+            if(event.getStatus()==ComponentPacketEvent.ACTIVATED){
+                if(!consumerMap.containsKey(componentName)){
+                    Queue queue=inboundSession.createQueue(INBOUND_PREFIX+componentName);
+                    MessageConsumer consumer=inboundSession.createConsumer(queue);
+                    consumer.setMessageListener(this);
+                    consumerMap.put(componentName,consumer);
+                }
+            }else if(event.getStatus()==ComponentPacketEvent.DEACTIVATED){
+                MessageConsumer consumer=(MessageConsumer) consumerMap.remove(componentName);
+                if(consumer!=null){
                     consumer.close();
                 }
             }

Reply via email to