- Index

< Previous |  | Next >

# Output Filtering Sample

## Introduction

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.

## Importing This Sample into StreamBase Studio

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

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

- Select this application from the Applications list.

- Click OK.

StreamBase Studio creates a project for each sample.

## 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:

1. Open Windows → Preferences.

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

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

4. Click OK.

### Steps to Run

Follow these steps to run this sample in StreamBase Studio:

1. In the Project Explorer view, open the sample you just loaded.

   If you see red marks on a project folder, wait a moment for the project to load its features.

   If the red marks do not resolve themselves after a minute, select the project, right-click, and select Maven → Update Project from the context menu.

2. Open the `src/main/eventflow/`packageName`` folder.

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

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

5. 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`.

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

7. 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.

8. 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.

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

   Notice that there are no changes in the Console view.

10. 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

11. 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.

12. When done, press F9 or click the Terminate EventFlow Fragment 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.

## 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.

- A server configuration file, `sbd.sbconf`, that maps the custom Java functions.

## 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:

    studio-workspace/sample_outputfiltering

See Default Installation Directories for the default location of `studio-workspace` on your system.