The IbisServiceDispatcher can be used to communicate between applications that reside in the same
JVM.
It was developed to provide a means of communication in native Java between the Everest
Knowledge Framework (EKF) and the adapters build using the Ibis Framework.
usage
To use the IbisServiceDispatcher, an instance of the {@link nl.nn.adapterframework.dispatcher.DispatcherManager DispatcherManager}
must be obtained by calling the static method {@link nl.nn.adapterframework.dispatcher.DispatcherManagerFactory#getDispatcherManager() getDispatcherManager()}
on {@link nl.nn.adapterframework.dispatcher.DispatcherManagerFactory DispatcherManagerFactory}. Then:
- to call a service, call {@link nl.nn.adapterframework.dispatcher.DispatcherManager#processRequest(String clientName, String correlationId, String message, HashMap requestContext) processRequest()}on the DispatcherManager
- to provide a service, register a RequestProcessor using
{@link nl.nn.adapterframework.dispatcher.DispatcherManager#register(java.lang.String,nl.nn.adapterframework.dispatcher.RequestProcessor) register()}
ibis-configuration
Use the following code in an Ibis-configuration to provide a service using the service dispatcher:
(Any parameter passed in the requestContext is made available to the Adapter as a PipeLineSession-variable)
<receiver name="JavaListener" returnIfStopped="Service not available">
<listener
className="nl.nn.adapterframework.receivers.JavaListener"
serviceName="ibis4xxx-myadapter"
/>
</receiver>
To call a service provided by the service dispatcher from within a Ibis-configuration, use the JavaSender, like this:
(Any parameter defined with the sender is passed on to the processing service in the requestContext)
<pipe name="PipeCallingService">
<sender
className="nl.nn.adapterframework.pipes.IbisJavaSender"
serviceName="nameOfService" >
<param name="param1" value="valueOfThisParameter"/>
<sender>
<forward name="success" path="READY"/>
</pipe>
operation
The IbisServiceDispatcher provides a map of RequestProcessors. This map is created by applications
that register themselves with the servicedispatcher. Other applications can use the
servicedispatcher to execute a request by a named RequestProcessor. The servicedispatcher
locates the RequestProcessor in its map, set the appropriate classloader context, and executes
the request as if it was done within the application the ReqestProcessor resides.
To be able to do so, the servicedispatcher must be deployed on the classpath of the server, that
is shared by all applications.
installation
To install the IbisServiceDispatcher version 1.1, the file IbisServiceDispatcher-1.1.jar must be
placed on the classpath of the server. Due to the way of operation, it is not sufficient to have
it only in a lib directory of a .war file or similar.