Romain, you're opinion means alot so i'm wondering why you are against JMS in
this case.  This kind of pattern happens alot in my experience.  In this
case a timer job executes that finds a list of jobs to execute, in this case
read a list of emails and for each email insert a row into a database.  

In my experience, the timer job that executes wants to finish as quickly as
possible so you don't get overlapping timer executions and also to minimize
resource utilization.  Putting a jms message on a queue is generally alot
quicker than performing an actual database insert.  In addition JMS gives
you guaranteed message delivery, so you know that the message is going to
get processed and not get lost.  It is part of the JMS spec that i believe
is very applicable in this case.

As for the transactional semantics that apply to the Message Driven Bean
that performs the actual work of inserting the record into the database,
again i think it works well in this case.  If the MDB is executing within a
container managed transaction, then only if the database insert succeeds and
the transaction commits will the message be taken off the queue.  This means
if the database insert fails, you haven't lost the message and can either
retry or configure the JMS to place the message on an error queue that can
be processed in a different way.  

How would you handle a database insert failure in the current solution?

Also I don't think it matters if the MDB that performs the message
processing is local or not.  Its irrelevant really.  I wouldn't be using the
JMS just for asynchronous calls.  I'd be using it for the guarenteed message
delivery and processing, performance AND asynchronous processing.






--
View this message in context: 
http://openejb.979440.n4.nabble.com/Re-Why-are-Tomcat-s-threads-more-costly-than-background-threads-tp4659429p4659710.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Reply via email to