[ 
https://issues.apache.org/jira/browse/QPID-4088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Keith Wall resolved QPID-4088.
------------------------------

    Resolution: Won't Fix

Agreed in a product backlog review - won’t fix.

> Java JMS client does not fully conform JMS spec requirements 4.3.5 about 
> closing a connection
> ---------------------------------------------------------------------------------------------
>
>                 Key: QPID-4088
>                 URL: https://issues.apache.org/jira/browse/QPID-4088
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.6, 0.8, 0.10, 0.12, 0.14, 0.16, 0.17
>            Reporter: Alex Rudyy
>
> Java JMS client does not fully conform JMS spec requirements 4.3.5 about 
> closing a connection:
> {quote}
> 4.3.5 Closing a Connection
> If one or more of the connection’s session’s message listeners is processing 
> a message at the point when connection close is invoked, all the facilities 
> of the connection and its sessions must remain available to those listeners 
> until they return control to the JMS provider.
> {quote}
> I assume that the above means that all JMS operations in 
> MessageListener#onMessage(Message) should succeed including 
> rollback/commit/acknowledge/recover.
> With current implementation such operations throws 
> javax.jms.IllegalStateException: Object 
> org.apache.qpid.client.AMQSession_0_10@54c01e99 has been closed
> {noformat}
> javax.jms.IllegalStateException: Object 
> org.apache.qpid.client.AMQSession_0_10@54c01e99 has been closed
>       at org.apache.qpid.client.Closeable.checkNotClosed(Closeable.java:69)
>       at org.apache.qpid.client.AMQSession.checkNotClosed(AMQSession.java:578)
>       at org.apache.qpid.client.AMQSession.getTransacted(AMQSession.java:1629)
>       at 
> org.apache.qpid.client.AMQSession.checkTransacted(AMQSession.java:2432)
>       at org.apache.qpid.client.AMQSession.commit(AMQSession.java:850)
>       at TestClient3$2.onMessage(TestClient3.java:69)
>       at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:751)
>       at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:141)
>       at 
> org.apache.qpid.client.BasicMessageConsumer.notifyMessage(BasicMessageConsumer.java:725)
>       at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:186)
>       at 
> org.apache.qpid.client.BasicMessageConsumer_0_10.notifyMessage(BasicMessageConsumer_0_10.java:1)
>       at 
> org.apache.qpid.client.AMQSession$Dispatcher.notifyConsumer(AMQSession.java:3475)
>       at 
> org.apache.qpid.client.AMQSession$Dispatcher.dispatchMessage(AMQSession.java:3414)
>       at 
> org.apache.qpid.client.AMQSession$Dispatcher.access$1(AMQSession.java:3377)
>       at org.apache.qpid.client.AMQSession.dispatch(AMQSession.java:3194)
>       at 
> org.apache.qpid.client.message.UnprocessedMessage.dispatch(UnprocessedMessage.java:54)
>       at 
> org.apache.qpid.client.AMQSession$Dispatcher.run(AMQSession.java:3337)
>       at java.lang.Thread.run(Thread.java:662)
> {noformat} 
> The following code reproduces the issue
> {noformat} 
>         Properties properties = new Properties();
>         properties.put("java.naming.factory.initial", 
> "org.apache.qpid.jndi.PropertiesFileInitialContextFactory");
>         properties.put("connectionfactory.local", 
> "amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'");
>         Context context = new InitialContext(properties);
>         ConnectionFactory factory = (ConnectionFactory) 
> context.lookup("local");
>         Connection connection = factory.createConnection();
>         connection.setExceptionListener(new ExceptionListener()
>         {
>             @Override
>             public void onException(JMSException exception)
>             {
>                 System.out.println("Exception listener");
>                 exception.printStackTrace();
>             }
>         });
>         final Session session = connection.createSession(true, 
> Session.SESSION_TRANSACTED);
>         Destination destination = session.createQueue("test");
>         MessageProducer producer = session.createProducer(destination);
>         MessageConsumer consumer = session.createConsumer(destination);
>         producer.send(session.createTextMessage("Test"));
>         session.commit();
>         final CountDownLatch countDownLatch = new CountDownLatch(1);
>         consumer.setMessageListener(new MessageListener(){
>             @Override
>             public void onMessage(Message message)
>             {
>                 countDownLatch.countDown();
>                 try
>                 {
>                     Thread.sleep(3000l);
>                 }
>                 catch (InterruptedException e)
>                 {
>                     e.printStackTrace();
>                 }
>                 try
>                 {
>                     session.commit();
>                 }
>                 catch (JMSException e)
>                 {
>                     e.printStackTrace();
>                 }
>             }});
>         connection.start();
>         countDownLatch.await(1, TimeUnit.MINUTES);
>         System.out.println("Closing connection before commit");
>         connection.close();
> {noformat} 



--
This message was sent by Atlassian JIRA
(v6.2#6252)

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

Reply via email to