geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <david_jen...@yahoo.com>
Subject Re: Start-up classes
Date Wed, 23 Nov 2005 20:29:58 GMT

On Nov 23, 2005, at 12:14 PM, Guglielmo.Lichtner@instinet.com wrote:

>
> We have a whole list of classes whose static initialization needs to 
> happen in
> a specific order. If a thread tries to use any one of them before the 
> class initialization
> is completed, it can cause deadlocks, which will stop the application 
> from starting.
>
> I don't code like this myself, but I inherited this, and my focus here 
> is to get this deployed
> on Geronimo the fastest way possible. It's about money.
>
> I was thinking that your kernel already has a concept of dependencies, 
> and it does have
> to figure out the graph of gbeans so that if A references B that 
> start() is called on B before
> it's called on A.
>
> So maybe I can create two gbeans: one is the one that does the 
> initialization (B), and the other
> is just empty and references it (A) and is part of the j2ee app 
> configuration? Then B should
> get initialized before A?
>
> Guglielmo

hmmm.  I can think of 3 things to try:

1. Include a gbean in the application that calls the startup code.  See 
if it works :-)  There is probably no guarantee that a user call to an 
ejb will be delayed until after your gbean  is started, but perhaps you 
can control that another way.  I would try this anyway to see what 
happens since it is the easiest solution.

2.  Move all of the relevant classes and the startup gbean into another 
configuration and make this configuration a parent (using the "import" 
tag which might change to "parent" in the next few days).  This will 
pretty much guarantee that your startup code is run before any ejb 
containers are deployed.  Your ejb app would then not include these 
classes, since they are in a parent classloader.  You will have to 
think about exactly what can be moved into a parent classloader and 
whether this will work.

3.  Make the startup code self-executing :-)  (I don't know if this 
will work)  Move the actual startup code in each of these classes into 
a static method, and have the static block just call the initializer 
class.  The initializer class would need some well-protected flag so 
the code was only run once, but it would call the static methods in 
each class in the appropriate order.

4. Push on us or submit a patch for all the gbeans we generate from 
j2ee apps to include the ability to specify dependencies.  This would 
be ideal.  Even for ejbs would be great and might not be a lot of work.

thanks
david jencks

>
>
>
> David Jencks <david_jencks@yahoo.com>
>
> 11/23/2005 12:05 PM
> Please respond to user
>        
>         To:        user@geronimo.apache.org
>         cc:        
>         Subject:        Re: Start-up classes
>
>
>
>
>  On Nov 23, 2005, at 11:47 AM, Guglielmo.Lichtner@instinet.com wrote:
>
>  >
>  > I am migrating an application from WebLogic to Geronimo. It consists
>  > of EJBs but it also has a "startup" class,
>  > meaning a class whose main() method has to be invoked before the 
> ejbs
>  > are deployed. Unfortunately this class
>  > performs a huge initialization procedure during class 
> initialization,
>  > and it really has to be done before anything else.
>  >
>  > In WLS there is a <startup> tag in config.xml, and a similar tag in
>  > weblogic-application.xml. To do the same in Geronimo
>  > I am guessing that I can declare a <gbean> inside
>  > geronimo-application.xml. Is that correct?
>
>  Yes.  However, I'm not sure what you need in terms of timing or what
>  you mean by "before the ejbs are deployed".  Our deployment process
>  results in defining gbean instances for each ejb, and the application
>  configuration just has all the gbeans in it.  Without doing more, 
> there
>  is no guarantee that your startup gbean will start before any ejb
>  container gbean.  On the other hand, your custom gbean is fairly
>  certain to get started before any ejb instances are created or any
>  calls to ejbs occur.  If you need your startup code executed before 
> any
>  ejb class is loaded however, we'll need to find another solution.  Can
>  you tell us anything more about what kinds of things you need to do 
> and
>  when?
>
>  thanks
>  david jencks
>  >
>  > Thanks
>  > Guglielmo
>  >
>  > P.S. Your server looks very clean. Thanks for all the work.
>
>  Thanks!!!
>
>
>
>
>
>
>  *****************************************************************
>  <<>>
>
>  In compliance with applicable rules and regulations, Instinet
>  reviews and archives incoming and outgoing email communications,
>  copies of which may be produced at the request of regulators.
>  This message is intended only for the personal and confidential
>  use of the recipients named above. If the reader of this email
>  is not the intended recipient, you have received this email in
>  error and any review, dissemination, distribution or copying is
>  strictly prohibited. If you have received this email in error,
>  please notify the sender immediately by return email and
>  permanently delete the copy you received.
>
>  Instinet accepts no liability for any content contained in the
>  email, or any errors or omissions arising as a result of email
>  transmission. Any opinions contained in this email constitute
>  the sender's best judgment at this time and are subject to change
>  without notice. Instinet does not make recommendations of a
>  particular security and the information contained in this email
>  should not be considered as a recommendation, an offer or a
>  solicitation of an offer to buy and sell securities.
>
>  *****************************************************************


Mime
View raw message