设为首页 收藏本站
查看: 831|回复: 0

[经验分享] 用java连接apache geode

[复制链接]

尚未签到

发表于 2018-11-18 10:27:08 | 显示全部楼层 |阅读模式
  昨天研究了半天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.jar
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  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:0c29bdc1
User信息:{"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"}
完成删除用户
开始清空表
完成清空表  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636491-1-1.html 上篇帖子: 安装和使用apache geode 下篇帖子: Apache中.htaccess文件的作用和配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表