qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Keith Wall (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (QPID-4088) Java JMS client does not fully conform JMS spec requirements 4.3.5 about closing a connection
Date Sat, 19 Jul 2014 09:51:38 GMT

     [ 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: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message