The locator is a Pivotal GemFire process that tells new, connecting members where running members are located and provides load balancing for server use. A GemFire server is a Pivotal GemFire process that runs as a long-lived, configurable member of a distributed system. The GemFire server is used primarily for hosting long-lived data regions and for running standard GemFire processes such as the server in a client/server configuration.
In this post I am going to show how we can use the following classes to launch a Pivotal GemFire locator / server from code directly within IntelliJ IDEA allowing you to develop/test GemFire applications directly from your IDE of choice.
Note: In this post we use Intellij IDEA 13.x
com.gemstone.gemfire.distributed.LocatorLauncher API
com.gemstone.gemfire.distributed.ServerLauncher API
1. Add the GemFire 8 maven REPO to your project to ensure we pull the required JAR files.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>gemfire-compression</groupId> <artifactId>gemfire-compression</artifactId> <version>1.0-SNAPSHOT</version> <properties> <gemfire.version>8.0.0</gemfire.version> </properties> <dependencies> <dependency> <groupId>com.gemstone.gemfire</groupId> <artifactId>gemfire</artifactId> <version>${gemfire.version}</version> <scope>compile</scope> </dependency> </dependencies> <repositories> <repository> <id>gemstone-release</id> <name>GemStone Maven RELEASE Repository</name> <url>http://dist.gemstone.com.s3.amazonaws.com/maven/release</url> </repository> </repositories> </project>
2. Create a class as follows to start a locator
package pivotal.gemfire.compression; import com.gemstone.gemfire.distributed.LocatorLauncher; import java.util.concurrent.TimeUnit; public class StartLocator { public static void main(String[] args) { LocatorLauncher locatorLauncher = new LocatorLauncher.Builder() .set("jmx-manager", "true") .set("jmx-manager-start", "true") .set("jmx-manager-http-port", "8083") .set("jmx-manager-ssl", "false") .setMemberName("locator") .setPort(10334) .setBindAddress("localhost") .build(); System.out.println("Attempting to start Locator"); locatorLauncher.start(); locatorLauncher.waitOnStatusResponse(30, 5, TimeUnit.SECONDS); System.out.println("Locator successfully started"); } }
3. Create a class as follow to start a single cache server, could create as many iof these as you need
package pivotal.gemfire.compression; import com.gemstone.gemfire.distributed.ServerLauncher; public class StartMember { public static void main(String[] args){ ServerLauncher serverLauncher = new ServerLauncher.Builder() .setMemberName("server1") .set("locators","localhost[10334]") .set("cache-xml-file", "cache.xml") .set("log-level", "info") .build(); System.out.println("Attempting to start cache server"); serverLauncher.start(); System.out.println("Cache server successfully started"); } }
4. Create a cache.xml with a dummy region
<!DOCTYPE cache PUBLIC "-//GemStone Systems, Inc.//GemFire Declarative Caching 8.0//EN" "http://www.gemstone.com/dtd/cache8_0.dtd"> <cache> <cache-server bind-address="localhost" port="0" hostname-for-clients="localhost"/> <region name="CompressedRegion"> <region-attributes data-policy="partition"> <key-constraint>java.lang.String</key-constraint> <value-constraint>java.lang.String</value-constraint> <partition-attributes redundant-copies="1" total-num-buckets="113"/> <eviction-attributes> <lru-heap-percentage action="overflow-to-disk"/> </eviction-attributes> </region-attributes> </region> <resource-manager critical-heap-percentage="75" eviction-heap-percentage="65"/> </cache>
5. Edit the run configurations for StartLocator.java to include GEMFIRE env variable as shown below.
6. Run StartLocator.java as shown below.
7. Run StartMember.java as shown below.
8. Finally from the IDE run a script called verify.sh to view the cluster member/regions to ensure it worked.
verify.sh
#!/bin/bash . ./setup.sh gfsh <<EOF connect --locator=localhost[10334]; list members; list regions; exit; EOF
Output
More Information
Pivotal GemFire Locator Processeshttp://gemfire.docs.pivotal.io/latest/userguide/deploying/topics/running_the_locator.html
Pivotal GemFire Server Processes
http://gemfire.docs.pivotal.io/latest/userguide/deploying/topics/running_the_cacheserver.html