If you follow the Printer example in the docs/example directory, you can
see how to implement this. There are 2 Web services, one for the factory
and one for all of the instances. The factory is setup as a singleton
(there is no reference property) and the instance service is set up to
require reference properties. You must send a create message to the
factory first to create an instance, then you can send messages to the
instance as long as you use the correct reference property that was
returned by the factory.

You might be best off just using the Printer code to start with, then
tweeking it to suit your requirements. 

-----Original Message-----
From: Shahzad Younas [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 17, 2005 3:56 PM
To: [email protected]
Subject: RE: Instance Problem..

I've tried the below and was hitting the problem as mentioned in a
previous email.
Why is it, that in my service class, if I just do

XXResource x = (XXResource) getResourceContext().getResource();

Why is this error given? (below). IE why is a resource not found
exceptio nthrown? What steps do I have to do to ensure a resource is
instantiated? Or created somehow? I am supplying a resource ID in my
request message.

I have even played around with the "createInstance" method line in the
getInstance method of the XXHome class. But it doesn't seem to make a
difference.

Please help! Thanks!
Shahzad

--> 03-17-05 23:47:08 DEBUG [http-8080-Processor24]
ProjectResourceBundle:
org.apache.ws.util.i18n.resource::handleGetObject(RELEASE_LCK)
--> 03-17-05 23:47:08 DEBUG [http-8080-Processor24] Lock: Releasing
lock.
--> 03-17-05 23:47:08 DEBUG [http-8080-Processor24]
ProjectResourceBundle:
org.apache.ws.util.i18n.resource::handleGetObject(REMOVING_LCK_FOR_KEY)
--> 03-17-05 23:47:08 DEBUG [http-8080-Processor24] LockManager: 
--> Removing
Lock for key: {http://ShibbolethBrowserSession}ResourceID=1
(type=java.lang.String)
org.apache.ws.resource.ResourceUnknownException
        at
org.apache.ws.resource.impl.AbstractResourceHome.get(AbstractResourceHom
e.ja
va:548)
        at
org.apache.ws.resource.impl.AbstractResourceHome.find(AbstractResourceHo
me.j
ava:306)
        at
org.apache.ws.resource.impl.AbstractResourceContext.getResource(Abstract
Reso
urceContext.java:166)
        at
shibbolethBrowserSession.ShibbolethBrowserSessionService.HSLogin(Shibbol
ethB
rowserSessionService.java:87)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at
org.apache.ws.resource.handler.ResourceHandler.handleRequest(ResourceHan
dler
.java:157)
        at
org.apache.ws.resource.handler.axis.ResourceProvider.invoke(ResourceProv
ider
.java:203)
        at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.j
ava:
32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at
org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
        at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)


-----Original Message-----
From: Ian Springer [mailto:[EMAIL PROTECTED]
Sent: 17 March 2005 17:35
To: [email protected]
Subject: Re: Instance Problem..

Hi Shahzad,

Good question. We've had other questions along these lines, so we
definitely need to clarify this in the tutorial.

The Service is stateless, but for each resource instance, a Resource is
created which is stateful. The Resource contains the ResourcePropertySet
but may also contain additional state (i.e. member vars). Try the
following:

Make the XXXAbstractService class that was generated extend
AbstractPortType. Then you can do something like:

class XXXService
{
   ResponseDocument addOne(RequestDocument)
    {
        getResource().incrementCounter();
      return new ResponseDocument(getResource().getCounter())
    }
}

class XXXResource
{
   private int m_counter;

   public void incrementCounter()
   {
       m_counter++;
   }

   public int getCounter()
   {
       return m_counter;
   }
}

Shahzad Younas wrote:

> Hi,
>  
> I was wondering, lets say I have a method in my service class:
>  
> class Service
> {
>     private int tmp=1;
>  
>     ResponseDocument addOne(RequestDocument)
>     {
>         tmp++;
>         return new ResponseDocument(with a field containing "tmp")
>     }   
> }
>  
> if i call this method once (for a given resource ID) (by call, i mean 
> send a SOAP Request containing the RequestDocument) , i will get a 
> value of 2 returned.
> Ifi call it again, with the same resource ID, will i get a value of 3 
> returned? IE by state, do we mean that all variables for the service 
> are preserved for each resource ID?
>  
> I am abit confused. I know ResourceProperties should hold stateful 
> values, but I need for the service private variables to be maintained
too.
>  
> Thanks
> Shahzad



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to