Output Filtering Sample

This sample demonstrates the use of output filtering to allow multiple StreamBase client applications to connect to an instance
of StreamBase Server, where each client receives only the tuples that match a keyword associated with that client.

The client applications in this sample connect to an instance of StreamBase Server, then send their connection ID and a keyword.
The filter expression in the output stream only allows tuples with the keyword associated with the connection ID to be sent
to the clients.

Note

The Java code in this sample is delivered only in source code form. To build the code, you must load the sample into StreamBase
Studio, which automatically builds the Java code.

This Sample's Files

The output filtering sample consists of:

Three StreamBase applications that illustrate three approaches that achieve the same results:

outputfilter.sbapp

This version of the application uses only StreamBase operators and functions. For a large number of clients, this approach
is somewhat less efficient than the versions of the application that use custom Java functions.

outputfilter-calljava.sbapp

This version of the application uses custom Java functions to maintain the association between connection IDs and keywords.

outputfilter-jfun.sbapp

This version of the application also uses custom Java functions to maintain the association between connection IDs and keywords.
In this case, the functions are named in the configuration file so they can be called directly, rather than with the calljava function.

The Java source file OFilterClient.java has the dequeuing client and ClientAccess.java has the filter function used. These files are placed in the java-src folder, and are built automatically by StreamBase Studio.

Running the Outputfiltering Sample Application

The Java version of this sample is intended to be run in StreamBase Studio, and has no provision for running at the command
line. Experienced Java developers can do so by adding the java-bin directory to the classpath.

Introduction and Setup

When you load this sample in Studio, the sample places two launchers for the Java dequeuer programs into Studio's Run History list. The overall procedure is:

Run the first StreamBase application, outputfilter.sbapp, in Studio. The StreamBase application accepts input from the Manual Input and shows output in the Output Streams view as
normal.

Use the launcher in the Run History list to run the OFilterClient Red and Java OFilterClient Blue client programs at the same time the StreamBase application is running.

Send tuples to the application via the Manual Input view.

Watch the results in the Console views for the two client programs.

Run the Java client launchers from the Run History list using one of the following methods:

From the Studio top-level menu, invoke Run → Run History, and select the specified launcher from the list.

Open the Run Configurations dialog, select the specified launcher from the Java application category, then click Run.

Click the down-arrow next to the Run button in the Studio toolbar, and select the specified launcher from the list.

The Java client launchers placed in the Run History list presume that Studio is running the StreamBase application on port 10000, which is the installed default port for StreamBase
application launches. Before you proceed, use these steps to confirm that port 10000 is the default launch port:

Open Windows → Preferences.

In the left side navigation column, open StreamBase Studio → Test/Debug.

Confirm that the Default Port setting is 10000. If not, change it to 10000.

Click OK.

Steps to Run in Studio

Follow these steps to run this sample in StreamBase Studio:

In the Project Explorer, double-click to open the outputfilter.sbapp application. Make sure the application is the currently active tab in the EventFlow Editor.

Click the Run button. This opens the SB Test/Debug perspective and starts the application.

Open the Run History list as described in Introduction and Setup, and select the OFilterClient Blue launcher. This runs the ClientAccess.java program, which connects to outputfilter.sbapp.

Open the Run History list again, and run the OFilterClient Red launcher.

In the Manual Input view, select the in stream and enter val=1 and keyword=yellow.

Notice that there are no changes in the Console view.

In the Manual Input view, enter val=2 and keyword=red.

The Console view switches to the console for OFilterClient Red and shows output similar to:

Read tuple: 2,5FC5E0D15F3D55266007922477871768

The long hexadecimal value is different for each run of the program.

In the Manual Input view, enter val=3 and keyword=purple.

Notice that there are no changes in the Console view.

In the Manual Input view, enter val=4 and keyword=blue.

The Console view switches to the console for OFilterClient Blue and shows output similar to:

Read tuple: 4,0D2401453C0A0D02A0A7C51B15054F40

Continue entering tuples to confirm that keyword=red goes to one Console window, keyword=blue to another, and any other keyword
has no Console output.

When done, press F9 or click the Stop Running Application button. This closes both the StreamBase application and the two dequeuer programs.

Repeat steps 2 through 10 for each of the two other StreamBase applications. These applications achieve the same ends, but
use a Java class to implement the selection logic.

Importing This Sample into StreamBase Studio

In StreamBase Studio, import this sample with the following steps:

From the top menu, click File → Load StreamBase Sample.

Select this application from the Applications list.

Click OK.

StreamBase Studio creates a project for each sample.

Sample Location

When you load the sample into StreamBase Studio, Studio copies the sample project's files to your Studio workspace, which
is normally part of your home directory, with full access rights.

Important

Load this sample in StreamBase Studio, and thereafter use the Studio workspace copy of the sample to run and test it, even
when running from the command prompt.

Using the workspace copy of the sample avoids permission problems. The default workspace location for this sample is: