千家信息网

用java连接apache geode

发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,昨天研究了半天apache geode,通过gfsh命令查询和操作比较简单,但是如何通过程序查询因为资历太少,没有搞懂,试验了半天才明白1.创建测试regioncreate region --name
千家信息网最后更新 2024年09月26日用java连接apache geode

昨天研究了半天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"}完成删除用户开始清空表完成清空表


0