Class StatefulInstanceResolver<T>
- All Implemented Interfaces:
StatefulWebServiceManager<T>
InstanceResolver that looks at JAX-WS cookie header to
determine the instance to which a message will be routed.
See StatefulWebServiceManager for more about user-level semantics.
- Author:
- Kohsuke Kawaguchi, Jitendra Kotamraju (added high availability)
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.sun.xml.ws.developer.StatefulWebServiceManager
StatefulWebServiceManager.Callback<T> -
Field Summary
Fields inherited from class com.sun.xml.ws.server.AbstractMultiInstanceResolver
clazz, owner -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoiddispose()Called byWSEndpointwhenWSEndpoint.dispose()is called.<EPR extends EndpointReference>
EPRExports an object.<EPR extends EndpointReference>
EPRThe same asStatefulWebServiceManager.export(Class, Packet, Object)except that it takesEPRRecipe.<EPR extends EndpointReference>
EPRexport(Class<EPR> epr, WebServiceContext context, T o) Exports an object (forasynchronous web services.)<EPR extends EndpointReference>
EPR<EPR extends EndpointReference>
EPRExports an object.<EPR extends EndpointReference>
EPRExports an object.<EPR extends EndpointReference>
EPRExports an object.Exports an object.voidpostInvoke(Packet request, T servant) Called by the defaultInvokerafter the method call is done.Decides which instance of 'T' serves the given request message.resolve(EndpointReference epr) Checks if the given EPR represents an object that has been exported from this manager.voidSets the "fallback" instance.voidsetTimeout(long milliseconds, StatefulWebServiceManager.Callback<T> callback) Configures timeout for exported instances.voidstart(WSWebServiceContext wsc, WSEndpoint endpoint) Called byWSEndpointwhen it's set up.voidResets the time out timer for the given instance.voidUnexports the given instance.Methods inherited from class com.sun.xml.ws.server.AbstractMultiInstanceResolver
create, dispose, prepareMethods inherited from class com.sun.xml.ws.api.server.AbstractInstanceResolver
findAnnotatedMethod, getResourceInjector, invokeMethodMethods inherited from class com.sun.xml.ws.api.server.InstanceResolver
createDefault, createDefault, createFromInstanceResolverAnnotation, createInvoker, createNewInstance, createSingleton, start
-
Constructor Details
-
StatefulInstanceResolver
-
-
Method Details
-
resolve
Description copied from class:InstanceResolverDecides which instance of 'T' serves the given request message.This method is called concurrently by multiple threads. It is also on a criticail path that affects the performance. A good implementation should try to avoid any synchronization, and should minimize the amount of work as much as possible.
- Specified by:
resolvein classInstanceResolver<T>- Parameters:
request- Always non-null. Represents the request message to be served. The caller may not consume theMessage.
-
postInvoke
Description copied from class:InstanceResolverCalled by the defaultInvokerafter the method call is done. This givesInstanceResolvera chance to do clean up.Alternatively, one could override
InstanceResolver.createInvoker()to create a custom invoker to do this in more flexible way.The default implementation is a no-op.
- Overrides:
postInvokein classInstanceResolver<T>- Parameters:
request- The same request packet given toInstanceResolver.resolve(Packet)method.servant- The object returned from theInstanceResolver.resolve(Packet)method.
-
start
Description copied from class:InstanceResolverCalled byWSEndpointwhen it's set up.This is an opportunity for
InstanceResolverto do a endpoint-specific initialization process.- Overrides:
startin classAbstractMultiInstanceResolver<T>- Parameters:
wsc- TheWebServiceContextinstance to be injected to the user instances (assumingInstanceResolver
-
dispose
public void dispose()Description copied from class:InstanceResolverCalled byWSEndpointwhenWSEndpoint.dispose()is called. This allowsInstanceResolverto do final clean up.This method is guaranteed to be only called once by
WSEndpoint.- Overrides:
disposein classInstanceResolver<T>
-
export
Description copied from interface:StatefulWebServiceManagerExports an object.JAX-WS RI assigns an unique EPR to the exported object, and from now on, messages that are sent to this EPR will be routed to the given object.
The object will be locked in memory, so be sure to
unexportit when it's no longer needed.Notice that the obtained EPR contains the address of the service, which depends on the currently processed request. So invoking this method multiple times with the same object may return different EPRs, if such multiple invocations are done while servicing different requests. (Of course all such EPRs point to the same object, so messages sent to those EPRs will be served by the same instance.)
- Specified by:
exportin interfaceStatefulWebServiceManager<T>- Returns:
W3CEndpointReferencethat identifies this exported object. Always non-null.
-
export
Description copied from interface:StatefulWebServiceManagerExports an object.This method works like
StatefulWebServiceManager.export(Object)except that you can obtain the EPR in your choice of addressing version, by passing in the suitableeprparameter.- Specified by:
exportin interfaceStatefulWebServiceManager<T>- Parameters:
epr- EitherW3CEndpointReferenceorMemberSubmissionEndpointReference. If other types are specified, this method throws anWebServiceException.- Returns:
EndpointReference-subclass that identifies this exported object.
-
export
Description copied from interface:StatefulWebServiceManagerExports an object.This method works like
StatefulWebServiceManager.export(Object)except that you can obtain the EPR in your choice of addressing version, by passing in the suitableeprparameter.- Specified by:
exportin interfaceStatefulWebServiceManager<T>- Parameters:
epr- EitherW3CEndpointReferenceorMemberSubmissionEndpointReference. If other types are specified, this method throws anWebServiceException.o- The object to be exported, whose identity be referenced by the returned EPR.recipe- The additional data to be put into EPR. Can be null.- Returns:
EndpointReference-subclass that identifies this exported object.
-
export
@NotNull public <EPR extends EndpointReference> EPR export(Class<EPR> epr, WebServiceContext context, T o) Description copied from interface:StatefulWebServiceManagerExports an object (forasynchronous web services.)This method works like
StatefulWebServiceManager.export(Class,Object)but it takes an extraWebServiceContextthat represents the request currently being processed by the caller (the JAX-WS RI remembers this when the service processing is synchronous, and that's why this parameter is only needed for asynchronous web services.)Why
WebServiceContextis needed?The obtained EPR contains address, such as host name. The server does not know what its own host name is (or there are more than one of them), so this value is determined by what the current client thinks the server name is. This is why we need to take
WebServiceContext. Pass in the object given toAsyncProvider.invoke(Object, AsyncProviderCallback,WebServiceContext).- Specified by:
exportin interfaceStatefulWebServiceManager<T>
-
export
@NotNull public <EPR extends EndpointReference> EPR export(Class<EPR> adrsVer, @NotNull Packet currentRequest, T o) Description copied from interface:StatefulWebServiceManagerExports an object.This method is not meant for application code. This is for
Tubes that wish to use stateful web service support.- Specified by:
exportin interfaceStatefulWebServiceManager<T>currentRequest- The request that we are currently processing. This is used to infer the address in EPR.- See Also:
-
export
public <EPR extends EndpointReference> EPR export(Class<EPR> adrsVer, @NotNull Packet currentRequest, T o, EPRRecipe recipe) Description copied from interface:StatefulWebServiceManagerThe same asStatefulWebServiceManager.export(Class, Packet, Object)except that it takesEPRRecipe.- Specified by:
exportin interfaceStatefulWebServiceManager<T>recipe- SeeStatefulWebServiceManager.export(Class, Object, EPRRecipe).
-
export
@NotNull public <EPR extends EndpointReference> EPR export(Class<EPR> adrsVer, String endpointAddress, T o) Description copied from interface:StatefulWebServiceManagerExports an object.- Specified by:
exportin interfaceStatefulWebServiceManager<T>endpointAddress- The endpoint address URL. Normally, this information is determined by other inputs, likePacketorWebServiceContext.
-
export
-
unexport
Description copied from interface:StatefulWebServiceManagerUnexports the given instance.JAX-WS will release a strong reference to unexported objects, and they will never receive further requests (requests targeted for those unexported objects will be served by the fallback object.)
- Specified by:
unexportin interfaceStatefulWebServiceManager<T>- Parameters:
o- if null, this method will be no-op.
-
resolve
Description copied from interface:StatefulWebServiceManagerChecks if the given EPR represents an object that has been exported from this manager.This method can be used to have two endpoints in the same application communicate locally.
- Specified by:
resolvein interfaceStatefulWebServiceManager<T>- Returns:
- null if the EPR is not exported from this manager.
-
setFallbackInstance
Description copied from interface:StatefulWebServiceManagerSets the "fallback" instance.When the incoming request does not have the necessary header to distinguish instances of
T, or when the header is present but its value does not correspond with any of the active exported instances known to the JAX-WS, then the JAX-WS RI will try to route the request to the fallback instance.This provides the application an opportunity to perform application specific error recovery.
If no fallback instance is provided, then the JAX-WS RI will send back the fault. By default, no fallback instance is set.
This method can be invoked any time, but most often you'd like to use one instance at the get-go. The following code example illustrates how to do this:
@
WebServiceclass BankAccount { ... continuting from the example in class javadoc ... @Resourcestatic void setManager(StatefulWebServiceManagermanager) { manager.setFallbackInstance(new BankAccount(0) { @Overridevoid deposit(int amount) { putToAuditRecord(id); if(thisLooksBad()) callPolice(); throw newWebServiceException("No such bank account exists"); } }); } }- Specified by:
setFallbackInstancein interfaceStatefulWebServiceManager<T>- Parameters:
o- Can be null.
-
setTimeout
Description copied from interface:StatefulWebServiceManagerConfigures timeout for exported instances.When configured, the JAX-WS RI will internally use a timer so that exported objects that have not received any request for the given amount of minutes will be automatically unexported.
At some point after the time out has occurred for an instance, the JAX-WS RI will invoke the
StatefulWebServiceManager.Callbackto notify the application that the time out has reached. Application then has a choice of either let the object go unexported, ortouchlet the object live for another round of timer interval.If no callback is set, the expired object will automatically unexported.
When you call this method multiple times, its effect on existing instances are unspecified, although deterministic.
- Specified by:
setTimeoutin interfaceStatefulWebServiceManager<T>- Parameters:
milliseconds- The time out interval. Specify 0 to cancel the timeout timer. Note that this only guarantees that time out does not occur at least until this amount of time has elapsed. It does not guarantee that the time out will always happen right after the timeout is reached.callback- application may choose to install a callback to control the timeout behavior.
-
touch
Description copied from interface:StatefulWebServiceManagerResets the time out timer for the given instance.If the object is null, not exported, or already unexported, this method will be no-op.
- Specified by:
touchin interfaceStatefulWebServiceManager<T>
-