[
https://issues.apache.org/jira/browse/AMQ-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13041991#comment-13041991
]
Arthur Naseef edited comment on AMQ-3166 at 6/1/11 5:42 AM:
------------------------------------------------------------
I finally walked through the entire IntrospectionSupport and query handling for
an ActiveMQConnection and found that the following on the URL works around the
issue as well:
{code}
...?jms.alwaysSyncSend=true (JAVA CLIENT)
...?connection.alwaysSyncSend=true (C++ CLIENT: activemq-cpp)
{code}
For TRANSACTIONS, I recommend that the extra logic be added to use sync sends
by default because that matches the the JMS standard - and what I believe
clients expect across all JMS providers - but with a setting that allows
clients to override that operation. Perhaps the following:
{code}
...?jms.transactionAsyncSend=false => (default) don't use async sends with
transactions
...?jms.transactionAsyncSend=true => use async sends with transactions
{code}
By the way, shouldn't the activemq-cpp library support "jms." as the prefix for
connection parameters in the same way the Java code does? Otherwise, we have
to make sure URL's are client-implementation-specific.
The subset of logic for async sends on transactions would be as follows:
{code}
IF (session IS transacted ) AND ( not alwaysSyncSend ) AND (
transactionAsyncSend )
THEN
SEND async
ELSE
SEND sync
END IF
{code}
A patch with this update will be coming soon.
was (Author: artnaseef):
I finally walked through the entire IntrospectionSupport and query handling
for an ActiveMQConnection and found that the following on the URL works around
the issue as well:
{code}
...?jms.alwaysSyncSend=true (JAVA CLIENT)
...?connection.alwaysSyncSend=true (C++ CLIENT: activemq-cpp)
{code}
For TRANSACTIONS, I would argue that sync sends default to true because that
matches the the JMS standard - and what I believe clients expect by default -
but with a setting that allows clients to override that operation. Perhaps the
following:
{code}
...?jms.transactionAsyncSend=false => (default) don't use async sends with
transactions
...?jms.transactionAsyncSend=true => use async sends with transactions
{code}
By the way, shouldn't the activemq-cpp library support "jms." as the prefix for
connection parameters in the same way the Java code does? Otherwise, we have
to make sure URL's are client-implementation-specific.
The subset of logic for async sends on transactions would be as follows:
{code}
IF (session IS transacted ) AND ( not alwaysSyncSend ) AND (
transactionAsyncSend )
THEN
SEND async
ELSE
SEND sync
END IF
{code}
A patch with this update will be coming soon.
> client calls to createProducer() and send() successful even though
> BrokerFilter methods throw exceptions
> --------------------------------------------------------------------------------------------------------
>
> Key: AMQ-3166
> URL: https://issues.apache.org/jira/browse/AMQ-3166
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker, JMS client
> Affects Versions: 5.4.2, 5.5.0
> Reporter: Arthur Naseef
> Attachments: AMQ3166Test.java, AMQ3166Test.java
>
>
> Client calls to createProducer() always return without an error even though a
> BrokerFilter's addProducer() method throws an exception on the request. In
> contrast, createConsumer() throws an exception, as expected, when
> BrokerFilter's addConsumer() throws an exception.
> Clients using transacted sessions always return successfully from send() when
> a BrokerFilter's send() method throws an exception.
> Below is a broker configuration file using <authorizationPlugin> to
> illustrate the problem.
> To reproduce the problem With this configuration, a test client only needs to
> connect with user = "user" and password = "password", and then attempt to
> produce messages with a transacted session to any queue other than ABC (e.g.
> DEF).
> Tracing the cause of the issue has lead to finding that the client code for
> creating a producer uses an Async send for the producer information. The
> analogous code for consumers uses a Sync send.
> I will work on a patch. It would be very helpful to have feedback on the
> operation of the bus and the best way to resolve this problem. Based on my
> research, it seems that createProducer() should be using a Sync send in place
> of the Async one. Not yet sure about send(). Another possibility is to move
> the security operations to earlier in the internal broker flow.
> === SAMPLE BROKER XML ===
> <beans
> xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://activemq.apache.org/schema/core
> http://activemq.apache.org/schema/core/activemq-core.xsd">
> <broker xmlns="http://activemq.apache.org/schema/core"
> brokerName="localhost"
> dataDirectory="${activemq.base}/data"
> destroyApplicationContextOnStop="true" >
> <persistenceAdapter>
> <kahaDB directory="${activemq.base}/data/kahadb"/>
> </persistenceAdapter>
>
> <plugins>
> <simpleAuthenticationPlugin anonymousAccessAllowed="true">
> <users>
> <authenticationUser username="user" password="password"
> groups="users"/>
> </users>
> </simpleAuthenticationPlugin>
> <authorizationPlugin>
> <map>
> <authorizationMap>
> <authorizationEntries>
> <authorizationEntry queue="ABC" read="users"
> write="users" admin="users" />
> <authorizationEntry topic="ActiveMQ.Advisory.>"
> read="users" write="users" admin="users" />
> </authorizationEntries>
> </authorizationMap>
> </map>
> </authorizationPlugin>
> </plugins>
> <transportConnectors>
> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
> </transportConnectors>
> </broker>
> </beans>
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira