I'd recommend you upgrade to ActiveMQ 4.0.1 as we've fixed numerous
issues with the Resource Adapter since 3.2.

To customize the redelivery policy use the resource adapter...

http://incubator.apache.org/activemq/resource-adapter-properties.html

On 6/26/06, vineetc <[EMAIL PROTECTED]> wrote:

Hello,
I have built SerivceMix JBI JMS components using ComponentSupport which are
essentially extensions of JmsInBinding and JmsInUsingJcaBinding for sending
and recv. JMS meesages using AMQ 3.2 and Jecnks 1.1.1.
Sending and Receiving (using JCA) JMS messages work fine but i am having
troubles with redelivery and setting up DLQ.
For test purposes i throw out runtime exception from onMessage() method of
the listener for the message sent. Although the spec JMS says its an error
to throw RuntimeException its easier to just test the use case of redelivery
and dead letter Q. From the log it looks like the message is neither getting
redelivered nor sent to DLQ.

Following are the exceprts from the AMQ broker, Receiver and sender
component XML files.

RECEIVER:
<beans>
       <!-- primary Q handling the messages -->
        <bean id="activationSpec"
class="org.activemq.ra.ActiveMQActivationSpec">
                <property name="destination"
value="org.wkhmr.cornerstone.business.intell.stats.jms.q" />
                <property name="destinationType" value="javax.jms.Queue" />
        </bean>
       <!-- dead letter Q for handling poisoned messages -->
        <bean id="dlqActivationSpec"
class="org.activemq.ra.ActiveMQActivationSpec">
                <property name="destination"
value="org.wkhmr.cornerstone.business.intell.stats.jms.dlq" />
                <property name="destinationType" value="javax.jms.Queue" />
        </bean>
        <!-- the JCA container -->
        <bean id="jencks" name="jcaContainer"
class="org.jencks.JCAContainer" singleton="true">
                <property name="bootstrapContext">
                        <bean
class="org.jencks.factory.BootstrapContextFactoryBean">
                                <property name="threadPoolSize" value="18"
/>
                                <property name="transactionManager"
ref="transactionManager"/>
                        </bean>
                </property>
                <!-- the JCA Resource Adapter -->
                <property name="resourceAdapter">
                        <bean id="activeMQResourceAdapter"
class="org.activemq.ra.ActiveMQResourceAdapter" singleton="true">
                                <property name="serverUrl">
                                        <value>tcp://localhost:61616</value>
                                </property>
                                <property name="endpointWorkerType"
value="asf"/>
                        </bean>
                </property>
        </bean>

        <bean id="transactionManager"
class="org.jencks.factory.TransactionManagerFactoryBean"/>
        <bean id="transactionContextManager"
class="org.jencks.factory.TransactionContextManagerFactoryBean" />
</beans>.

SENDER:
<beans>
        <!-- message broker -->
        <bean id="broker" class="org.activemq.spring.BrokerFactoryBean">
                <property name="config"
value="file:C:/etc/opt/cornerstone/bus-intell/stats/statsActiveMQ.xml" />
        </bean>

        <bean id="jmsFactory"
class="org.activemq.pool.PooledConnectionFactory">
                <property name="connectionFactory">
                        <bean
class="org.activemq.ActiveMQConnectionFactory">
                                <property name="brokerURL">
                                        <value>tcp://localhost:61616</value>
                                </property>
                        </bean>
                </property>
        </bean>

        <bean id="template"
class="org.springframework.jms.core.JmsTemplate">
                <property name="connectionFactory">
                        <ref local="jmsFactory" />
                </property>
                <property name="defaultDestinationName"
value="org.cornerstone.business.intell.stats.jms.q" />
                <property name="pubSubDomain" value="false" />
                <!--  transactional properties -->
                <property name="sessionTransacted" value="true" />
                <property name="sessionAcknowledgeMode" value="0"/>
</beans>

AMQ Broker Config Xml:
<beans>
  <broker name="StatsBroker">
    <connector>
      <tcpServerTransport uri="tcp://localhost:61616" backlog="999"
useAsyncSend="true" maxOutstandingMessages="45">
              <wireFormat class="org.activemq.io.impl.DefaultWireFormat"/>
      </tcpServerTransport>
    </connector>

    <persistence><vmPersistence></vmPersistence>
    </persistence>

    <redeliveryPolicy backOffMode="true" maximumRetryCount="1">
    </redeliveryPolicy>

       <deadLetterPolicy
        deadLetterEnabled="true"
        storeNonPersistentMessages="true"
        deadLetterPerDestinationName="false"
        deadLetterPrefix="org.wkhmr.cornerstone.business.intell.stats.jms."
        deadLetterName="dlq"
        allowDuplicates="false" >
        <!--
                        deadLetterQueueTTL="120000" deadLetterTopicTTL="120000" 
ONLY when we
need to expire messages
                         useDatabaseLocking="true" ONLY When JDBC persistence 
is enabled
        -->
    </deadLetterPolicy>

  </broker>

Both the sender and receiver files correspond to separate JBI components for
sending and receiving.
I also had problems with the using GeronimoTransactionManagerFactoryBean.
The problem reported was that the object returned by the bean is not of type
ExtendedtransactionManager.

Following is the stacktrace for the exception:

2006-06-26 00:03:23,625  INFO [Thread-36] ActiveMQSession:572 - Caught
:java.lang.RuntimeException: javax.jms.JMSException: Message id 3 should be
picked up on DLQ
java.lang.RuntimeException: javax.jms.JMSException: Message id 3 should be
picked up on DLQ
        at
com.wkhmr.cornerstone.bi.stats.binding.jms.base.StatsJmsInBinding.onMessage(Unknown
Source)
        at org.jencks.XAEndpoint.onMessage(XAEndpoint.java:126)
        at
org.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:136)
        at
org.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:75)
        at org.activemq.ActiveMQSession.deliver(ActiveMQSession.java:568)
        at org.activemq.ActiveMQSession.run(ActiveMQSession.java:550)
        at org.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:165)
        at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291)
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown
Source)
        at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jms.JMSException: Message id 3 should be picked up on DLQ
        at
com.wkhmr.cornerstone.bi.stats.binding.jms.StatsReceiver.processReceviedMessage(Unknown
Source)
        ... 10 more

I have tried hunting thru the Jecks website but culdnt find anything related
to handling Redelivery or DLQ.
Any insight into where or what i am doing wrong?
Thanks in advance for your help.
Vineet
--
View this message in context: 
http://www.nabble.com/SM-%2B-AMQ-%2B-Jencks-with-DeadLetterQueue-t1851775.html#a5055822
Sent from the ActiveMQ - User forum at Nabble.com.




--

James
-------
http://radio.weblogs.com/0112098/

Reply via email to