On Dec 31, 2008, at 5:30 AM, uglything wrote:
PS : I wish you all a nice new year eve !!!
Happy new year to you!!
PPS : I'm trying to make my managers switch to OpenEJB 3.1, I'm
particularly
interrested in the Singleton mechanism. Many thanks to the OpenEJB
crew for
it's amazing work at sticking to both the EJB specs and user's
expectations
!!!
Thank you very much. We do our best not to make extra work for
users. I like to think we're having a positive impact on the EJB spec
itself as well. Time will tell if people like some of the things
we've been able to get added (like the embedded ejb container
stuff ... or most recently a simple annotation @StatefulTimeout so
that you can specify the timeout of your stateful session bean in a
portable way. Look for that in the next 3.1 public draft).
My application contains stateless session beans with @Timeout.
Everything runs smoothly, until I try to stop the application.
After some debugging, it appeared that two non-daemon threads are
still up
after OpenEJB has returned from its shutting down routine. (they are
named
pool-1-thread-1 and pool-1-thread-2 for me). I think they prevent
the VM
from exiting.
These two threads seem to be started from the timer service.
A snipplet of the code I found in
org.apache.openejb.core.timer.EjbTimerServiceImpl:
public EjbTimerServiceImpl(DeploymentInfo deployment) {
this(deployment, getDefaultTransactionManager(),
getDefaultExecutor(), new
MemoryTimerStore(getDefaultTransactionManager()),
1);
}
public static Executor getDefaultExecutor() {
Executor executor =
SystemInstance.get().getComponent(Executor.class);
if (executor == null) {
executor = Executors.newFixedThreadPool(10);
SystemInstance.get().setComponent(Executor.class,
executor);
}
return executor;
}
---
I couldn't find any code shutting down the executor.
To work around this problem, I add in a ServletContextListener the
following
specs-breaking code:
public void contextDestroyed(ServletContextEvent arg0) {
try {
((ThreadPoolExecutor)
EjbTimerServiceImpl.getDefaultExecutor()).shutdown();
} catch (Throwable t) {
// We did what we could...
}
}
---
As expected, the server shuts down smoothly now.
I'm not sure if this is a bug or not, i might have misconfigured
smthg.
This is definitely a bug.
If we added that that shutdown call to a "finalize" method in
EjbTimerServiceImpl that might do the trick. Easy change to make but
harder to test. Seems like you're already setup, if you wanted to
give that a try and give a thumbs up or thumbs down, that would be
fantastic -- would be a big help and we love new contributors. If
not, I can add that in a push up some binaries that you can test out.
Added a bug report for it: https://issues.apache.org/jira/browse/OPENEJB-983
Either way, thanks for finding this!
-David