Java Pivotal Gemfire 8.1将未保存数据的数据放入Gemfire

Java Pivotal Gemfire 8.1将未保存数据的数据放入Gemfire,java,gemfire,Java,Gemfire,我已经创建了没有Spring数据的示例GemFire示例 问题:我的示例运行良好,已连接到Gem fire server,并以java代码返回响应,但在gfsh中运行相同的查询时,未找到任何数据 gfsh>query--query='select*from/regionA' 结果:正确 startCount:0 完数:20 行数:0 下一步\u步骤\u名称:结束 然后,我使用单独的类添加数据,并使用单独的类获取数据,以便在java代码中返回null 它似乎没有将数据存储到gemfire中,任何日

我已经创建了没有Spring数据的示例GemFire示例

问题:我的示例运行良好,已连接到Gem fire server,并以java代码返回响应,但在gfsh中运行相同的查询时,未找到任何数据

gfsh>query--query='select*from/regionA'

结果:正确 startCount:0 完数:20 行数:0

下一步\u步骤\u名称:结束

然后,我使用单独的类添加数据,并使用单独的类获取数据,以便在java代码中返回null

它似乎没有将数据存储到gemfire中,任何日志中都没有错误

package com.vaquar.example1;

import java.util.List;
import org.json.simple.JSONObject;  
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheFactory;
import com.gemstone.gemfire.cache.Region;  
import com.gemstone.gemfire.cache.client.ClientCache;  
import com.gemstone.gemfire.cache.client.ClientCacheFactory;  
import com.gemstone.gemfire.cache.query.SelectResults;  
import com.gemstone.gemfire.pdx.JSONFormatter;  
import com.gemstone.gemfire.pdx.PdxInstance; 


public final class JSONGemFireClient {
    public static final String  REGION_NAME = "myPOregion";//"myPOregion";//"regionA";
    public ClientCache          cache       = null;

    public JSONGemFireClient() {
        //cache = new ClientCacheFactory().set("name", "JSONClient").set("cache-xml-file", "GemFire5.xml").create();
        cache = new ClientCacheFactory().set("name", "JSONClient").set("cache-xml-file", "GemFire5.xml").create();
        //
        /*Cache c1 = new CacheFactory().create();
        Region r = c1.createRegionFactory("REPLICATE").create("customers");
        */
        System.out.println("cache------------------------->"+cache);

        System.out.println("cache------------------------->"+cache.getRegion(REGION_NAME).toString());
    }

    public void run() throws Exception {
        JSONObject obj = null;
        System.out.println("Connecting to the distributed system and creating the cache.");
        // Get the exampleRegion
        Region<String, PdxInstance> jsonregion = cache.getRegion(REGION_NAME);
        //
        System.out.println("jsonregion----------jsonregion.getFullPath()--------------->"+cache.getRegionAttributes(REGION_NAME)+jsonregion.getFullPath());
        //
        System.out.println("Example region \"" + jsonregion.getFullPath() + "\" created in cache.");
        //
        //
        // add 5 entries with age = 30
        for (int i = 1; i <= 5; i++) {
            obj = new JSONObject();
            obj.put("name", String.format("Person%s", i));
            obj.put("age", 30);
            System.out.println("------------------"+obj.toJSONString());
            String json=obj.toJSONString();
            System.out.println("************************************"+JSONFormatter.fromJSON(json));
            jsonregion.put(String.valueOf(i), JSONFormatter.fromJSON(json));
        }
        //
        //
        // add 5 entries with age = 20
        for (int i = 6; i <= 10; i++) {
            obj = new JSONObject();
            obj.put("name", String.format("Person%s", i));
            obj.put("age", 20);
            jsonregion.put(String.valueOf(i), JSONFormatter.fromJSON(obj.toJSONString()));
        }
        //
        //
        // Query region
        SelectResults<PdxInstance> sr = jsonregion.query("age = 30");
        System.out.println("Number of entries where age = 30 is -> " + sr.size());
        //
        List<PdxInstance> entries = sr.asList();
        //
        for (PdxInstance val : entries) {
            System.out.println("\n** JSON data ** ");
            System.out.println("Name = " + val.getField("name"));
            System.out.println("Full JSON data -> \n" + JSONFormatter.toJSON(val));
        }
        cache.close();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JSONGemFireClient test = new JSONGemFireClient();
        try {
            test.run();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

从gfsh查询时,是否可以尝试向查询添加投影属性?差不多

gfsh>query --query='select name from /regionA'

发现问题和解决办法

问题:在xml文件中需要refid=“PROXY”

package com.vaquar.example2;

import java.util.List;
import org.json.simple.JSONObject;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.client.ClientCache;
import com.gemstone.gemfire.cache.client.ClientCacheFactory;
import com.gemstone.gemfire.cache.query.SelectResults;
import com.gemstone.gemfire.pdx.JSONFormatter;
import com.gemstone.gemfire.pdx.PdxInstance;


public final class JSONGemFireClient {
    public static final String  REGION_NAME = "regionB";    

    /**
     * @param args
     */
    public static void main(final String[] args) {
        // 
        final JSONGemFireClient test = new JSONGemFireClient();
        try {
            test.run();
        } catch (final Exception e) {
            // 
            e.printStackTrace();
        }
    }

    public ClientCache  cache   = null;

    public JSONGemFireClient() {
        //
        cache = new ClientCacheFactory().set("name", "JSONClient").set("cache-xml-file", "GemFire6.xml").create();
        //

    }

    public void run() throws Exception {
        JSONObject obj = null;
        System.out.println("Connecting to the distributed system and creating the cache.");
        // Get the exampleRegion
        final Region<String, PdxInstance> jsonregion = cache.getRegion(REGION_NAME);
        //
        System.out.println("jsonregion----------jsonregion.getFullPath()--------------->" + cache.getRegionAttributes(REGION_NAME)
                + jsonregion.getFullPath());
        //
        System.out.println("Example region \"" + jsonregion.getFullPath() + "\" created in cache.");
        //
        //
        // add 5 entries with age = 30
        for (int i = 1; i <= 5; i++) {
            obj = new JSONObject();
            obj.put("name", String.format("Person%s", i));
            obj.put("age", 30);
            System.out.println("------------------" + obj.toJSONString());
            final String json = obj.toJSONString();
            System.out.println("************************************" + JSONFormatter.fromJSON(json));
            jsonregion.put(String.valueOf(i), JSONFormatter.fromJSON(json));
        }
        //
        //
        // add 5 entries with age = 20
        for (int i = 6; i <= 10; i++) {
            obj = new JSONObject();
            obj.put("name", String.format("Person%s", i));
            obj.put("age", 20);
            jsonregion.put(String.valueOf(i), JSONFormatter.fromJSON(obj.toJSONString()));
        }
        //
        //
        // Query region
        final SelectResults<PdxInstance> sr = jsonregion.query("age = 30");
        System.out.println("Number of entries where age = 30 is -> " + sr.size());
        //
        final List<PdxInstance> entries = sr.asList();
        //
        for (final PdxInstance val : entries) {
            System.out.println("\n** JSON data ** ");
            System.out.println("Name = " + val.getField("name"));
            System.out.println("Full JSON data -> \n" + JSONFormatter.toJSON(val));
        }
        cache.close();
    }
}
第二个修复示例:

package com.vaquar.example2;

import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.client.ClientCache;
import com.gemstone.gemfire.cache.client.ClientCacheFactory;

public final class GemFireSample3 {
    public static void main(final String[] args) {

        final ClientCache cache = new ClientCacheFactory().set("cache-xml-file", "HelloWorld1.xml").create();
        final Region<String, String> sampleRegion = cache.getRegion("pingTestRegion");
        sampleRegion.put("samplekey", "Sample Value Test");
        //
        final String sampleValue = sampleRegion.get("samplekey");
        System.out.println("sampleValue"+sampleValue);

        // sampleRegion.clear();
        cache.close();
    }
}

我已经尝试了DTO的例子

package com.viquar.gem.fire.example;

import static java.lang.System.out;
import java.util.Calendar;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.client.ClientCache;
import com.gemstone.gemfire.cache.client.ClientCacheFactory;

public class GemFireDTOExample {
    public static void main(final String[] args) {
        // final ClientCache cache = new ClientCacheFactory().create();
        final ClientCache cache = new ClientCacheFactory().set("cache-xml-file", "gemfiredtoexample.xml").create();
        System.out.println("cache-------------------->" + cache);
        final Region<Employee, Address> sampleRegion = cache.getRegion("dtoTestRegion");
        final Employee emp1 = getEmployee(1L, "shahbaz", 16, 1990);
        final Address add1 = getAddress("B-12", "M.G.ROAD", "PUNE");
        sampleRegion.put(emp1, add1);
        //
        final Address sampleValue = sampleRegion.get(emp1);
        out.println("------------------------------------------------------" + sampleValue);
        // sampleRegion.clear();
        cache.close();
    }

    private static Address getAddress(final String blockName, final String street, final String city) {
        final Address add = new Address();
        add.setBlockName(blockName);
        add.setCity(city);
        add.setStreet(street);
        return add;
    }

    private static Employee getEmployee(final Long empId, final String name, final int date, final int year) {
        final Employee emp = new Employee();
        emp.setEmpId(empId);
        emp.setName(name);
        final Calendar dateOfBirth = Calendar.getInstance();
        dateOfBirth.set(year, Calendar.DECEMBER, date);
        emp.setDateOfBirth(dateOfBirth.getTime());
        return emp;
    }
}
现在运行以下命令

gfsh>deploy --jar=C:\devprogs\Pivotal_GemFire_800_b48398_Windows\bin\locator1\cluster_config\cluster\employee_dto.jar
Could not process command due to GemFire error. 'C:\devprogs\Pivotal_GemFire_800_b48398_Windows\bin\locator1\cluster_config\cluster\employee_dto.jar' not found.

gfsh>deploy --jar=C:\devprogs\Pivotal_GemFire_800_b48398_Windows\bin\locator1\cluster_config\cluster\employee_dto.jar
Member  |   Deployed JAR   | Deployed JAR Location
------- | ---------------- | -----------------------------------------------------------------------------------
server1 | employee_dto.jar | C:\devprogs\Pivotal_GemFire_800_b48398_Windows\bin\server1\vf.gf#employee_dto.jar#2
server2 | employee_dto.jar | C:\devprogs\Pivotal_GemFire_800_b48398_Windows\bin\server2\vf.gf#employee_dto.jar#2

gfsh>create region --name=dtoTestRegion --type=REPLICATE --key-constraint=com.viquar.gem.fire.example.Employee --value-constraint=com.viquar.gem.fire.example.Address
Member  | Status
------- | --------------------------------------------
server1 | Region "/dtoTestRegion" created on "server1"
server2 | Region "/dtoTestRegion" created on "server2"
现在,在gfsh中执行以下查询之后运行您的程序

gfsh>query --query='select * from /dtoTestRegion'

Result     : true
startCount : 0
endCount   : 20
Rows       : 1

blockName | city | street
--------- | ---- | --------
B-12      | PUNE | M.G.ROAD

NEXT_STEP_NAME : END

gfsh>
您可以使用Spring数据。 分享的例子如下-

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>
<?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>
<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>
<?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> 
<!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>  
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("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 + "]";
    }
}
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 + "]";
    }
}
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();
}
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();
}
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;
    }
}
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);
        }
    }
}
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);
      }


}
deptropository.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 + "]";
    }
}
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 + "]";
    }
}
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();
}
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();
}
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;
    }
}
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);
        }
    }
}
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);
      }


}
包spring.gemfire.repository.deptemp.repos;
导入java.util.Collection;
导入org.springframework.data.gemfire.repository.Query;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
导入spring.gemfire.repository.deptemp.beans.Department;
//@存储库(deptropository.BEAN\u ID)
公共接口deptropository扩展了crudepository{
字符串BEAN_ID=“deptropository”;
部门findByName(字符串名称);
@查询(“选择*自/部门”)
集合myFindAll();
}
EmpRepository.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 + "]";
    }
}
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 + "]";
    }
}
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();
}
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();
}
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;
    }
}
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);
        }
    }
}
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);
      }


}
包spring.gemfire.repository.deptemp.repos;
导入java.util.Collection;
导入org.springframework.data.gemfire.repository.Query;
导入org.springframework.data.repository.crudepository;
导入org.springframework.stereotype.Repository;
导入spring.gemfire.repository.deptemp.beans.Employee;
//@存储库(deptropository.BEAN\u ID)
公共接口存储库扩展了Crudepository{
字符串BEAN_ID=“empRepository”;
@查询(“选择*FROM/employees,其中deptno=$1”)
收集empsInDeptno(int deptno);
@查询(“选择*来自/员工”)
集合myFindAll();
}
SpringFactoryConfig.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 + "]";
    }
}
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 + "]";
    }
}
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();
}
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();
}
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;
    }
}
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);
        }
    }
}
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);
      }


}
包spring.gemfire.repository.deptemp.util;
导入org.springframework.beans.factory.BeanFactory;
导入org.springframework.context.ApplicationContext;
导入org.springframework.context.support.ClassPathXmlApplicationContext;
公共最终类SpringFactoryConfig{
私有静态字符串DEFAULT_CONFIG_FILE=“gemfirebean1.xml”;
私有静态SpringFactoryConfig实例;
公共静态最终BeanFactory getDefaultSpringBeanFactory(){
if(实例==null){
实例=新的SpringFactoryConfig(默认配置文件);
}
返回INSTANCE.getBeanFactory();
}
公共静态SpringFactoryConfig getSpringFactoryConfig(最终字符串配置文件){
返回新的SpringFactoryConfig(配置文件);
}
私有最终应用上下文springAppContext;
私有SpringFactoryConfig(最终字符串配置文件){
springAppContext=new ClassPathXmlApplicationContext(“类路径:+configFile”);
if(springAppContext==null){抛出新的IllegalStateException(“无法获取SpringBean工厂的实例!”);}
}
公共最终T getBean(最终字符串名称,最终类beanType){
if(springAppContext.isTypeMatch(名称,beanType)){
返回beanType.cast(springAppContext.getBean(name));
}否则{
抛出新的IllegalArgumentException(“Bean”+name+”不是合适的类型“+beanType”);
}
}
公共最终BeanFactory getBeanFactory(){
返回上下文;
}
}
Test.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 + "]";
    }
}
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 + "]";
    }
}
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();
}
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();
}
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;
    }
}
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);
        }
    }
}
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);
      }


}
包spring.gemfire.repository.test;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.List;
导入org.springframework.context.ConfigurableApplicationContext;
导入org.springframework.context.annotation.AnnotationConfigApplicationContext;
导入org.springframework.context.support.ClassPathXmlApplicationContext;
导入spring.gemfire.repository.deptemp.beans.Department;
导入spring.gemfire.repository.deptemp.beans.Employee;
导入spring.gemfire.repository.deptemp.repos.DeptRepository;
导入spring.gemfire.repository.deptemp.repos.EmpRepository;
公开课考试{
公共静态void main(最终字符串[]args){
//TODO自动生成的方法存根
最终试验t=新试验();
//t.删除数据();
//t.saveData();
t、 getData();
System.out.println(“全部完成”);
}
私有ConfigurableApplicationContext ctx=null;
公开考试(){
ctx=new ClassPathXmlApplicationContext(“mvc dispatcher servlet.xml”);
}
公共void deleteData(){
final-deptropository-deptropos=ctx.getBean(deptropository.class);
//快速调整尺寸
System.out.println(“**部门存储库大小**”);
System.out.println(“Size=“+deptRepos.count());
//deptRepos.deleteAll();
最终收集deps=deptRepos.myFindAll();
deptRepos.删除(deps);
主管(最终d部门:deps){
System.out.println(d.toString());
//删除(d)段;
}
System.out.println(“**部门存储库全部删除**”);
最终EmpRepository empRepos=ctx.getBean(EmpRepository.class);
//快速调整尺寸
System.out.println(“**emp存储库大小**”);
System.out.println(“Size=“+empRepos.count());
//empRepos.deleteAll();
最终收集emps=empRepos.myFindAll();
环境管理计划。删除(环境管理计划);