In this exercise, you will develop a simple, Java console-based application to access, update, and remove simple types of information from a Coherence clustered cache. You also get familiar with using the Coherence Java APIs. Using JDeveloper, you will perform the following tasks:
Create a new project
Create a new NamedCache
Put information into the cache and then retrieve it
Retrieve information about the cache
This chapter has the following sections:
All Coherence caches are named, have a lifetime scoped by the cluster instance in which they exist, and implement the com.tangosol.net.NamedCache interface. The NamedCache interface is an extension of java.util.Map and holds data and resources that are shared among the cluster members. Each NamedCache holds data as key/value pairs. Keys and values can be both simple and complex object types. The NamedCache interface provides extensions to the Map interface, such as locking and synchronization, storage integration, queries, event aggregations, and transactions. Table 3-1 describes some of the more commonly used methods within the NamedCache interface.
Table 3-1 Methods in the NamedCache Interface
| Method Name | Description |
|---|---|
|
|
Removes all entries from the |
|
|
Returns |
|
|
Returns |
|
|
Gets the entry from |
|
|
Puts an object in the cache and returns the previous value (if any). |
|
|
Removes the mapping for this |
|
|
Returns a set of key/value pairs. |
|
|
Gets all values back as a collection. |
|
|
Returns the |
The com.tangosol.net.CacheFactory class is typically used to obtain an instance of a NamedCache. Table 3-2 describes some of the more commonly used methods in the CacheFactory class.
Table 3-2 Methods in the CacheFactory Class
| Method Name | Description |
|---|---|
|
|
Obtains a cluster object running Coherence services. |
|
|
Shuts down all clustered services. |
|
|
Returns an instance of a cache. Either joins an existing cache in the cluster or creates the cache if this is the first member. |
For a full list of methods in the NamedCache interface and the CacheFactory class, see the Javadoc in C:\oracle\product\coherence\doc.
This section describes how to create a Java program that allows you to access, update, and remove simple types of information from a Coherence clustered cache.
Follow these steps to create a Coherence Java-based application.
Create a new project in JDeveloper. Name the project InsertValue. Ensure that directory is C:\home\oracle\labs\InsertValue.
See "Creating a New Project in an Existing Application" if you need detailed instructions.
Check the Libraries and Classpath value under Project Properties for the Coherence entry. Ensure that the full path is provided for the coherence.jar: C:\oracle\product\coherence\lib\coherence.jar
Create your first Coherence Java program. Name the class MyFirstSample and select the Main Method check box.
See "Creating a Java Class" if you need detailed information.
In the JDeveloper editor, write the code to create a NamedCache, put in a value, and then verify the value that you put in. Save the file after you finish coding. Example 3-1 illustrates a sample program.
Example 3-1 Creating a NamedCache; Inserting and Verifying Values
package com.oracle.handson;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class MyFirstSample {
public MyFirstSample() {
}
public static void main(String[] args) {
// create or get a named cache called mycache
NamedCache myCache = CacheFactory.getCache("mycache");
// put key, value pair into the cache.
myCache.put("Name","Gene Smith");
System.out.println("Value in cache is " + myCache.get("Name"));
}
}
Stop any running cache servers.
Run the program in JDeveloper: right-click the MyFirstSample.java class in the editor and choose Run.
You should see messages similar to the following:
Follow these steps to create a Java class which gets the value from your cache, instead of doing a put and then a get.
Create another Java class named MyFirstSampleReader. See "Creating a Java Class" if you need detailed information. Example 3-2 illustrates a sample program.
Example 3-2 Getting a Value from the Cache
package com.oracle.handson;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class MyFirstSampleReader {
public MyFirstSampleReader() {
}
public static void main(String[] args) {
// ensure we are in a cluser
CacheFactory.ensureCluster();
// create or get a named cache called mycache
NamedCache myCache = CacheFactory.getCache("mycache");
System.out.println("Value in cache is " + myCache.get("Name"));
}
}
Run the MyFirstSampleReader class. Figure 3-2 illustrates the output from the program. Note that a null value is returned. Although MyFirstSample successfully created and populated the NamedCache, the cache only existed within the MyFirstSample process memory. When MyFirstSample terminated so did the cache.
Start the cache-server.cmd that you used in "Testing a Coherence Installation", run MyFirstSample to put the value in the NamedCache, and then run MyFirstSampleReader to read the value from the cache. Note the output illustrated in Figure 3-3: the "Gene Smith" value stored by MyFirstSample is returned by MyFirstSampleReader.
This should not be the case for a process that joins the cluster only to perform an operation, such as putting in a value and then leaving, like MyFirstSample. By default, all processes start as storage-enabled. The process can store data as part of the cluster. You must modify the process so that it is not storage-enabled. Use the following Java command-line parameter.
-Dtangosol.coherence.distributed.localstorage=false
The Java option -Dtangosol.coherence.distributed.localstorage specifies whether a process is storage-enabled. Setting the parameter to false specifies that the process is not storage-enabled.
Change the project properties to disable local storage. See "Changing Project Properties, Setting Runtime Configuration" for detailed information.
Enter the following value in the Java Options field:
-Dtangosol.coherence.distributed.localstorage=false -Dtangosol.coherence.log.level=3
The Java property tangosol.coherence.log.level=level changes the level of logging produced by Coherence. The level can be set to a number between 0 and 9. The default is 5. A value of 0 means no logging., while a value of 9 means extremely verbose. A value of 3 is often useful enough for most application development.
Shut down any running cache servers and rerun your MyFirstSample class.
You receive a message similar to the one in Figure 3-4 indicating that storage is not enabled on the cluster, because you have set this member to be storage-disabled.
Restart the cache server and run MyFirstSample and MyFirstSampleReader again. You should now see that the data is persisted between running the two Java examples.
In this exercise, you develop a simple Java console-based application to access, update, and remove simple types of information from a Coherence clustered cache.
This exercise assumes you have completed "Testing a Coherence Installation". Make sure you have a cache server and a cache client running.
Unlike client/server applications, in which client applications typically "connect" and "disconnect" from a server application, Coherence-based clustered applications simply ensure they are in a cluster, after which they may use the services of the cluster. Coherence-based applications typically do not "connect" to a cluster of applications; they become part of the cluster.
To create a Java console-based application to access, update, and remove simple types of information from a Coherence clustered cache:
Examine the methods in the CacheFactory class using the Coherence Java documentation (Javadoc) that is shipped in the C:\oracle\product\coherence\doc directory.
Develop a simple Java console application (Java class) called YourFirstCoherenceApplication that uses the CacheFactory class to join a cluster (using the ensureCluster method), and then leave the cluster (using the shutdown method). See "Creating a Java Class" if you need detailed information on creating a Java class.
Examine the methods that are available in the NamedCache interface using the Javadoc.
Extend your application to use the CacheFactory method getCache to acquire a NamedCache for the cache called mycache (the same cache name used in the exercise: "Testing a Coherence Installation").
With the NamedCache instance, use the "get" method to retrieve the value for the key "message" (the same key used in the exercise: "Testing a Coherence Installation").
Output the value to the standard out using the System.out.println(….) method.
Example 3-3 illustrates a sample Coherence-based Java application:
Example 3-3 Sample Coherence-Based Java Application
package com.oracle.handson;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class YourFirstCoherenceApplication {
public YourFirstCoherenceApplication() {
}
public static void main(String[] args) {
CacheFactory.ensureCluster();
NamedCache myCache = CacheFactory.getCache("mycache");
String message = (String)myCache.get("message");
System.out.println(message);
CacheFactory.shutdown();
YourFirstCoherenceApplication yourfirstcoherenceapplication = new YourFirstCoherenceApplication();
}
}
Follow these steps to run the Coherence application.
Ensure that you have the Coherence cache server and cache client running. In the cache client, connect to the mycache cache. For example:
Map(?): cache mycache
Execute YourFirstCoherenceApplication from the JDeveloper IDE and view the result.
Figure 3-5 illustrates the output from YourFirstCoherenceApplication. The output indicates that there is no data in the cache for the message key.
Using the running cache client, change the key "message." For example, enter
Map <mycache>: put message "hello"
Rerun YourFirstCoherenceApplication from the JDeveloper IDE to see the changed values. Figure 3-6 illustrates that the cache now holds the value hello for the key message.
Rerun YourFirstCoherenceApplication with the following JVM parameter. Notice that the output is the same as the previous run.
-Dtangosol.coherence.distributed.localstorage=false
Shut down your cache server and cache client instances. Restart the cache server and then rerun YourFirstCoherenceApplication (with the preceding JVM parameter set). Note the output is now null.
If you change the value of the message key in your application (using the put method), is the new value available through the cache client?
For example, comment out the get method and add the put method.
//String message = (String)myCache.get("message");
String message = (String)myCache.put("message", "bye");
Run YourFirstCoherenceApplication.
Run the get command in the cache client.
Map (mycache): get message
You should see bye as the output.