Continuous Querying Example
Continuous Querying Example
The client registers a query with the server and chooses whether to receive an initial query result set. After initialization, the query runs continuously against server cache changes, and the client receives events for any changes to the query result set.
Here's a typical use case: A client application displays active stock trades to a screen. The client creates a CQ on the server's trading data set with a WHERE clause specifying "status='active'". The client requests an initial result set for the CQ and initializes its screen display with those results. From then on, the client updates its screen display with the CQ events as they arrive from the server. An entry whose status goes from 'active' to 'inactive' on the server is reported to the client as a query destroy event for the entry, and the client application removes the entry from the active trades display. Newly 'active' entries are reported as additions to the result set and are added to the display.
Running the Example
This example has one client that connects to a cache server, creates a continuous query, and then updates the server with data that changes the query result set. The client reports the updates to standard out. It also has a CQ listener that reports all CQ events, so you can see the effects on the result set. The server uses a cache loader to load any data requested by the client that it does not already have in its cache.
In one session, start the cache server:
$ gfsh start server --name=server_cq --cache-xml-file=xml/CqServer.xml --classpath="$GEMFIRE/SampleCode/quickstart/classes"
The gfsh command starts a cache server in the background, displays the status of the server and some environment information, and then exits to the command prompt.
In the same session, start the CQ client:
$ java -cp "$GEMFIRE/SampleCode/quickstart/classes:$GEMFIRE/lib/server-dependencies.jar" quickstart.CqClient
The client runs a CQ on the server, then creates cache events that modify the CQ result set, prompting the server to send it CQ events.
When the client exits, stop the cache server:
$ gfsh stop server --dir=server_cq
Example Source Files
Program and cache configuration source files for the client and server, including the loader and listener declared in CqServer.xml. (The server is a GemFire cacheserver process and does not have an example source file.)
|CqServer.xml||Configures a cache to serve CQ clients.|
|CqClient.xml||Configures a region as a client region in a client/server cache. The region's pool connects to the cacheserver.|
|CqClient.java||A client that creates and executes continuous queries on the server and waits for the events.|
|SimpleCacheLoader.java||A very simple CacheLoader implementation.|
|SimpleCacheListener.java||A CacheListener that reports cache events.|
|SimpleCqListener.java||A CqListener that reports continuous query events.|