博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用java连接apache geode
阅读量:7000 次
发布时间:2019-06-27

本文共 11981 字,大约阅读时间需要 39 分钟。

昨天研究了半天apache geode,通过gfsh命令查询和操作比较简单,但是如何通过程序查询因为资历太少,没有搞懂,试验了半天才明白

1.创建测试region

create region --name=user --type=REPLICATE_PERSISTENT

2.用eclipse创建maven工程

修改pom.xml,需要引入gemfire-8.2.0.jar,这个在

  
4.0.0
  
io.proinsight
  
hellogeode
  
0.0.1-SNAPSHOT
  
jar
  
hellogeode
  
http://maven.apache.org
  
    
UTF-8
  
  
  
    
org.apache.geode
    
geode-core
    
1.2.0
    
    
org.apache.geode
    
geode-json
    
1.2.0
        
    
org.apache.geode
    
geode-common
    
1.2.0
log4j
log4j
1.2.17
    
org.apache.logging.log4j
    
log4j-core
    
2.8.2
    
org.apache.logging.log4j
    
log4j-api
    
2.8.2
    
log4j
    
log4j
    
1.2.17
commons-codec
commons-codec
1.10
org.apache.commons
commons-lang3
3.4
    
junit
junit
4.12
    
com.alibaba
    
fastjson
    
1.2.13
  
  
  
                
org.apache.maven.plugins
                
maven-compiler-plugin
                
3.3
                
                    
1.8                    
1.8
                
            
        
              
org.apache.maven.plugins
              
maven-jar-plugin
              
2.6
              
                  
                      
                          
true
                          
lib/
                          
io.proinsight.hellogeode.App
                      
                      
                 
          
          
              
org.apache.maven.plugins
              
maven-dependency-plugin
              
2.10
              
                  
                      
copy-dependencies
                      
package
                      
                          
copy-dependencies
                      
                      
                          
${project.build.directory}/lib
                      
                  
              
          
    
  

新建UserBean.java

package io.proinsight.hellogeode;import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;import java.util.Date;import org.apache.geode.DataSerializable;import org.apache.geode.DataSerializer;public class UserBean implements DataSerializable{	/**	 * 必须有这个方法,否则查询会报没有init()这个方法	 * */	public UserBean() {			}	public UserBean(int id2, int i, String string, Date date) {		// TODO Auto-generated constructor stub		this.id=id2;		this.age=i;		this.name=string;		this.createTime=date;	}	/**     * id     * */	private int id;		/**     * 年龄     * */    private int age;    /**     * 姓名     * */    private String name;    /**     * 创建时间     * */    private Date createTime;	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Date getCreateTime() {		return createTime;	}		public void setCreateTime(Date createTime) {		this.createTime = createTime;	}	public void fromData(DataInput in) throws IOException, ClassNotFoundException {		this.id = in.readInt();		this.age=in.readInt();	     this.name = in.readUTF();	     this.createTime = DataSerializer.readDate(in);			}	public void toData(DataOutput out) throws IOException {		 out.writeInt(this.id);		 out.writeInt(this.age);	     out.writeUTF(this.name);	     DataSerializer.writeDate(this.createTime, out);			}}

修改App.java

package io.proinsight.hellogeode;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.geode.DataSerializer;import org.apache.geode.cache.Region;import org.apache.geode.cache.RegionFactory;import org.apache.geode.cache.client.ClientCache;import org.apache.geode.cache.client.ClientCacheFactory;import org.apache.geode.cache.client.ClientRegionFactory;import org.apache.geode.cache.client.ClientRegionShortcut;import org.apache.geode.cache.query.internal.ResultsBag;import com.alibaba.fastjson.JSON;/** * Hello world! * */public class App {	String regionName="user";	int userNum=10;    public static void main( String[] args )    {    	new App().test();    }        public void test(){    	Region region = null; 	   ClientCache cache = new ClientCacheFactory().addPoolLocator("192.168.60.50", 10334).create();  	   ClientRegionFactory rf = cache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY); 	   //打开user表       region = rf.create(regionName);               System.out.println("开始创建用户");        create(region);        select(region);        System.out.println("完成创建用户");                        System.out.println("开始修改用户");        update(region);        select(region);        System.out.println("完成修改用户");                        System.out.println("开始删除用户");        delete(region,108);        select(region);        System.out.println("完成删除用户");                        System.out.println("开始清空表");        truncate(region);        select(region);        System.out.println("完成清空表");                //关闭表        region.close();    }        /**     * 查询user表     * */    public void select(Region region){        try {            Object objList = region.query("select * from /"+regionName+" u where u.age > 15");                       if(objList != null && objList instanceof ResultsBag){                Iterator iter = ((ResultsBag) objList).iterator();                while(iter.hasNext()){                    UserBean userBean = (UserBean) iter.next();                    System.out.println("User信息:"+JSON.toJSONString(userBean));                }            }            Object obj = region.get(108);            if(obj != null && obj instanceof UserBean){                System.out.println("User108信息"+JSON.toJSONString(obj));            }        }catch (Exception e){        	e.printStackTrace();//            logger.error("error occured.", e);        }    }           /**     * 增加10个     * */    public void create(Region region){    	for (int i = 0; i < userNum; i++) {            int id = i+100;            region.put(id, new UserBean(id,10+i,"username:"+id,new Date()));        }    }            /**     * 修改     * */    public void update(Region region){        UserBean user108= (UserBean) region.get(108);        if(user108 != null && user108 instanceof UserBean){            System.out.println("User108信息"+JSON.toJSONString(user108));          //修改年龄为            user108.setAge(12);            region.put(user108.getId(), user108);        }            }        /**     * 删除某个用户     * */    public void delete(Region region,Integer id){        region.remove(id);    }            /**     * 清空表     * */    public void truncate(Region region){        region.clear();    }       }

3.打包

maven install一下

在target目录下有对应的jar包

然后把hellogeode-0.0.1-SNAPSHOT.jar拷贝到geode服务器上某个目录例如/tmp/t/下

4.发布Jar到geode里

为啥要发布到geode里呢?因为我们用UserBean的序列化和反序列化作为表结构,因此deode查询时需要UserBean.class,因此我们发布hellogeode-0.0.1-SNAPSHOT.jar到geode,主要是为了把UserBean.class导入到geode里;

gfsh>deploy  --jar=/tmp/t/hellogeode-0.0.1-SNAPSHOT.jar  Member  |         Deployed JAR          | Deployed JAR Location-------- | ----------------------------- | -----------------------------------------------------------------server50 | hellogeode-0.0.1-SNAPSHOT.jar | /opt/apache-geode-1.2.1/server50/hellogeode-0.0.1-SNAPSHOT.v1.jar

若是我们对UserBean有修改的话,需要先卸载jar,然后再重新发布

gfsh>undeploy  --jar=hellogeode-0.0.1-SNAPSHOT.jar  Member  |        Un-Deployed JAR        | Un-Deployed From JAR Location-------- | ----------------------------- | -----------------------------------------------------------------server50 | hellogeode-0.0.1-SNAPSHOT.jar | /opt/apache-geode-1.2.1/server50/hellogeode-0.0.1-SNAPSHOT.v1.jargfsh>deploy  --jar=/tmp/t/hellogeode-0.0.1-SNAPSHOT.jar  Member  |         Deployed JAR          | Deployed JAR Location-------- | ----------------------------- | -----------------------------------------------------------------server50 | hellogeode-0.0.1-SNAPSHOT.jar | /opt/apache-geode-1.2.1/server50/hellogeode-0.0.1-SNAPSHOT.v1.jar

5.测试

测试程序在eclipse里运行即可,不需要放到服务器上运行

在eclipse运行app.java

测试结果

开始创建用户[info 2017/09/27 13:09:13.422 CST 
 tid=0x17] AutoConnectionSource discovered new locators [slave1/211.98.71.195:10334][info 2017/09/27 13:09:13.511 CST 
 tid=0x1] Updating membership port.  Port changed from 0 to 51,084.  ID is now bogon(92040:loner):0:0c29bdc1User信息:{"age":12,"createTime":1506488953578,"id":102,"name":"username:102"}User信息:{"age":15,"createTime":1506488953592,"id":105,"name":"username:105"}User信息:{"age":14,"createTime":1506488953588,"id":104,"name":"username:104"}User信息:{"age":10,"createTime":1506488953405,"id":100,"name":"username:100"}User信息:{"age":19,"createTime":1506488953611,"id":109,"name":"username:109"}User信息:{"age":13,"createTime":1506488953583,"id":103,"name":"username:103"}User信息:{"age":18,"createTime":1506488953606,"id":108,"name":"username:108"}User信息:{"age":11,"createTime":1506488953573,"id":101,"name":"username:101"}User信息:{"age":16,"createTime":1506488953597,"id":106,"name":"username:106"}User信息:{"age":17,"createTime":1506488953602,"id":107,"name":"username:107"}User108信息{"age":18,"createTime":1506488953606,"id":108,"name":"username:108"}完成创建用户开始修改用户User108信息{"age":18,"createTime":1506488953606,"id":108,"name":"username:108"}User信息:{"age":17,"createTime":1506488953602,"id":107,"name":"username:107"}User信息:{"age":12,"createTime":1506488953578,"id":102,"name":"username:102"}User信息:{"age":15,"createTime":1506488953592,"id":105,"name":"username:105"}User信息:{"age":12,"createTime":1506488953606,"id":108,"name":"username:108"}User信息:{"age":13,"createTime":1506488953583,"id":103,"name":"username:103"}User信息:{"age":19,"createTime":1506488953611,"id":109,"name":"username:109"}User信息:{"age":16,"createTime":1506488953597,"id":106,"name":"username:106"}User信息:{"age":11,"createTime":1506488953573,"id":101,"name":"username:101"}User信息:{"age":14,"createTime":1506488953588,"id":104,"name":"username:104"}User信息:{"age":10,"createTime":1506488953405,"id":100,"name":"username:100"}User108信息{"age":12,"createTime":1506488953606,"id":108,"name":"username:108"}完成修改用户开始删除用户User信息:{"age":15,"createTime":1506488953592,"id":105,"name":"username:105"}User信息:{"age":12,"createTime":1506488953578,"id":102,"name":"username:102"}User信息:{"age":16,"createTime":1506488953597,"id":106,"name":"username:106"}User信息:{"age":10,"createTime":1506488953405,"id":100,"name":"username:100"}User信息:{"age":13,"createTime":1506488953583,"id":103,"name":"username:103"}User信息:{"age":19,"createTime":1506488953611,"id":109,"name":"username:109"}User信息:{"age":11,"createTime":1506488953573,"id":101,"name":"username:101"}User信息:{"age":17,"createTime":1506488953602,"id":107,"name":"username:107"}User信息:{"age":14,"createTime":1506488953588,"id":104,"name":"username:104"}完成删除用户开始清空表完成清空表

转载地址:http://xjevl.baihongyu.com/

你可能感兴趣的文章