Hello again, after few test, i noticed that I was using wrong method in DefaultProviderMarshaler, now I have problem with overriding JMSExpiration property, I've tried timeToLive and receiveTimeout properties in <jms:provider /> endpoint, but it seems that properties sets some exchange behaviour instead of message. This is the code for my custom marshaler, and configuration of <jms:provider /> endpoint, in this marshaler I'm setting JMSExpiration property and JMSCorrelationID property and only JMSExpiration property is overriden to 0.
This is view of message in activemq queue: http://img213.imageshack.us/img213/1121/jconsolekx9.jpg import javax.jbi.messaging.NormalizedMessage; import javax.jms.JMSException; import javax.jms.Message; import org.apache.log4j.Logger; import org.apache.servicemix.jms.endpoints.DefaultProviderMarshaler; public class MyMarshaler extends DefaultProviderMarshaler { private static final Logger LOG = Logger.getLogger(MyMarshaler.class); protected void copyPropertiesFromNM(NormalizedMessage normalizedMessage, Message message) throws JMSException { message.setJMSExpiration(10000); message.setJMSCorrelationID("custom_corrid"); super.copyPropertiesFromNM(normalizedMessage, message); if (message.getJMSExpiration() != 10000) { LOG.error("===================== this is stupid ============================"); } } } <jms:provider service="test:clientProviderService" endpoint="clientProviderEndpoint" destinationName="outClientQueue" connectionFactory="#xaConnectionFactory" marshaler="#myMarshaler" /> <bean id="myMarshaler" class="com.test.MyMarshaler" /> <bean id="transactionManager" class="org.jencks.factory.TransactionManagerFactoryBean" /> <amqpool:xa-pool id="xaConnectionFactory" brokerURL="tcp://localhost:61616?jms.useAsyncSend=true" transactionManager="#transactionManager" maxConnections="100" /> Do you supose, what overriding JMSExpiration property? 2008/11/27 zminy rado <[EMAIL PROTECTED]> > Hello, > > I've tried property timeToLive in <jms:provider /> endpoint, but this is > not setting the JMSExpiration property. But I noticed that <jms:provider /> > do not use my custom marshaler. Do you know when <jms:provider /> endpoint > ignore custom marshalers? > > 2008/11/26 Gert Vanthienen <[EMAIL PROTECTED]> > > L.S., >> >> The JMSExpiration you set in the Marshaler is probably being overridden by >> the TimeToLive value specified on the Producer. >> Could you try adding the timeToLive="10000" attribute to your >> <jms:provider/> endpoint to see if that yields the desired result? >> >> Regards, >> >> Gert >> >> >> >> razu programista wrote: >> >>> Hello everybody, >>> I have a problem with removing unused messages from ActiveMQ queue. The >>> problem is that when I peek messages which resides in ActiveMQ queue in >>> jconsole, I see that their JMSExpiration property is set to 0. But I >>> wrote >>> my own jms provider marshaler which sets this property to my custom >>> value. >>> The code looks like: >>> >>> // marshaler >>> >>> import javax.jbi.messaging.MessageExchange; >>> import javax.jbi.messaging.NormalizedMessage; >>> import javax.jms.Message; >>> >>> import org.apache.servicemix.jms.endpoints.DefaultProviderMarshaler; >>> >>> public class MyMarshaler extends DefaultProviderMarshaler { >>> >>> public void populateMessage(Message message, MessageExchange exchange, >>> NormalizedMessage normalizedMessage) throws Exception { >>> super.populateMessage(message, exchange, normalizedMessage); >>> message.setJMSExpiration(10000); >>> } >>> } >>> >>> // jms xbean.xml config >>> >>> <jms:provider service="test:clientProviderService" >>> endpoint="clientProviderEndpoint" >>> destinationName="outClientQueue" >>> marshaler="#myMarshaler" >>> connectionFactory="#connectionFactory"/> >>> >>> <bean id="myMarshaler" class="com.test.MyMarshaler" /> >>> >>> >>> >>> Despite of setting JMSExpiration property in custom marshaler, >>> JMSExpiration >>> property is 0. Have you any idea what is wrong? >>> >>> >>> >> >> >
