| [//]: # " Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved. " |
| [//]: # " " |
| [//]: # " This program and the accompanying materials are made available under the " |
| [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " |
| [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " |
| [//]: # " " |
| [//]: # " SPDX-License-Identifier: BSD-3-Clause " |
| |
| Message Streaming Jersey Example |
| ================================ |
| |
| An example demonstrating how Server Sent Events (SSE) Jersey support can |
| be used to create a message aggregating and streaming resource. The |
| example also demonstrates how to consume data provided by a [Twitter |
| Streaming API](https://dev.twitter.com/docs/streaming-apis) using Jersey |
| `ChunkedInput` client-side support. |
| |
| Contents |
| -------- |
| |
| The example consists of a Swing GUI client application and a server-side |
| application deployed on a [Grizzly container](https://projects.eclipse.org/projects/ee4j.grizzly). |
| |
| The Swing client application opens in a single window split into |
| multiple configuration panels. The top-left panel allows to select which |
| aggregators should be executed. It is possible to select a twitter |
| message aggregator and/or a fake test message aggregator. The panel |
| below provides means for adding new keywords tracked by the Twitter |
| message aggregator (if enabled). All actively tracked keywords are |
| listed in the right-side list box which supports removal of the keys |
| using a `Delete` key on your keyboard. The last panel in the Swing |
| client window contains a Start/Stop button for starting or stopping the |
| selected aggregators as well as a text area for displaying the messages |
| that the aggregators have sent to the message aggregating resource |
| deployed on the server-side of the application. |
| |
| The server side part of the application consists of a message |
| aggregating JAX-RS resource and a simple HTML page that includes a |
| browser SSE client written in Javascript as well as a basic CSS |
| stylesheet. The SSE Javascript client connects to the JAX-RS message |
| aggregating resource and transforms the streamed message data into HTML |
| code that is rendered by the browser. The mapping of the URI path space |
| of the server-side part of the application is presented in the following |
| table: |
| |
| URI path | Resource class | HTTP methods |
| ---------------------------------- | ----------------------- | -------------- |
| `/aggregator-api/message/stream` | MessageStreamResource | GET, PUT |
| |
| Application is programmatically configured to run on Grizzly container |
| under base paths `aggregator` and `aggregator-api`. |
| |
| Running the Example |
| ------------------- |
| |
| Before running the example, you need to copy the |
| `twitter-api.properties` file available in the root directory of this |
| example to your user home directory. Once done, you need to edit the |
| file in your user home directory and provide a valid twitter account |
| credentials. This step is necessary as the Twitter streaming API is |
| protected using HTTP Basic Authentication mechanism and only an |
| authenticated twitter account owner can access the API. The |
| TwitterAggregator class in the example will use the credentials provided |
| in the file to access the Twitter Streaming API. |
| |
| Once you have set up your Twitter credentials, you're ready to run the |
| example. You can run the example by executing a main class via maven as |
| follows: |
| |
| > mvn clean compile exec:java |
| |
| This deploys the current example as well as it starts the Swing client |
| application. You should be able to see the main Swing application window |
| open as you run the application as well as you should see the note in |
| the command line stating that the Grizzly container has started and the |
| server side part of the application has been deployed. |
| |
| After successful deployment, you should be able to access the browser |
| SSE client page at |
| |
| - <http://localhost:8080/aggregator/index.html> |
| |
| To see the raw SSE event stream, you may also point your browser |
| directly at the |
| |
| - [MessageStreamResource](http://localhost:8080/aggregator-api/message/stream) |
| |
| Note that you first need to start the message aggregators via the Swing |
| client application in order to be able to receive any SSE events from |
| the message streaming resource. |