com.sun.xml.ws.api.server
Class Adapter<TK extends Adapter.Toolkit>

java.lang.Object
  extended by com.sun.xml.ws.api.server.Adapter<TK>
All Implemented Interfaces:
Component, Reconfigurable
Direct Known Subclasses:
HttpAdapter

public abstract class Adapter<TK extends Adapter.Toolkit>
extends Object
implements Reconfigurable, Component

Receives incoming messages from a transport (such as HTTP, JMS, etc) in a transport specific way, and delivers it to WSEndpoint.PipeHead.process(com.sun.xml.ws.api.message.Packet, com.sun.xml.ws.api.server.WebServiceContextDelegate, com.sun.xml.ws.api.server.TransportBackChannel).

Since this class mostly concerns itself with converting a transport-specific message representation to a Packet, the name is the "adapter".

The purpose of this class is twofolds:

  1. To hide the logic of converting a transport-specific connection to a Packet and do the other way around.
  2. To manage thread-unsafe resources, such as WSEndpoint.PipeHead, and Codec.

Adapters are extended to work with each kind of transport, and therefore Adapter class itself is not all that useful by itself --- it merely provides a design template that can be followed.

For managing resources, an adapter uses an object called Adapter.Toolkit (think of it as a tray full of tools that a dentist uses --- trays are identical, but each patient has to get one. You have a pool of them and you assign it to a patient.) Adapter.Toolkit can be extended by derived classes. That actual type is the TK type parameter this class takes.


Nested Class Summary
 class Adapter.Toolkit
          Object that groups all thread-unsafe resources.
 
Field Summary
protected  WSEndpoint<?> endpoint
           
protected  Pool<TK> pool
          Pool of Adapter.Toolkits.
 
Constructor Summary
protected Adapter(WSEndpoint endpoint)
          Creates an Adapter that delivers messages to the given endpoint.
 
Method Summary
protected abstract  TK createToolkit()
          Creates a Adapter.Toolkit instance.
 WSEndpoint<?> getEndpoint()
          Gets the endpoint that this Adapter is serving.
protected  Component getEndpointComponent()
           
protected  Pool<TK> getPool()
          Returns a reference to the pool of Toolkits for this adapter.
<S> S
getSPI(Class<S> spiType)
          Gets the specified SPI.
 void reconfigure()
          The pool instance needs to be recreated to prevent reuse of old Toolkit instances.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

endpoint

protected final WSEndpoint<?> endpoint

pool

protected volatile Pool<TK extends Adapter.Toolkit> pool
Pool of Adapter.Toolkits. Instances of this pool may be replaced at runtime. Therefore, when you take an object out of the pool, you must make sure that it is recycled by the same instance of the pool.

Constructor Detail

Adapter

protected Adapter(WSEndpoint endpoint)
Creates an Adapter that delivers messages to the given endpoint.

Method Detail

getEndpointComponent

protected Component getEndpointComponent()

reconfigure

public void reconfigure()
The pool instance needs to be recreated to prevent reuse of old Toolkit instances.

Specified by:
reconfigure in interface Reconfigurable

getSPI

public <S> S getSPI(Class<S> spiType)
Description copied from interface: Component
Gets the specified SPI.

This method works as a kind of directory service for SPIs, allowing various components to define private contract and talk to each other.

Specified by:
getSPI in interface Component
Returns:
null if such an SPI is not provided by this object.

getEndpoint

public WSEndpoint<?> getEndpoint()
Gets the endpoint that this Adapter is serving.

Returns:
always non-null.

getPool

protected Pool<TK> getPool()
Returns a reference to the pool of Toolkits for this adapter. The pool may be recreated during runtime reconfiguration and this method will then return a reference to a new instance. When you recycle a toolkit, you must make sure that you return it to the same pool instance that you took it from.

Returns:

createToolkit

protected abstract TK createToolkit()
Creates a Adapter.Toolkit instance.

If the derived class doesn't have to add any per-thread state to Adapter.Toolkit, simply implement this as new Toolkit().



Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.