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