activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Tully <gary.tu...@gmail.com>
Subject Re: SecurityException not delegated to Camel?
Date Fri, 30 Jul 2010 15:11:52 GMT
If you can configure sync send on the connection factory, can do it
via the brokerURL:
  vm://localhost?jms.alwaysSyncSend=true
then the send exception will bubble back up to camel. The exception on
creating the producer will still be there as that is always send
async.
A standard javax.jms.ExceptionListener would be called if one was
registered when the async exception are received from the broker.

On 30 July 2010 13:04, Holger_ <sihlschm@googlemail.com> wrote:
>
> Hi,
>
> I started this topic on the camel-user list but was referred to this list:
> http://camel.465427.n5.nabble.com/JMS-Transactions-not-handling-SecurityException-tp2256668p2256668.html
>
> I have a very simple Camel route consuming messages from an Active MQ queue
> and sending them to another one. The whole route should be transactional,
> i.e. either the message is consumed and sent successfully or this process is
> rolled back:
>
> from("activemq:queue:foo")
>    .transacted()
>    .to("activemq:queue:bar2");
>
> foo is accessible by the user but bar2 is not accessible. When I send a
> message to the foo queue I get the following output:
>
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.component.jms.EndpointMessageListener -
> Endpoint[activemq://queue:foo] consumer receiving JMS message:
> ActiveMQTextMessage {commandId = 6, responseRequired = false, messageId =
> ID:HOLGERSNB-2175-1280308413512-2:61:1:1:1, originalDestination = null,
> originalTransactionId = null, producerId =
> ID:HOLGERSNB-2175-1280308413512-2:61:1:1, destination = queue://foo,
> transactionId = TX:ID:HOLGERSNB-2175-1280308413512-2:61:1, expiration = 0,
> timestamp = 1280308435389, arrival = 0, brokerInTime = 1280308435389,
> brokerOutTime = 1280308435405, correlationId = null, replyTo = null,
> persistent = true, type = null, priority = 4, groupID = null, groupSequence
> = 0, targetConsumerId = null, compressed = false, userID = null, content =
> null, marshalledProperties = null, dataStructure = null, redeliveryCounter =
> 0, size = 1039, properties = null, readOnlyProperties = true, readOnlyBody =
> true, droppable = false, text = Hello World}
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.spring.spi.TransactionErrorHandler - Transaction begin
> (0x1ca1837) for ExchangeId: ID:HOLGERSNB-2175-1280308413512-2:61:1:1:1
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.processor.SendProcessor - >>>>
> Endpoint[activemq://queue:bar2] Exchange[JmsMessage: ActiveMQTextMessage
> {commandId = 6, responseRequired = false, messageId =
> ID:HOLGERSNB-2175-1280308413512-2:61:1:1:1, originalDestination = null,
> originalTransactionId = null, producerId =
> ID:HOLGERSNB-2175-1280308413512-2:61:1:1, destination = queue://foo,
> transactionId = TX:ID:HOLGERSNB-2175-1280308413512-2:61:1, expiration = 0,
> timestamp = 1280308435389, arrival = 0, brokerInTime = 1280308435389,
> brokerOutTime = 1280308435405, correlationId = null, replyTo = null,
> persistent = true, type = null, priority = 4, groupID = null, groupSequence
> = 0, targetConsumerId = null, compressed = false, userID = null, content =
> null, marshalledProperties = null, dataStructure = null, redeliveryCounter =
> 0, size = 1039, properties = null, readOnlyProperties = true, readOnlyBody =
> true, droppable = false, text = Hello World}]
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate - Executing
> callback on JMS Session: ActiveMQSession
> {id=ID:HOLGERSNB-2175-1280308413512-2:64:1,started=false}
> WARN VMTransport org.apache.activemq.broker.TransportConnection.Service -
> Async error occurred: java.lang.SecurityException: User user is not
> authorized to write to: queue://bar2
> java.lang.SecurityException: User user is not authorized to write to:
> queue://bar2
>        at
> org.apache.activemq.security.AuthorizationBroker.addProducer(AuthorizationBroker.java:159)
>        at
> org.apache.activemq.broker.MutableBrokerFilter.addProducer(MutableBrokerFilter.java:97)
>        at
> org.apache.activemq.broker.TransportConnection.processAddProducer(TransportConnection.java:494)
>        at
> org.apache.activemq.command.ProducerInfo.visit(ProducerInfo.java:105)
>        at
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:300)
>        at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:178)
>        at
> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
>        at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>        at
> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210)
>        at
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
>        at
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
> Source)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>        at java.lang.Thread.run(Unknown Source)
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate - Sending
> JMS message to: queue://bar2 with message: ActiveMQTextMessage {commandId =
> 0, responseRequired = false, messageId = null, originalDestination = null,
> originalTransactionId = null, producerId = null, destination = null,
> transactionId = null, expiration = 0, timestamp = 0, arrival = 0,
> brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null,
> persistent = true, type = null, priority = 4, groupID = null, groupSequence
> = 0, targetConsumerId = null, compressed = false, userID = null, content =
> null, marshalledProperties = null, dataStructure = null, redeliveryCounter =
> 0, size = 0, properties = {CamelJmsDeliveryMode=2}, readOnlyProperties =
> false, readOnlyBody = false, droppable = false, text = Hello World}
> WARN VMTransport org.apache.activemq.broker.TransportConnection.Service -
> Async error occurred: java.lang.SecurityException: User user is not
> authorized to write to: queue://bar2
> java.lang.SecurityException: User user is not authorized to write to:
> queue://bar2
>        at
> org.apache.activemq.security.AuthorizationBroker.send(AuthorizationBroker.java:182)
>        at
> org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:133)
>        at
> org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:446)
>        at
> org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:631)
>        at
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:300)
>        at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:178)
>        at
> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
>        at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>        at
> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210)
>        at
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
>        at
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
> Source)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>        at java.lang.Thread.run(Unknown Source)
> DEBUG DefaultMessageListenerContainer-1
> org.apache.camel.spring.spi.TransactionErrorHandler - Transaction commit
> (0x1ca1837) for ExchangeId: ID:HOLGERSNB-2175-1280308413512-2:61:1:1:1
> WARN VMTransport org.apache.activemq.broker.TransportConnection.Service -
> Async error occurred: java.lang.IllegalStateException: Cannot remove a
> producer that had not been registered:
> ID:HOLGERSNB-2175-1280308413512-2:64:1:1
> java.lang.IllegalStateException: Cannot remove a producer that had not been
> registered: ID:HOLGERSNB-2175-1280308413512-2:64:1:1
>        at
> org.apache.activemq.broker.TransportConnection.processRemoveProducer(TransportConnection.java:515)
>        at org.apache.activemq.command.RemoveInfo.visit(RemoveInfo.java:78)
>        at
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:300)
>        at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:178)
>        at
> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
>        at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>        at
> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:210)
>        at
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
>        at
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
> Source)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>        at java.lang.Thread.run(Unknown Source)
> INFO DefaultMessageListenerContainer-1
> org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of
> JMS message listener invoker failed for destination 'bar2' - trying to
> recover. Cause: User user is not authorized to read from: queue://bar2
> INFO DefaultMessageListenerContainer-1
> org.springframework.jms.listener.DefaultMessageListenerContainer -
> Successfully refreshed JMS Connection
> INFO DefaultMessageListenerContainer-2
> org.springframework.jms.listener.DefaultMessageListenerContainer - Setup of
> JMS message listener invoker failed for destination 'bar2' - trying to
> recover. Cause: User user is not authorized to read from: queue://bar2
> INFO DefaultMessageListenerContainer-2
> org.springframework.jms.listener.DefaultMessageListenerContainer -
> Successfully refreshed JMS Connection
>
>
> The problem is that the message is consumed from the foo-queue and not
> rolled back within the transaction (the transaction commits before sending
> the message to the bar-queue). This seems to happen because the
> SecurityException exception is not propagated to Camel.
>
> Is there anything I am doing wrong?
>
> Thanks,
> Holger
> --
> View this message in context: http://old.nabble.com/SecurityException-not-delegated-to-Camel--tp29305408p29305408.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>



-- 
http://blog.garytully.com

Open Source Integration
http://fusesource.com

Mime
View raw message