I'm using ActiveMQ(v5.1) jca adapter in Resin 3.1 snapshot0331.

In my topic producer I manually create a JmsSesion and JmsConnection using 
JmsFactory and send a TextMessage, then close the connection explicitly.
In my message driven bean I did not inject anything because resin should be 
responsible to call onMessage() method when there is a new message in topic.

I've met the 6h max-active-time problem.

After server running for 6 hours, it prints a log message:
closing pool item from active timeout:PoolItem[activemq, 0, 
ActiveMQManagedConnection]

I think it should be the container, which eventually invoked message driven 
bean when topic has new message, closed the connection when a timeout happened.

My questions:
1. How could I configure the "max-active-time" to a fairly long time for 
com.caucho.jca.ConnectionPool. I've googled around and found no useful info. I 
only knew how to do it for DBPool within <database> config tag. Is there any  
"max-active-time" attr could be placed within  <resource-adapter> or  
<connection-factory>?
2. I felt strange that I have to create a new JmsConnection and JmsSession when 
producing a message, but need not to do it when consuming it. I think there 
should be a easy way to producing a message using resin IoC, eliminating the 
JmsConnection/JmsSession stuff.

My current config is as below:
================================================
 <resource-adapter uri="activemq:">
  <init server-url="tcp://192.168.1.240:61616"/>
 </resource-adapter>
 <connection-factory uri="activemq:" name="activemq"/>
 <jms-topic uri="activemq:" name="clearCache">
  <init physicalName="topic.clearCache"/> <!-- NOTE: There should be a resin 
documentation error: should be "physicalName", not "physical-name" -->
 </jms-topic>
 <ejb-message-bean class="com.buysou.cache.ClearCacheListener">
  <destination>#{clearCache}</destination>
 </ejb-message-bean>
====================================================

My topic producer code:
====================================================
 @Named("clearCache")
 Topic clearCacheTopic;
 @In
 ConnectionFactory jmsFactory;
 public void sendClearCacheMessage() {
  Connection conn = null;
  try {
   conn = jmsFactory.createConnection();
   Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
   MessageProducer producer = session.createProducer(clearCacheTopic);
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
   producer.send(session.createTextMessage("Clear cache at " + 
DateUtils.toDateTimeString(new Date())));
  } catch (JMSException e) {
   log.warn(StringUtils.stackTraceAsString(e));
  } finally {
   try {
    conn.close();
   } catch (Throwable ignore) {
   }
  }
 }

====================================================

My message driver bean code:
====================================================
public class ClearCacheListener implements MessageListener {
 private static final Log log = LogFactory.getLog(ClearCacheListener.class);

 public void onMessage(Message message) {
  try {
   if (message instanceof TextMessage) {
    TextMessage txtMsg = (TextMessage) message;
    log.info(txtMsg.getText());
   } else if (message instanceof ObjectMessage) {
    ObjectMessage objMessage = (ObjectMessage) message;
    log.info(objMessage.getObject());
   }
  } catch (JMSException e) {
   log.warn(StringUtils.stackTraceAsString(e));
  }
 }
}

====================================================


Additional:
I tried the Resin's own JDBC queue and found it corrupt. I could only produce a 
message, and found the message inserted into database. But my message driven 
bean was never invoked.

regards
-Wesley
_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to