| [//]: # " 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. |