You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Declan Dunleavy <de...@yahoo.com> on 2006/08/23 22:37:01 UTC

Axis2 and Spring: Preserving Service Isolation

!-- DIV {margin:0px;}-->Hi,

I emailed Robert Lazarski to get more information about integrating Axis2 with Spring, to which he helpfully pointed me to the following solution:

> Spring support is in the nightlies:
>
> http://people.apache.org/dist/axis2/nightly/
>
> Its documented here:
>
> http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/xdocs/latest/spring.html

This solution outlined here requires the Spring applicationContext.xml to  live outside the AAR service file in the Axis2 WEB-INF folder and is configured within the web.xml, which is not as modular as I would like.

I was wondering if there's any way to preserve service isolation by incorporating the ApplicationContext.xml / BeanFactory.xml inside the AAR. As I would prefer not to have to update the axis2 WEB-INF folder applicationContext.xml file with updates to the AARs bean classes every time I release new code. I wasn't sure if it was possible but thought I'd ask Robert anyway. He suggested I post the question here.

Thanks in advance for any replies,

Declan










Re: Axis2 and Spring: Preserving Service Isolation

Posted by robert lazarski <ro...@gmail.com>.
OK, by placing the axis2-spring-SNAPSHOT.jar along with the spring.jar
inside the aar seems to work, which is I think a good solution as each
Spring / AAR classloader should then be completely isolated, ie, the
ServiceObjectSupplier will then be taken from the AAR classloader.
More test are needed - especially multiple AAR's - but so far it looks
promising.

Robert
http://www.braziloutsource.com/

On 8/24/06, robert lazarski <ro...@gmail.com> wrote:
> What I'm going to show is experimental. If you have the spring jar in
> WEB-INF/lib and only one AAR, it seems to work. Multiple AAR's still
> need to be tested. Furthermore, I'm hoping axis2-1033 when resolved
> will avoid the need for a Spring init service.
>
> Have your AAR like so:
>
> ./springExample.aar
> ./META-INF
> ./META-INF/MANIFEST.MF
> ./META-INF/services.xml
> ./applicationContext.xml
> ./spring
> ./spring/MyBean.class
> ./spring/MyBeanImpl.class
> ./spring/SpringAwareService.class
> ./spring/SpringInit.class
>
> services.xml is:
>
> <serviceGroup>
>   <service name="SpringInit">
>     <description>
>         Spring init
>     </description>
>     <parameter name="ServiceClass" locked="false">spring.SpringInit</parameter>
>     <operation name="springInit">
>         <messageReceiver
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
>     </operation>
>   </service>
>   <service name="SpringAwareService">
>      <description>
>          simple spring example
>      </description>
>      <parameter name="ServiceObjectSupplier"
> locked="false">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter>
>      <parameter name="SpringBeanName"
> locked="false">springAwareService</parameter>
>      <operation name="getValue">
>          <messageReceiver
> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
>      </operation>
>   </service>
> </serviceGroup>
>
> The Spring init service follows - the rest is based on the tutorial:
>
> package spring;
>
> import org.apache.axiom.om.OMAbstractFactory;
> import org.apache.axiom.om.OMElement;
> import org.apache.axiom.om.OMFactory;
> import org.apache.axiom.om.OMNamespace;
> import org.apache.axiom.om.OMText;
> import org.apache.axis2.engine.Service;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.OperationContext;
> import org.apache.axis2.context.ServiceContext;
> import org.apache.axis2.description.AxisService;
> import org.springframework.context.support.ClassPathXmlApplicationContext;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> public class SpringInit implements Service {
>
>     private static Log logger = LogFactory
>         .getLog(SpringInit .class);
>
>     // The web service
>     public OMElement springInit(OMElement ignore) {
>
>         OMFactory factory=
>             OMAbstractFactory.getOMFactory();
>         OMNamespace payloadNs= factory.createOMNamespace(
>             "http://springExample.org/example1", "example1");
>         OMElement payload =
>             factory.createOMElement("string", payloadNs);
>         OMText response = factory.createOMText("Spring did application
> context init");
>         payload.addChild(response);
>         return payload;
>     }
>
>     /*
>     */
>     public void init(ServiceContext serviceContext) {
>
>         AxisService axisService = serviceContext.getAxisService();
>         ClassLoader classLoader = axisService.getClassLoader();
>
>         ClassPathXmlApplicationContext ctx = new
>         ClassPathXmlApplicationContext(new String[]
> {"applicationContext.xml"}, false);
>             ctx.setClassLoader(classLoader);
>             ctx.refresh();
>         if (logger.isDebugEnabled()) {
>             logger.debug("\n\ninit() set spring classloader via
> axisService.getClassLoader() ... ");
>         }
>
>     }
>
>     public void setOperationContext(OperationContext arg0) {
>
>     }
>
>     public void destroy(ServiceContext arg0) {
>
>     }
> }
>
> You need to call the spring init client for now:
>
> package client;
>
> import java.io.StringWriter;
>
> import javax.xml.stream.XMLOutputFactory;
>
> import org.apache.axiom.om.OMAbstractFactory;
> import org.apache.axiom.om.OMElement;
> import org.apache.axiom.om.OMFactory;
> import org.apache.axiom.om.OMNamespace;
> import org.apache.axis2.addressing.EndpointReference;
> import org.apache.axis2.client.Options;
> import org.apache.axis2.client.ServiceClient;
>
> public class SpringInitClient {
>           /** Access point inside the servlet container. **/
>     private static EndpointReference targetEPR =
>         new EndpointReference(
>                // "http://localhost:8080/axis2/services/springExample");
>                 "http://localhost:9080/axis2/services/SpringInit");
>
>     /**
>      * Simple axis2 client.
>      *
>      * @param args Main
>      */
>     public static void main(String[] args) {
>         try {
>             OMFactory factory = OMAbstractFactory.getOMFactory();
>             OMNamespace omNs = factory.createOMNamespace(
>                         "http://springExample.org/example1", "example1");
>
>             OMElement method = factory.createOMElement("springInit", omNs);
>             OMElement value = factory.createOMElement("Text", omNs);
>             value.addChild(factory.createOMText(value, "Some String "));
>             method.addChild(value);
>
>             ServiceClient serviceClient = new ServiceClient();
>
>             Options options = new Options();
>             serviceClient.setOptions(options);
>             options.setTo(targetEPR);
>
>             //Blocking invocation
>             OMElement result = serviceClient.sendReceive(method);
>
>             StringWriter writer = new StringWriter();
>             result.serialize(XMLOutputFactory.newInstance()
>                     .createXMLStreamWriter(writer));
>             writer.flush();
>
>             System.out.println("Response: " + writer.toString());
>         } catch (Exception ex) {
>             ex.printStackTrace();
>         }
>     }
> }
>
> I'll be working thru the rest of the classloader issues mentioned as
> time permits.
>
> HTH,
> Robert
> http://www.braziloutsource.com/
>
> On 8/24/06, Declan Dunleavy <de...@yahoo.com> wrote:
> >
> >
> > Hi Robert,
> >
> > I am happy to load spring.jar from the Axis2/WEB-INF/lib folder.
> >
> > cheers,
> >
> > Declan
> >
> >
> > ----- Original Message ----
> > From: robert lazarski <ro...@gmail.com>
> > To: axis-user@ws.apache.org
> > Sent: Wednesday, 23 August, 2006 11:53:05 PM
> > Subject: Re: Axis2 and Spring: Preserving Service Isolation
> >
> >
> > Yes, the spring docs are focused so far on the simpler cases.
> > Configuring spring via na AAR isn't documented yet as I need to do
> > more testing, but to asnswer your question I need to know where do you
> > want to load the spring.jar from , inside the AAR or WEB-INF/lib ?
> >
> > If the spring.jar is loaded from WEB-INF/lib , that's no problem and I
> > can show you how to load your applicationContext.xml / beanRef.xml
> > from the aar to configure Spring and you can use the
> > ServiceObjectSupplier method to wire your beans as explained in the
> > docs. One caveat: I need to test this with multiple AAR's, but my
> > initial tests shows that it can work for one AAR .
> >
> > If the spring.jar is loaded inside the AAR , you still can load your
> > applicationContext.xml from the aar. I'm still thinking thru, however,
> > if you wanted to how you could use the ServiceObjectSupplier in that
> > case . That's because the Spring ApplicationContext object, in the
> > spring jar inside the aar case , will not be visible at the
> > WEB-INF/lib level where the AbstractMessageReceiver will attempt to
> > wire the bean. There's probably a solution here but I still need to
> > think it thru.
> >
> > In the case of the latter, perhaps I can get
> > AxisService.getClassLoader() at the ServiceObjectSupplier /
> > AbstracMessageReceiver level to get the spring ApplicationContext
> > object (not the xml file) from the AAR/lib/spring.jar , though that
> > may not work in terms of classloader isolation. Someone such as Dims
> > or Deepal may be able to comment .
> >
> > In any case, the solution at the service level will involve the
> > service implementing the  org.apache.axis2.engine.Service interface
> > and doing the spring config in init() . There is a blocker for the
> > next release, axis2-1033, that when resolved will permit init() to be
> > called on server startup much like a servlet load on startup. My
> > spring inside an aar tests have been calling a service first that
> > configures spring until axis2-1033 is resolved. Once you let me know
> > which scenario you have in mind I'll work with you to get it
> > implemented.
> >
> > Cheers,
> > Robert
> > http://www.braziloutsource.com/
> >
> > On 8/23/06, Declan Dunleavy <de...@yahoo.com> wrote:
> > >
> > >
> > >
> > > Hi,
> > >
> > >
> > > I emailed Robert Lazarski to get more information about integrating Axis2
> > > with Spring, to which he helpfully pointed me to the following solution:
> > >
> > > > Spring support is in the nightlies:
> > > >
> > > > http://people.apache.org/dist/axis2/nightly/
> > > >
> > > > Its documented here:
> > > >
> > > >
> > >
> > http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/xdocs/latest/spring.html
> > >
> > > This solution outlined here requires the Spring applicationContext.xml to
> > > live outside the AAR service file in the Axis2 WEB-INF folder and is
> > > configured within the web.xml, which is not as modular as I would like.
> > >
> > > I was wondering if there's any way to preserve service isolation by
> > > incorporating the ApplicationContext.xml / BeanFactory.xml inside the AAR.
> > > As I would prefer not to have to update the axis2 WEB-INF folder
> > > applicationContext.xml file with updates to the AARs bean classes every
> > time
> > > I release new code. I wasn't sure if it was possible but thought I'd ask
> > > Robert anyway. He suggested I post the question here.
> > >
> > > Thanks in advance for any replies,
> > >
> > > Declan
> > >
> > >
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-user-help@ws.apache.org
> >
> >
> >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Axis2 and Spring: Preserving Service Isolation

Posted by robert lazarski <ro...@gmail.com>.
What I'm going to show is experimental. If you have the spring jar in
WEB-INF/lib and only one AAR, it seems to work. Multiple AAR's still
need to be tested. Furthermore, I'm hoping axis2-1033 when resolved
will avoid the need for a Spring init service.

Have your AAR like so:

./springExample.aar
./META-INF
./META-INF/MANIFEST.MF
./META-INF/services.xml
./applicationContext.xml
./spring
./spring/MyBean.class
./spring/MyBeanImpl.class
./spring/SpringAwareService.class
./spring/SpringInit.class

services.xml is:

<serviceGroup>
  <service name="SpringInit">
    <description>
        Spring init
    </description>
    <parameter name="ServiceClass" locked="false">spring.SpringInit</parameter>
    <operation name="springInit">
        <messageReceiver
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </operation>
  </service>
  <service name="SpringAwareService">
     <description>
         simple spring example
     </description>
     <parameter name="ServiceObjectSupplier"
locked="false">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter>
     <parameter name="SpringBeanName"
locked="false">springAwareService</parameter>
     <operation name="getValue">
         <messageReceiver
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
     </operation>
  </service>
</serviceGroup>

The Spring init service follows - the rest is based on the tutorial:

package spring;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMText;
import org.apache.axis2.engine.Service;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.description.AxisService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SpringInit implements Service {
	
    private static Log logger = LogFactory
	.getLog(SpringInit .class);

    // The web service
    public OMElement springInit(OMElement ignore) {

        OMFactory factory=
            OMAbstractFactory.getOMFactory();
        OMNamespace payloadNs= factory.createOMNamespace(
            "http://springExample.org/example1", "example1");
        OMElement payload =
            factory.createOMElement("string", payloadNs);
        OMText response = factory.createOMText("Spring did application
context init");
        payload.addChild(response);
        return payload;
    }

    /*
    */
    public void init(ServiceContext serviceContext) {

        AxisService axisService = serviceContext.getAxisService();
        ClassLoader classLoader = axisService.getClassLoader();

        ClassPathXmlApplicationContext ctx = new
        ClassPathXmlApplicationContext(new String[]
{"applicationContext.xml"}, false);
            ctx.setClassLoader(classLoader);
            ctx.refresh();
        if (logger.isDebugEnabled()) {
            logger.debug("\n\ninit() set spring classloader via
axisService.getClassLoader() ... ");
        }

    }

    public void setOperationContext(OperationContext arg0) {

    }

    public void destroy(ServiceContext arg0) {

    }
}

You need to call the spring init client for now:

package client;

import java.io.StringWriter;

import javax.xml.stream.XMLOutputFactory;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;

public class SpringInitClient {
	  /** Access point inside the servlet container. **/
    private static EndpointReference targetEPR =
        new EndpointReference(
               // "http://localhost:8080/axis2/services/springExample");
                "http://localhost:9080/axis2/services/SpringInit");

    /**
     * Simple axis2 client.
     *
     * @param args Main
     */
    public static void main(String[] args) {
        try {
            OMFactory factory = OMAbstractFactory.getOMFactory();
            OMNamespace omNs = factory.createOMNamespace(
            		"http://springExample.org/example1", "example1");

            OMElement method = factory.createOMElement("springInit", omNs);
            OMElement value = factory.createOMElement("Text", omNs);
            value.addChild(factory.createOMText(value, "Some String "));
            method.addChild(value);

            ServiceClient serviceClient = new ServiceClient();

            Options options = new Options();
            serviceClient.setOptions(options);
            options.setTo(targetEPR);

            //Blocking invocation
            OMElement result = serviceClient.sendReceive(method);

            StringWriter writer = new StringWriter();
            result.serialize(XMLOutputFactory.newInstance()
                    .createXMLStreamWriter(writer));
            writer.flush();

            System.out.println("Response: " + writer.toString());
        } catch (Exception ex) {
            ex.printStackTrace();       	
        }
    }
}

I'll be working thru the rest of the classloader issues mentioned as
time permits.

HTH,
Robert
http://www.braziloutsource.com/

On 8/24/06, Declan Dunleavy <de...@yahoo.com> wrote:
>
>
> Hi Robert,
>
> I am happy to load spring.jar from the Axis2/WEB-INF/lib folder.
>
> cheers,
>
> Declan
>
>
> ----- Original Message ----
> From: robert lazarski <ro...@gmail.com>
> To: axis-user@ws.apache.org
> Sent: Wednesday, 23 August, 2006 11:53:05 PM
> Subject: Re: Axis2 and Spring: Preserving Service Isolation
>
>
> Yes, the spring docs are focused so far on the simpler cases.
> Configuring spring via na AAR isn't documented yet as I need to do
> more testing, but to asnswer your question I need to know where do you
> want to load the spring.jar from , inside the AAR or WEB-INF/lib ?
>
> If the spring.jar is loaded from WEB-INF/lib , that's no problem and I
> can show you how to load your applicationContext.xml / beanRef.xml
> from the aar to configure Spring and you can use the
> ServiceObjectSupplier method to wire your beans as explained in the
> docs. One caveat: I need to test this with multiple AAR's, but my
> initial tests shows that it can work for one AAR .
>
> If the spring.jar is loaded inside the AAR , you still can load your
> applicationContext.xml from the aar. I'm still thinking thru, however,
> if you wanted to how you could use the ServiceObjectSupplier in that
> case . That's because the Spring ApplicationContext object, in the
> spring jar inside the aar case , will not be visible at the
> WEB-INF/lib level where the AbstractMessageReceiver will attempt to
> wire the bean. There's probably a solution here but I still need to
> think it thru.
>
> In the case of the latter, perhaps I can get
> AxisService.getClassLoader() at the ServiceObjectSupplier /
> AbstracMessageReceiver level to get the spring ApplicationContext
> object (not the xml file) from the AAR/lib/spring.jar , though that
> may not work in terms of classloader isolation. Someone such as Dims
> or Deepal may be able to comment .
>
> In any case, the solution at the service level will involve the
> service implementing the  org.apache.axis2.engine.Service interface
> and doing the spring config in init() . There is a blocker for the
> next release, axis2-1033, that when resolved will permit init() to be
> called on server startup much like a servlet load on startup. My
> spring inside an aar tests have been calling a service first that
> configures spring until axis2-1033 is resolved. Once you let me know
> which scenario you have in mind I'll work with you to get it
> implemented.
>
> Cheers,
> Robert
> http://www.braziloutsource.com/
>
> On 8/23/06, Declan Dunleavy <de...@yahoo.com> wrote:
> >
> >
> >
> > Hi,
> >
> >
> > I emailed Robert Lazarski to get more information about integrating Axis2
> > with Spring, to which he helpfully pointed me to the following solution:
> >
> > > Spring support is in the nightlies:
> > >
> > > http://people.apache.org/dist/axis2/nightly/
> > >
> > > Its documented here:
> > >
> > >
> >
> http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/xdocs/latest/spring.html
> >
> > This solution outlined here requires the Spring applicationContext.xml to
> > live outside the AAR service file in the Axis2 WEB-INF folder and is
> > configured within the web.xml, which is not as modular as I would like.
> >
> > I was wondering if there's any way to preserve service isolation by
> > incorporating the ApplicationContext.xml / BeanFactory.xml inside the AAR.
> > As I would prefer not to have to update the axis2 WEB-INF folder
> > applicationContext.xml file with updates to the AARs bean classes every
> time
> > I release new code. I wasn't sure if it was possible but thought I'd ask
> > Robert anyway. He suggested I post the question here.
> >
> > Thanks in advance for any replies,
> >
> > Declan
> >
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Axis2 and Spring: Preserving Service Isolation

Posted by Declan Dunleavy <de...@yahoo.com>.
Hi Robert,

I am happy to load spring.jar from the Axis2/WEB-INF/lib folder.

cheers,

Declan

----- Original Message ----
From: robert lazarski <ro...@gmail.com>
To: axis-user@ws.apache.org
Sent: Wednesday, 23 August, 2006 11:53:05 PM
Subject: Re: Axis2 and Spring: Preserving Service Isolation

Yes, the spring docs are focused so far on the simpler cases.
Configuring spring via na AAR isn't documented yet as I need to do
more testing, but to asnswer your question I need to know where do you
want to load the spring.jar from , inside the AAR or WEB-INF/lib ?

If the spring.jar is loaded from WEB-INF/lib , that's no problem and I
can show you how to load your applicationContext.xml / beanRef.xml
from the aar to configure Spring and you can use the
ServiceObjectSupplier method to wire your beans as explained in the
docs. One caveat: I need to test this with multiple AAR's, but my
initial tests shows that it can work for one AAR .

If the spring.jar is loaded inside the AAR , you still can load your
applicationContext.xml from the aar. I'm still thinking thru, however,
if you wanted to how you could use the ServiceObjectSupplier in that
case . That's because the Spring ApplicationContext object, in the
spring jar inside the aar case , will not be visible at the
WEB-INF/lib level where the AbstractMessageReceiver will attempt to
wire the bean. There's probably a solution here but I still need to
think it thru.

In the case of the latter, perhaps I can get
AxisService.getClassLoader() at the ServiceObjectSupplier /
AbstracMessageReceiver level to get the spring ApplicationContext
object (not the xml file) from the AAR/lib/spring.jar , though that
may not work in terms of classloader isolation. Someone such as Dims
or Deepal may be able to comment .

In any case, the solution at the service level will involve the
service implementing the  org.apache.axis2.engine.Service interface
and doing the spring config in init() . There is a blocker for the
next release, axis2-1033, that when resolved will permit init() to be
called on server startup much like a servlet load on startup. My
spring inside an aar tests have been calling a service first that
configures spring until axis2-1033 is resolved. Once you let me know
which scenario you have in mind I'll work with you to get it
implemented.

Cheers,
Robert
http://www.braziloutsource.com/

On 8/23/06, Declan Dunleavy <de...@yahoo.com> wrote:
>
>
>
> Hi,
>
>
> I emailed Robert Lazarski to get more information about integrating Axis2
> with Spring, to which he helpfully pointed me to the following solution:
>
> > Spring support is in the nightlies:
> >
> > http://people.apache.org/dist/axis2/nightly/
> >
> > Its documented here:
> >
> >
> http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/xdocs/latest/spring.html
>
> This solution outlined here requires the Spring applicationContext.xml to
> live outside the AAR service file in the Axis2 WEB-INF folder and is
> configured within the web.xml, which is not as modular as I would like.
>
> I was wondering if there's any way to preserve service isolation by
> incorporating the ApplicationContext.xml / BeanFactory.xml inside the AAR.
> As I would prefer not to have to update the axis2 WEB-INF folder
> applicationContext.xml file with updates to the AARs bean classes every time
> I release new code. I wasn't sure if it was possible but thought I'd ask
> Robert anyway. He suggested I post the question here.
>
> Thanks in advance for any replies,
>
> Declan
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org






Re: Axis2 and Spring: Preserving Service Isolation

Posted by robert lazarski <ro...@gmail.com>.
Yes, the spring docs are focused so far on the simpler cases.
Configuring spring via na AAR isn't documented yet as I need to do
more testing, but to asnswer your question I need to know where do you
want to load the spring.jar from , inside the AAR or WEB-INF/lib ?

If the spring.jar is loaded from WEB-INF/lib , that's no problem and I
can show you how to load your applicationContext.xml / beanRef.xml
from the aar to configure Spring and you can use the
ServiceObjectSupplier method to wire your beans as explained in the
docs. One caveat: I need to test this with multiple AAR's, but my
initial tests shows that it can work for one AAR .

If the spring.jar is loaded inside the AAR , you still can load your
applicationContext.xml from the aar. I'm still thinking thru, however,
if you wanted to how you could use the ServiceObjectSupplier in that
case . That's because the Spring ApplicationContext object, in the
spring jar inside the aar case , will not be visible at the
WEB-INF/lib level where the AbstractMessageReceiver will attempt to
wire the bean. There's probably a solution here but I still need to
think it thru.

In the case of the latter, perhaps I can get
AxisService.getClassLoader() at the ServiceObjectSupplier /
AbstracMessageReceiver level to get the spring ApplicationContext
object (not the xml file) from the AAR/lib/spring.jar , though that
may not work in terms of classloader isolation. Someone such as Dims
or Deepal may be able to comment .

In any case, the solution at the service level will involve the
service implementing the  org.apache.axis2.engine.Service interface
and doing the spring config in init() . There is a blocker for the
next release, axis2-1033, that when resolved will permit init() to be
called on server startup much like a servlet load on startup. My
spring inside an aar tests have been calling a service first that
configures spring until axis2-1033 is resolved. Once you let me know
which scenario you have in mind I'll work with you to get it
implemented.

Cheers,
Robert
http://www.braziloutsource.com/

On 8/23/06, Declan Dunleavy <de...@yahoo.com> wrote:
>
>
>
> Hi,
>
>
> I emailed Robert Lazarski to get more information about integrating Axis2
> with Spring, to which he helpfully pointed me to the following solution:
>
> > Spring support is in the nightlies:
> >
> > http://people.apache.org/dist/axis2/nightly/
> >
> > Its documented here:
> >
> >
> http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/xdocs/latest/spring.html
>
> This solution outlined here requires the Spring applicationContext.xml to
> live outside the AAR service file in the Axis2 WEB-INF folder and is
> configured within the web.xml, which is not as modular as I would like.
>
> I was wondering if there's any way to preserve service isolation by
> incorporating the ApplicationContext.xml / BeanFactory.xml inside the AAR.
> As I would prefer not to have to update the axis2 WEB-INF folder
> applicationContext.xml file with updates to the AARs bean classes every time
> I release new code. I wasn't sure if it was possible but thought I'd ask
> Robert anyway. He suggested I post the question here.
>
> Thanks in advance for any replies,
>
> Declan
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org