Class Adapter<TK extends Adapter.Toolkit>
- java.lang.Object
-
- com.sun.xml.ws.api.server.Adapter<TK>
-
- All Implemented Interfaces:
Component
,Reconfigurable
- Direct Known Subclasses:
HttpAdapter
,TCPAdapter
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 toWSEndpoint.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:
-
To hide the logic of converting a transport-specific connection
to a
Packet
and do the other way around. -
To manage thread-unsafe resources, such as
WSEndpoint.PipeHead
, andCodec
.
Adapter
s are extended to work with each kind of transport, and thereforeAdapter
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 theTK
type parameter this class takes.- Author:
- Kohsuke Kawaguchi
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
Adapter.Toolkit
Object that groups all thread-unsafe resources.
-
Field Summary
Fields Modifier and Type Field Description protected WSEndpoint<?>
endpoint
protected Pool<TK>
pool
Pool ofAdapter.Toolkit
s.
-
Constructor Summary
Constructors Modifier Constructor Description protected
Adapter(WSEndpoint endpoint)
Creates anAdapter
that delivers messages to the given endpoint.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract TK
createToolkit()
Creates aAdapter.Toolkit
instance.WSEndpoint<?>
getEndpoint()
Gets the endpoint that thisAdapter
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.
-
-
-
Field Detail
-
endpoint
protected final WSEndpoint<?> endpoint
-
pool
protected volatile Pool<TK extends Adapter.Toolkit> pool
Pool ofAdapter.Toolkit
s. 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 anAdapter
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 interfaceReconfigurable
-
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.
-
getEndpoint
public WSEndpoint<?> getEndpoint()
Gets the endpoint that thisAdapter
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 aAdapter.Toolkit
instance.If the derived class doesn't have to add any per-thread state to
Adapter.Toolkit
, simply implement this asnew Toolkit()
.
-
-