Apama 10.15.0 | Connecting Apama Applications to External Components | Standard IAF Plug-ins | The File IAF Adapter (JMultiFileTransport) | Opening files for reading | Opening files for reading with parallel processing applications
 
Opening files for reading with parallel processing applications
If your Apama application implements parallel processing, you may want to increase parallelism by processing the incoming events from the File adapter in a separate, private, context, rather than doing everything in the correlator's main context. To request that events from the File adapter are sent to the private context your monitor is running in, the monitor should open the file using the com.apama.file.OpenFileForReadingToContext event instead of OpenFileForReading. The OpenFileForReadingToContext event has a field that contains a standard OpenFileForReading event (see Opening files for reading), in addition to a field specifying the context that file adapter events should go to for processing, (which is usually the context the monitor itself is running in, context.current()), and the name of the channel the File adapter is using. When using the OpenFileForReadingToContext event, the OpenFileForReadingToContext event and all other file adapter events must not be sent directly to the adapter, but rather sent to the correlator's main context, where the adapter service monitor runs. The File adapter's service monitor is responsible for sending the events that are sent from other contexts to the File adapter, and for sending the events received from the File adapter to whichever context should process them (as specified in the OpenFileForReadingToContext event).
See the com.apama.file package in the API Reference for EPL (ApamaDoc) for detailed information on the OpenFileForReadingToContext event.
Here is an example of how the OpenFileForReadingToContext event is used:
com.apama.file.OpenFileForReading openFileForReading :=
new com.apama.file.OpenFileForReading;

... // populate the fields of the openFileForReading event as needed

// Instead of sending openFileForReading to "FILE", wrap it in
// the OpenFileForReadingToContext event and send it to the service
// monitor in the main context.

send com.apama.file.OpenFileForReadingToContext(context.current(),
"FILE", openFileForReading) to mainContext;

com.apama.file.FileHandle readHandle;
on com.apama.file.FileHandle(
transportName=openFileForReading.transportName,
requestId=openFileForReading.requestId):readHandle
{
// Instead of sending to the "FILE" channel, send it to the main
// context
send com.apama.file.ReadLines(openFileForReading.transportName, -1,
readHandle.sessionId, 20) to mainContext;
...
}