You can use Spring Data .
Sharing example enter image description hereas below -
pom.xml
<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>WebserviceSpringDataGemFire</groupId>
<artifactId>WebserviceSpringDataGemFire</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>WebserviceSpringDataGemFire</name>
<properties>
<spring.version>4.1.7.RELEASE</spring.version>
<jackson.version>1.9.10</jackson.version>
<jdk.version>1.7</jdk.version>
</properties>
<dependencies>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons-core</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-gemfire</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.gemstone.gemfire</groupId>
<artifactId>gemfire</artifactId>
<version>8.0.0</version>
</dependency>
<dependency>
<!-- Required for Log4J XML configuration files -->
<groupId>log4j</groupId>
<artifactId>apache-log4j-extras</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>commons-chain</groupId>
<artifactId>commons-chain</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
<!-- Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>WebserviceSpringDataGemFire</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="spring.gemfire.repository.deptemp"/>
</beans>
gemfirebean1.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:gfe-data="http://www.springframework.org/schema/data/gemfire"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/gemfire
http://www.springframework.org/schema/gemfire/spring-gemfire-1.2.xsd
http://www.springframework.org/schema/data/gemfire
http://www.springframework.org/schema/data/gemfire/spring-data-gemfire-1.2.xsd">
<context:component-scan base-package="spring.gemfire.repository.deptemp"/>
<gfe:client-cache id="client-cache" cache-xml-location="classpath:gemfire-client.xml" pool-name="gfPool"/>
<gfe:pool id="gfPool" max-connections="10">
<gfe:locator host="localhost" port="10334"/>
</gfe:pool>
<gfe:lookup-region id="departments" name="departments" cache-ref="client-cache"/>
<gfe:lookup-region id="employees" name="employees" cache-ref="client-cache"/>
<gfe-data:repositories base-package="spring.gemfire.repository.deptemp.repos" />
</beans>
gemfire-client.xml
<!DOCTYPE client-cache PUBLIC
"-//GemStone Systems, Inc.//GemFire Declarative Caching 6.5//EN"
"http://www.gemstone.com/dtd/cache6_5.dtd">
<client-cache>
<!-- No cache storage in the client region because of the PROXY client region shortcut setting. -->
<!-- <pool name="cacheServerPool">
<locator host="GCOTDVMR770036.nam.nsroot.net" port="10334" />
</pool> -->
<region name="departments" refid="PROXY">
<!-- <region-attributes refid="PROXY" pool-name="gfPool" data-policy="replicate"/> -->
<region-attributes refid="PROXY" data-policy="replicate"/>
</region>
<region name="employees" refid="PROXY">
<!-- <region-attributes refid="PROXY" pool-name="gfPool" data-policy="replicate"/> -->
<region-attributes refid="PROXY" data-policy="replicate"/>
</region>
</client-cache>
Department.java
package spring.gemfire.repository.deptemp.beans;
import java.io.Serializable;
import java.util.Properties;
import org.springframework.data.annotation.Id;
import org.springframework.data.gemfire.mapping.Region;
import com.gemstone.gemfire.cache.Declarable;
@Region("departments")
public class Department implements Declarable, Serializable {
private static final long serialVersionUID = -9097335119586059309L;
@Id
private int deptno;
private String name;
@Override
public boolean equals(final Object obj) {
if (this == obj) { return true; }
if (obj == null) { return false; }
if (getClass() != obj.getClass()) { return false; }
final Department other = (Department) obj;
if (deptno != other.deptno) { return false; }
if (name == null) {
if (other.name != null) { return false; }
} else if (!name.equals(other.name)) { return false; }
return true;
}
public int getDeptno() {
return deptno;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + deptno;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public void init(final Properties props) {
// TODO Auto-generated method stub
deptno = Integer.parseInt(props.getProperty("deptno"));
name = props.getProperty("name");
}
public void setDeptno(final int deptno) {
this.deptno = deptno;
}
public void setName(final String name) {
this.name = name;
}
@Override
public String toString() {
return "Department [deptno=" + deptno + ", name=" + name + "]";
}
}
Employee.java
package spring.gemfire.repository.deptemp.beans;
import java.io.Serializable;
import java.util.Properties;
import org.springframework.data.annotation.Id;
import org.springframework.data.gemfire.mapping.Region;
import com.gemstone.gemfire.cache.Declarable;
@Region("employees")
public class Employee implements Declarable, Serializable {
private static final long serialVersionUID = -8229531542107983344L;
@Id
private int empno;
private String name;
private String job;
private int deptno;
@Override
public boolean equals(final Object obj) {
if (this == obj) { return true; }
if (obj == null) { return false; }
if (getClass() != obj.getClass()) { return false; }
final Employee other = (Employee) obj;
if (deptno != other.deptno) { return false; }
if (empno != other.empno) { return false; }
if (job == null) {
if (other.job != null) { return false; }
} else if (!job.equals(other.job)) { return false; }
if (name == null) {
if (other.name != null) { return false; }
} else if (!name.equals(other.name)) { return false; }
return true;
}
public int getDeptno() {
return deptno;
}
public int getEmpno() {
return empno;
}
public String getJob() {
return job;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + deptno;
result = prime * result + empno;
result = prime * result + ((job == null) ? 0 : job.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
public void init(final Properties props) {
// TODO Auto-generated method stub
empno = Integer.parseInt(props.getProperty("empno"));
name = props.getProperty("name");
job = props.getProperty("job");
deptno = Integer.parseInt(props.getProperty("deptno"));
}
public void setDeptno(final int deptno) {
this.deptno = deptno;
}
public void setEmpno(final int empno) {
this.empno = empno;
}
public void setJob(final String job) {
this.job = job;
}
public void setName(final String name) {
this.name = name;
}
@Override
public String toString() {
return "Employee [empno=" + empno + ", name=" + name + ", job=" + job + ", deptno=" + deptno + "]";
}
}
DeptRepository.java
package spring.gemfire.repository.deptemp.repos;
import java.util.Collection;
import org.springframework.data.gemfire.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import spring.gemfire.repository.deptemp.beans.Department;
//@Repository(DeptRepository.BEAN_ID)
public interface DeptRepository extends CrudRepository<Department, Integer> {
String BEAN_ID="deptRepository";
Department findByName(String name);
@Query("SELECT * FROM /departments")
Collection<Department> myFindAll();
}
EmpRepository.java
package spring.gemfire.repository.deptemp.repos;
import java.util.Collection;
import org.springframework.data.gemfire.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import spring.gemfire.repository.deptemp.beans.Employee;
//@Repository(DeptRepository.BEAN_ID)
public interface EmpRepository extends CrudRepository<Employee, Integer> {
String BEAN_ID="empRepository";
@Query("SELECT * FROM /employees where deptno = $1")
Collection<Employee> empsInDeptno(int deptno);
@Query("SELECT * FROM /employees")
Collection<Employee> myFindAll();
}
SpringFactoryConfig.java
package spring.gemfire.repository.deptemp.util;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public final class SpringFactoryConfig {
private static String DEFAULT_CONFIG_FILE = "gemfirebean1.xml";
private static SpringFactoryConfig INSTANCE;
public static final BeanFactory getDefaultSpringBeanFactory() {
if (INSTANCE == null) {
INSTANCE = new SpringFactoryConfig(DEFAULT_CONFIG_FILE);
}
return INSTANCE.getBeanFactory();
}
public static SpringFactoryConfig getSpringFactoryConfig(final String configFile) {
return new SpringFactoryConfig(configFile);
}
private final ApplicationContext springAppContext;
private SpringFactoryConfig(final String configFile) {
springAppContext = new ClassPathXmlApplicationContext("classpath:" + configFile);
if (springAppContext == null) { throw new IllegalStateException("Cannot get an instance of the Spring bean factory !"); }
}
public final <T> T getBean(final String name, final Class<T> beanType) {
if (springAppContext.isTypeMatch(name, beanType)) {
return beanType.cast(springAppContext.getBean(name));
} else {
throw new IllegalArgumentException("Bean " + name + " is not of appropriate type " + beanType);
}
}
public final BeanFactory getBeanFactory() {
return springAppContext;
}
}
Test.java
package spring.gemfire.repository.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.gemfire.repository.deptemp.beans.Department;
import spring.gemfire.repository.deptemp.beans.Employee;
import spring.gemfire.repository.deptemp.repos.DeptRepository;
import spring.gemfire.repository.deptemp.repos.EmpRepository;
public class Test {
public static void main(final String[] args) {
// TODO Auto-generated method stub
final Test t = new Test();
// t.deleteData();
// t.saveData();
t.getData();
System.out.println("all done..");
}
private ConfigurableApplicationContext ctx = null;
public Test() {
ctx = new ClassPathXmlApplicationContext("mvc-dispatcher-servlet.xml");
}
public void deleteData() {
final DeptRepository deptRepos = ctx.getBean(DeptRepository.class);
// get quick size
System.out.println("** Size of dept repository **");
System.out.println("Size = " + deptRepos.count());
// deptRepos.deleteAll();
final Collection<Department> deps = deptRepos.myFindAll();
deptRepos.delete(deps);
for (final Department d : deps) {
System.out.println(d.toString());
// deptRepos.delete(d);
}
System.out.println("** dept repository deleted All**");
final EmpRepository empRepos = ctx.getBean(EmpRepository.class);
// get quick size
System.out.println("** Size of emp repository **");
System.out.println("Size = " + empRepos.count());
// empRepos.deleteAll();
final Collection<Employee> emps = empRepos.myFindAll();
empRepos.delete(emps);
for (final Employee e : emps) {
System.out.println(e.toString());
// empRepos.delete(e);
}
System.out.println("** empRepos repository deleted All**");
}
public void getData() {
final DeptRepository deptRepos = ctx.getBean(DeptRepository.class);
// get quick size
System.out.println("** Size of dept repository **");
System.out.println("Size = " + deptRepos.count());
// call findOne crud method by key
System.out.println("** calling deptRepos.findOne(\"2\") **");
final Department dept = deptRepos.findOne(5);
System.out.println(dept);
// call findOne crud method for an attribute
System.out.println("** calling deptRepos.findByName(\"B\") **");
final Department dept2 = deptRepos.findByName("B");
System.out.println(dept2);
// call my own findAll
final Collection<Department> deps = deptRepos.myFindAll();
System.out.println("\n** All Departments using -> deptRepos.myFindAll()");
System.out.println("Defined as : @Query(\"SELECT * FROM /departments\") ");
System.out.println("Collection<Department> myFindAll(); ** ");
for (final Department d : deps) {
System.out.println(d.toString());
}
final EmpRepository empRepos = ctx.getBean(EmpRepository.class);
// get quick size
System.out.println("** Size of emp repository **");
System.out.println("Size = " + empRepos.count());
final Employee empt = empRepos.findOne(2);
System.out.println(empt);
final Collection<Employee> emps = empRepos.empsInDeptno(2);
System.out.println("\n ** All Employees in dept 2 using -> Collection<Employee> empsInDeptno(int deptno) **");
for (final Employee e : emps) {
System.out.println(e.toString());
}
}
public void saveData() {
final DeptRepository deptRepos = ctx.getBean(DeptRepository.class);
// get quick size
System.out.println("** Size of dept repository **");
System.out.println("Size = " + deptRepos.count());
final Department d1 = new Department();
d1.setDeptno(1);
d1.setName("A");
final Department d2 = new Department();
d2.setDeptno(2);
d2.setName("B");
final Department d3 = new Department();
d3.setDeptno(5);
d3.setName("C");
final List<Department> dList = new ArrayList<Department>();
dList.add(d1);
dList.add(d2);
dList.add(d3);
System.out.println("** calling deptRepos.save() **");
final Iterable<Department> deptCollection = deptRepos.save(dList);
for (final Department d : deptCollection) {
System.out.println("** saved department **" + d);
}
final EmpRepository empRepos = ctx.getBean(EmpRepository.class);
// get quick size
System.out.println("** Size of emp repository **");
System.out.println("Size = " + empRepos.count());
final Employee e1 = new Employee();
e1.setEmpno(1);
e1.setName("X");
e1.setDeptno(1);
e1.setJob("J1");
final Employee e2 = new Employee();
e2.setEmpno(2);
e2.setName("Y");
e2.setDeptno(2);
e2.setJob("J2");
final Employee e3 = new Employee();
e3.setEmpno(3);
e3.setName("Y");
e3.setDeptno(5);
e3.setJob("J5");
final List<Employee> eList = new ArrayList<Employee>();
eList.add(e1);
eList.add(e2);
eList.add(e3);
System.out.println("** calling empRepos.save() **");
final Iterable<Employee> empCollection = empRepos.save(eList);
for (final Employee e : empCollection) {
System.out.println("** saved employee **" + e);
}
}
}
GemFireJSONController.java
package spring.gemfire.repository.deptemp.controller;
import java.util.Collection;
import javax.annotation.PostConstruct;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import spring.gemfire.repository.deptemp.beans.Department;
import spring.gemfire.repository.deptemp.beans.Employee;
import spring.gemfire.repository.deptemp.repos.DeptRepository;
import spring.gemfire.repository.deptemp.repos.EmpRepository;
import spring.gemfire.repository.deptemp.util.SpringFactoryConfig;
@Controller
@RequestMapping("/gemfire")
public class GemFireJSONController {
@RequestMapping(value ="/create/employee", method = RequestMethod.POST,headers="Accept=application/json")
public ResponseEntity<?> createEmployee(@RequestBody Employee emp) {
System.out.println("Start createEmployee.");
getEmpRepository().save(emp);
return new ResponseEntity<>(emp, HttpStatus.CREATED);
}
@RequestMapping(value ="/create/department", method = RequestMethod.POST,headers="Accept=application/json")
public ResponseEntity<?> createDepartment(@RequestBody Department dept) {
System.out.println("Start createEmployee.");
getDeptRepository().save(dept);
return new ResponseEntity<>(dept, HttpStatus.CREATED);
}
@RequestMapping(value = "/employee/all", method = RequestMethod.GET,headers="Accept=application/json")
public @ResponseBody Collection<Employee> getAllEmployees() {
System.out.println("Start getAllEmployeess.");
return getEmpRepository().myFindAll();
}
@RequestMapping(value = "/department/all", method = RequestMethod.GET,headers="Accept=application/json")
public @ResponseBody Collection<Department> getAllDepartments() {
System.out.println("Start getAllDepartments.");
return getDeptRepository().myFindAll();
}
private DeptRepository getDeptRepository(){
return SpringFactoryConfig.getDefaultSpringBeanFactory().getBean(DeptRepository.BEAN_ID,
DeptRepository.class);
}
private EmpRepository getEmpRepository(){
return SpringFactoryConfig.getDefaultSpringBeanFactory().getBean(EmpRepository.BEAN_ID,
EmpRepository.class);
}
}