The IbisServiceDispatcher can be used to communicate between applications that reside in the same JVM or to communicate with a DLL. 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.
To use the IbisServiceDispatcher, an instance of the DispatcherManager must be obtained by calling the static method getDispatcherManager() on DispatcherManagerFactory. Then:- to call a service, call processRequest(String clientName, String correlationId, String message, HashMap requestContext) on the DispatcherManager
- to provide a service, register a RequestProcessor using register(RequestProcessor)
(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>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. To install the IbisServiceDispatcher, the library 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.