On Mon, 2008-08-04 at 15:44 -0700, David Blevins wrote:
> On Aug 4, 2008, at 5:41 AM, Martin Vysny wrote:
> 
> > On Sat, 2008-08-02 at 15:23 -0700, David Blevins wrote:
> >> On Jul 30, 2008, at 12:34 AM, Martin Vysny wrote:
> >>
> >>> Hello,
> >>> currently we are starting OpenEJB as an embedded service (by
> >>> performing a lookup of
> >>> org.apache.openejb.client.LocalInitialContextFactory in JNDI
> >>> InitialContext). Is there a way to perform a clean shutdown of this
> >>> embedded instance? We are using OpenEJB in testing environment and I
> >>> need to shutdown OpenEJB cleanly, for example to stop uncanceled
> >>> timers.
> >>
> >> Hi Martin,
> >>
> >> If you don't mind being tied to some OpenEJB code you could try
> >> something like this:
> >>
> >> import org.apache.openejb.loader.SystemInstance;
> >> import org.apache.openejb.assembler.classic.Assembler;
> >> import org.apache.openejb.assembler.classic.AppInfo;
> >> import org.apache.openejb.OpenEJB;
> >>
> >> public class Shutdown {
> >>     public static void shutdown() throws Exception {
> >>         Assembler assembler =
> >> SystemInstance.get().getComponent(Assembler.class);
> >>         for (AppInfo appInfo : assembler.getDeployedApplications()) {
> >>             assembler.destroyApplication(appInfo.jarPath);
> >>         }
> >>         OpenEJB.destroy();
> >>     }
> >> }
> >>
> >> We could probably wrap this up into a better package and allow it to
> >> be called from the initialContext.close() method so you don't have to
> >> have any OpenEJB code in your test case.
> >>
> >> Let me know if this does the trick for you and we'll get the cleaner
> >> version in.
> >>
> >> -David
> >>
> >
> > Hi David,
> >  thanks for the solution, it works for me! The timers are canceled
> > correctly in our project now. However the shutdown code is not perfect
> > yet. Out of curiosity I tried the following scenario: start OpenEJB,
> > stop it and start it again in the same VM. The following exception was
> > thrown:
> > [stacktrace attachment]
> >
> > This is probably just a corner case (I can't imagine why would anyone
> > need to start, stop and start the OpenEJB again in same VM :), it's  
> > just
> > for the sake of completeness.
> 
> Thanks, Martin!  I'll definitely get that issue cleaned up.
> 

David, I must thank you, for your quick answers and solutions! It's
really a pleasure to work with OpenEJB being backed by such a good
"helpdesk" :-) Thank you!

> In fact, we are adding a close() method to the EJB 3.1 API version  
> (getting a good embeddable EJB container requirement into the EJB 3.1  
> spec is one of my top priorities), so this is good feedback.  You're  
> right on the bleeding edge! :)
> 

This is most interesting! Do you mean that all heavyweight J2EE servers
(which are to be compliant to EJB 3.1) will be available as embeddable
containers as well? Or I misunderstood and the close() method will only
allow remote control of the container?

> My thoughts for adding a close() method was basically for @Singleton  
> beans as the @PreDestroy method is only called when the container is  
> shutdown, but canceling timers is definitely another good reason.  If  
> you see it mentioned in the EJB 3.1 spec, you can know definitively  
> you're responsible :)
> 
Wow, I might get my salary increased :-p
> 
> -David
> 
> 


Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to