axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Amila Suriarachchi <amilasuriarach...@gmail.com>
Subject Re: Deploying multiple spring service axis2 archives(AAR)
Date Sat, 07 Jan 2012 11:47:34 GMT
On Fri, Jan 6, 2012 at 10:35 AM, Kishanthan Thangarajah <
kshanth2101@gmail.com> wrote:

> Hi devs,
>
> I have been looking at deploying multiple spring services as AAR's within
> a single axis2 container. Current issue with adding multiple service is
> that when we add a second service, the first one does not work or rather
> the deployment of the second service breaks the first. This is because of
> the static nature of spring ApplicationContext variable in
> ApplicationContextHolder class. According to documentations [1], the spring
> framework for a service is initialized via a service class which implements
> the ServiceLifeCycle interface. So the startUp method of this class will be
> called by the axis2 service builder. In this method only, the spring
> application context is created with the applicationContext.xml file. The
> beans defined in the context file will be defined in this context and the
> context will be set to the static ApplicationContext variable of the
> ApplicationContextHolder class [2]. When a second service deployed the same
> operations mentioned above will happen and finally the spring
> ApplicationContext of the first service will get replaced by the second
> service's ApplicationContext. So if you invoke the second service it works,
> but when invoking the first service, it gives an error as no defined beans
> are found.
>
> We have a workaround for this issue in axis2 by adding the axis2-spring
> jar and spring framework jars in /lib directory of each service. So for
> each service, we get a separate spring framework and spring application
> context loaded. So we will not get into the issue as each service will have
> its own application context holder. I think that this is not a correct way
> and I feel that there has to be better solution other than above mentioned.
>
> Requirements I see for a better solution are,
>
> 1) Currently the users has to initialize spring context via implementing
> ServiceLifeCyle. But the spring initialization part should be moved to
> axis2 and let users only deal with the business logic of the service rather
> than depending on loading spring first.
>
> 2) Having separate spring framework loaded for each service is not a good
> idea if we are deploying a large amount of services. Because we will have
> to include spring jars and axis2-spring jar in service's classpath for
> every service.
>
> So as a solution, I think we can write a deployer which takes control of
> spring service (AAR) deployment and in this we can create the spring
> application context for the spring service and add this as a parameter to
> the service. So for each service deployed, there will be a new spring
> context initialized and it will be isolated from other spring service's
> application context. When the service later invoked we can get the spring
> application context for this service by getting the parameter and then
> retrieve the service object(spring beans) from this context. Also we will
> not have to include spring framework for each service we are deploying.
>
> WDYT?
>

+1.

I think this has not been implemented using a custom deployer because it
has not been there at that time.

thanks,
Amila.

>
> Thanks,
> Kishanthan
>
> [1] http://axis.apache.org/axis2/java/core/docs/spring.html#a262
> [2]
> http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/spring/src/org/apache/axis2/extensions/spring/receivers/ApplicationContextHolder.java
>



-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Mime
View raw message