[ 
https://issues.apache.org/activemq/browse/AMQ-2280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53513#action_53513
 ] 

Giovani Seben commented on AMQ-2280:
------------------------------------

Hi,

The patch that I'm suggesting is a simple check on the code to try to avoid 
this situation since in my opinion without a more fine grained definition of 
transactions with Stomp would be required.

Let me try to explain this a bit better. 
The particular problem with the snippet of stomp code that you attached to this 
report is that it first subscribes to destination "/queue/COMMAND.HOST.alex" 
and then you tries to send transacted messages to 
"/queue/COMMANDREPLY.HOST.alex".  Since stomp transactions are bound only by 
the transactionID the logic in the code needs to check *all* destinations used 
in a connection for messages to commit. In this case the exception happens 
because there is nothing to be commited at "/queue/COMMAND.HOST.alex".

The bottom line is that since BEGIN doesn't take a destination as a parameter 
there is no way to identify for which destination you are starting a 
transaction and that's the reason why all destinations for the current 
connection have to be checked for messages to be commited.

My recommendation is that if you use transactions, don't use more than one 
destination per connection. This way you avoid the confusion of which 
destination the transaction is actually supposed to be for.

Hope that this clarifies some of your questions.

> stomp: Transport failed: java.io.IOException: Unexpected error occured
> ----------------------------------------------------------------------
>
>                 Key: AMQ-2280
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2280
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker, Connector
>    Affects Versions: 5.3.0
>         Environment: linux  2.6.26.8, Fedora Core 8
> java version "1.6.0_11"
> Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
> Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
> apache-activemq-5.3-SNAPSHOT-bin.gz            Fri May 29 06:12:47 GMT+00:00 
> 2009      34977374          
>            Reporter: Aleksandar Ivanisevic
>         Attachments: AMQ-2280.patch
>
>
> This does not happen in 5.2.0, only in 5.3..SNAPSHOT 
> I'm getting the above exception with the following STOMP session
> > telnet localhost 61613
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> CONNECT
> passcode:password
> login:login
> ^@
> CONNECTED
> session:ID:alex-60773-1244124360289-2:2
> SUBSCRIBE
> activemq.prefetchSize:1
> ack:client
> destination:/queue/COMMAND.HOST.alex
> activemq.exclusive:true
> ^@
> BEGIN
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> persistent:true
> ^@
> SEND
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> receipt:ID:alex-58262-1244123488785-2:1-2
> persistent:true
> replytext
> ^@
> RECEIPT
> receipt-id:ID:alex-58262-1244123488785-2:1-2
> COMMIT
> destination:/queue/COMMANDREPLY.HOST.alex
> transaction:ID:alex-58262-1244123488785-2:1-1
> ^@
> Connection closed by foreign host.
> at this point AMQ closses the TCP connection and I see the following in the 
> log (DEBUG root log level):
> DEBUG TransportConnection            - Setting up new connection: 
> /127.0.0.1:44692
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AbstractRegion                 - localhost adding consumer: 
> ID:alex-60773-1244124360289-2:2:-1:1 for destination: 
> queue://COMMAND.HOST.alex
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG AMQMessageStore                - Journalled transacted message add for: 
> ID:alex-60773-1244124360289-2:2:-1:1:1, at: offset = 10973, file = 1, size = 
> 375, type = 1
> DEBUG AMQPersistenceAdapter          - dataFilesInProgress.values: (0) []
> DEBUG AMQPersistenceAdapter          - lastDataFile: 1
> DEBUG AsyncDataManager               - lastFileId=0, purgeList: (0) []
> DEBUG AMQPersistenceAdapter          - Checkpoint started.
> DEBUG AMQPersistenceAdapter          - Checkpoint done.
> DEBUG Transport                      - Transport failed: java.io.IOException: 
> Unexpected error occured
> java.io.IOException: Unexpected error occured
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:192)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.util.NoSuchElementException
>       at java.util.LinkedList.getFirst(LinkedList.java:109)
>       at 
> org.apache.activemq.transport.stomp.StompSubscription.onStompCommit(StompSubscription.java:130)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommit(ProtocolConverter.java:337)
>       at 
> org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:179)
>       at 
> org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:67)
>       at 
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
>       at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
>       ... 1 more
> DEBUG TransportConnection            - Stopping connection: /127.0.0.1:44692
> DEBUG TcpTransport                   - Stopping transport 
> tcp:///127.0.0.1:44692
> DEBUG TransportConnection            - Stopped transport: /127.0.0.1:44692
> DEBUG TransportConnection            - Cleaning up connection resources: 
> /127.0.0.1:44692
> DEBUG AbstractRegion                 - localhost removing consumer: 
> ID:alex-60773-1244124360289-2:2:-1:1 for destination: 
> queue://COMMAND.HOST.alex
> DEBUG LocalTransaction               - rollback: 
> TX:ID:alex-60773-1244124360289-2:2:1 syncCount: 3
> DEBUG AMQMessageStore                - Transacted message add rollback for: 
> ID:alex-60773-1244124360289-2:2:-1:1:1, at: offset = 10973, file = 1, size = 
> 375, type = 1
> DEBUG TransportConnection            - Connection Stopped: /127.0.0.1:44692

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to