users@glassfish.java.net

Re: Queueing jobs for processing in their own thread/transaction?

From: Brian Repko <brianrepko_at_fastmail.us>
Date: Tue, 03 Feb 2009 07:33:42 -0600

Glassfish does allow you access to the WorkManagerFactory and thus
you can create a WorkManager. WorkManager allows you to create a
Work object and put it on the queue - just like an HTTP request or
an EJB method.

Spring has this built into its TaskExecutor framework - with the
GlassFishWorkManagerTaskExecutor. Spring extends the objects that
you can put on the queue - plain old Runnables and does the conversion
into Work objects for you.

I believe that this will be part of the Java EE 6 spec but GF lets
you access the objects now.

We use this for background import tasks. Works like a champ.

Brian


----- Original message -----
From: "Dobes Vandermeer" <dobesv_at_gmail.com>
To: users_at_glassfish.dev.java.net
Date: Mon, 2 Feb 2009 10:18:33 -0800 (PST)
Subject: Queueing jobs for processing in their own thread/transaction?



I have an EJB that needs to do schedule some work for itself, like sending
emails, processing certain records, etc. in their own thread and
transaction.

The reason I want to move them into their own thread and transaction is to
avoid holding locks for too long, avoid deadlocks, and avoid the possibility
that a job could throw an exception and cause all the other jobs to be
aborted or rolled back.

Up until now I've been using the TimerService and just scheduling each job
using a timer. However, I'm concerned that if I schedule too many timers I
might run into resource issues - for example, if the timers fire at the same
time, TimerService might try to create a thread for each one and they would
all create a transaction and then connect to the database - it's likely that
I'll run out of threads, database connections, memory or sockets.

I don't know how to predict or control how many threads the TimerService
might create at any time.

I thought I could use JMS for this but the JMS implementation with glassfish
v2ur2 is too buggy and I can't upgrade to 2.1 due to some weird classpath
issues in 2.1 I couldn't resolve.

Is there another good way to create a work queue that in processed in a
limited number of threads which can access my EJB in a transaction and do
some work?

Thanks!


-- 
View this message in context: http://www.nabble.com/Queueing-jobs-for-processing-in-their-own-thread-transaction--tp21795170p21795170.html
Sent from the java.net - glassfish users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
For additional commands, e-mail: users-help_at_glassfish.dev.java.net