Note | |
---|---|
Sample applications are now maintained in the Spring Data GemFire Examples repository. |
The Spring Data GemFire project also includes one sample application. Named "Hello World", the sample demonstrates how to configure and use GemFire inside a Spring application. At runtime, the sample offers a shell to the user allowing him to run various commands against the grid. It provides an excellent starting point for users unfamiliar with the essential components or the Spring and GemFire concepts.
The sample is bundled with the distribution and is Maven-based. One can easily import them into any Maven-aware IDE (such as SpringSource Tool Suite) or run them from the command-line.
The Hello World sample demonstrates the core functionality of the Spring GemFire project. It bootstraps GemFire, configures it, executes arbitrary commands against it and shuts it down when the application exits. Multiple instances can be started at the same time as they will work with each other sharing data without any user intervention.
Running under Linux | |
---|---|
If you experience networking problems when starting GemFire or the
samples, try adding the following system property
|
Hello World is designed as a stand-alone java application. It
features a Main
class which can be started either
from your IDE of choice (in Eclipse/STS through Run As/Java
Application
) or from the command line through Maven using
mvn exec:java
. One can also use
java
directly on the resulting artifact if the
classpath is properly set.
To stop the sample, simply type exit
at the
command line or press Ctrl+C
to stop the VM and
shutdown the Spring container.
Once started, the sample will create a shared data grid and allow the user to issue commands against it. The output will likely look as follows:
INFO: Created GemFire Cache [Spring GemFire World] v. X.Y.Z INFO: Created new cache region [myWorld] INFO: Member xxxxxx:50694/51611 connecting to region [myWorld] Hello World! Want to interact with the world ? ... Supported commands are: get <key> - retrieves an entry (by key) from the grid put <key> <value> - puts a new entry into the grid remove <key> - removes an entry (by key) from the grid ...
For example to add new items to the grid one can use:
-> put 1 unu INFO: Added [1=unu] to the cache null -> put 1 one INFO: Updated [1] from [unu] to [one] unu -> size 1 -> put 2 two INFO: Added [2=two] to the cache null -> size 2
Multiple instances can be created at the same time. Once started, the new VMs automatically see the existing region and its information:
INFO: Connected to Distributed System ['Spring GemFire World'=xxxx:56218/49320@yyyyy] Hello World! ... -> size 2 -> map [2=two] [1=one] -> query length = 3 [one, two]
Experiment with the example, start (and stop) as many instances as you want, run various commands in one instance and see how the others react. To preserve data, at least one instance needs to be alive all times - if all instances are shutdown, the grid data is completely destroyed (in this example - to preserve data between runs, see the GemFire documentations).
Hello World uses both Spring XML and annotations for its
configuration. The initial boostrapping configuration is
app-context.xml
which includes the cache
configuration, defined under cache-context.xml
file
and performs classpath scanning
for Spring components.
The cache configuration defines the GemFire cache, region and for
illustrative purposes a simple cache listener that acts as a
logger.
The main beans are
HelloWorld
and CommandProcessor
which rely on the GemfireTemplate
to interact
with the distributed fabric. Both classes use annotations to define
their dependency and life-cycle callbacks.