You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Gary Tully (JIRA)" <ji...@apache.org> on 2013/09/03 17:58:52 UTC

[jira] [Commented] (AMQ-4699) Transacted producer does not throw ResourceAllocationException on error

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

Gary Tully commented on AMQ-4699:
---------------------------------

with alwaysSyncSend the producer can get a notification but it is not clear that it makes sense to force a rollback in this case. The commit is really commit what succeeded, not what failed, or commit the transaction, whatever is in there.
In the async case, it is more problematic b/c the client can be unaware that all messages are resulting in exceptions. The difficulty is tying the exception listener to the session, at the moment it is tied to the connection, so there can be more than one session context and more than one transaction. It would be possible to flag all transactions as 'toRollback' but that sounds two harsh. This will need a little thought.
                
> Transacted producer does not throw ResourceAllocationException on error
> -----------------------------------------------------------------------
>
>                 Key: AMQ-4699
>                 URL: https://issues.apache.org/jira/browse/AMQ-4699
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.8.0
>         Environment: ActiveMQ 5.8.0 server
> ActiveMQ 5.8.0 client on Java 7
>            Reporter: Joakim von Brandis
>
> Using a transacted producer session, with sendFailIfNoSpace=true or sendFailIfNoSpaceAfterTimeout=timeout, the producer gets no error on whether send() or commit(). Thus, the producer may pour out messages in a transacted session, which are silently discarded by ActiveMQ.
> A connection exception listener will receive ResourceAllocationException, but since this happens in another thread than the sending client, there is no guarantee that the client can be notified in time to avoid commit().
> Without using sendFailIfNoSpace(AfterTimeout), producer is blocked until space is available, as expected.
> The client should receive error on send() when the resource exhaustion is reported, and in any case a commit() should not complete without error if the server has discarded any messages in the transaction.

--
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