First, thank you Deepal, Michael, Charles and Kouki for your help. Second, after playing with different options, I ended up with a very easy solution.
1. The business logic class implements the interface org.apache.axis2.engine.ServiceLifeCycle 2. Add the class attribute to your service in the services.xml file and point it to the ServiceLifeCycle implementing class: <service name="myService" class="implementingServiceLifeCycleClass"> 3. Implement the two methods: public void startUp(ConfigurationContext configctx, AxisService service) { static initialization, resource handling... } public void shutDown(ConfigurationContext configctx, AxisService service) {...} Both are being called when the service is deployed and stopped, irrespectively of the service scope, and so static initialization can easily be called from startUp(). In my case specifically, I do not use hot-update to the service and so I am not sure if it behaves differently in that case. Cheers, Oded -----Original Message----- From: Charles Galpin [mailto:cgal...@lhsw.com] Sent: Wednesday, February 10, 2010 14:23 To: axis-user@ws.apache.org Subject: Re: Initializing Web Service (Server) before first request received I'm not sure I ever fully understood this, even after reading the docs on the service lifecycle a few times. What I found was that the methods did not fire the same way during hot deployment as they do on startup so don't get fooled by that. The best I came up with was use application scope, restart tomcat whenever I needed to apply a change, and the init method was the best place to put any one time setup code. hth charles On Feb 10, 2010, at 5:23 AM, Doughty, Michael wrote: > In your services.xml file, add 'scope=" application"' to the "service" element, as follows: > > <service name="***your service name***" scope=" application"> > > The service will then be deployable in application mode. > > Now a question to Deepal... will this actually load the implementation class immediately on deployment and thus cause all static initialization in the class to take place? > > I know that application mode will cause Axis2 to treat the implementation class as a singleton and reuse the same instance for each service call, but I was still under the impression that it would require that first service call to be made still. If the class is loaded on deployment or the singleton is constructed prior to the first service call, then that is definitely good news. > > -----Original Message----- > From: Oded Onn [mailto:oded....@mobixell.com] > Sent: Wednesday, February 10, 2010 3:21 AM > To: axis-user@ws.apache.org > Subject: RE: Initializing Web Service (Server) before first request received > > Deepal, > Can you please elaborate a bit more. I am not sure I quite understand > what you mean. > Thanks, > Oded > > -----Original Message----- > From: Deepal Jayasinghe [mailto:dee...@opensource.lk] > Sent: Wednesday, February 10, 2010 00:58 > To: axis-user@ws.apache.org > Subject: Re: Initializing Web Service (Server) before first request > received > > Deploy there service in Application scope. > > Thanks, > Deepal >> >> Hi all, >> >> >> >> I am deploying an AXIS2 web service (server side). >> >> >> >> My problem: The skeleton class (the one that performs all the business >> logic) is read for the first time only when the first request is >> received by the server. It means that the first response takes a >> really long time (up to 20 seconds on a weak machine) since there are >> a lot of initialization I have to perform (static init). >> >> >> >> Solution: I am assuming I can write some sort of a main class that >> will try to call the skeleton class. This is not only ugly but also >> prone to all sorts of errors. Is there a proper way to init my service >> class? I would expect some mechanism to be used, such as utilizing the >> servlet init of the axis servlet. >> >> >> >> Anyone? Thanks! >> >> Oded >> > > -- > Thank you! > > > http://blogs.deepal.org > http://deepal.org >