[ 
https://issues.apache.org/jira/browse/TRANSPORTS-53?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13477738#comment-13477738
 ] 

Rene Preissel commented on TRANSPORTS-53:
-----------------------------------------

The solution is an exception listener that cleansup the shared resources.

@@ -42,7 +44,9 @@ import java.util.Hashtable;
  * When used for sending messages out, the JMSConnectionFactory'ies are able 
to cache
  * a Connection, Session or Producer
  */
-public class JMSConnectionFactory {
+public class JMSConnectionFactory implements ExceptionListener {
 
@@ -369,6 +373,12 @@ public class JMSConnectionFactory {
     private Connection getSharedConnection() {
         if  (sharedConnection == null) {
             sharedConnection = createConnection();
+            try {
+                               sharedConnection.setExceptionListener(this);
+                       } catch (JMSException e) {
+                               handleException("Error setting exception 
listener", e);
+                       }
                         
@@ -403,4 +413,28 @@ public class JMSConnectionFactory {
         }
         return sharedProducer;
     }
+
+       public void onException(JMSException j) {
+               sharedConnection=null;
+               sharedSession=null;
+               sharedSession=null;
+               
+               log.warn("JMS Connection failure : " + j.getMessage());         
+       }
+
 }
                
> Shared connection in JMSConnectionFactory doesn't support reconnect
> -------------------------------------------------------------------
>
>                 Key: TRANSPORTS-53
>                 URL: https://issues.apache.org/jira/browse/TRANSPORTS-53
>             Project: Axis2 Transports
>          Issue Type: Bug
>          Components: JMS
>    Affects Versions: 1.0.0
>         Environment: Seen on JBoss 5.1.0_GA and TibcoEMS 5.1.0
>            Reporter: Rene Preissel
>
> JMSSender uses the JMSConnectionFactory to create JMS connections.
> This connection is used to send the results back to the client.
> JMSConnectionFactory uses a shared connection internally. If the JMS Server 
> fails and restarts this shared connection is not cleaned up. Next time a 
> result should be send to the client an IllegalStateException is thrown:
> javax.jms.IllegalStateException: Connection is closed
>       at 
> com.tibco.tibjms.TibjmsConnection._createSession(TibjmsConnection.java:2621)
>       at 
> com.tibco.tibjms.TibjmsConnection._createSession(TibjmsConnection.java:2601)
>       at 
> com.tibco.tibjms.TibjmsTopicConnection.createTopicSession(TibjmsTopicConnection.java:46)
>       at 
> org.apache.axis2.transport.jms.JMSOutTransportInfo.createJMSSender(JMSOutTransportInfo.java:365)
>       at 
> org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:121)
>       at 
> org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119)
>       at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
>       at 
> org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:43)
>       at 
> org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
>       at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
>       at 
> org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328)
>       at 
> org.apache.axis2.transport.jms.JMSMessageReceiver.processThoughEngine(JMSMessageReceiver.java:196)
>       at 
> org.apache.axis2.transport.jms.JMSMessageReceiver.onMessage(JMSMessageReceiver.java:122)
>       at 
> org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.handleMessage(ServiceTaskManager.java:530)
>       at 
> org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:442)
>       at 
> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:58)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:619)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to