用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,这个在

<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>io.proinsight</groupId>
  <artifactId>hellogeode</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hellogeode</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.apache.geode/geode-core -->
	<dependency>
	    <groupId>org.apache.geode</groupId>
	    <artifactId>geode-core</artifactId>
	    <version>1.2.0</version>
	</dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.geode/geode-json -->
<dependency>
    <groupId>org.apache.geode</groupId>
    <artifactId>geode-json</artifactId>
    <version>1.2.0</version>
</dependency>
    
    <!-- https://mvnrepository.com/artifact/org.apache.geode/geode-common -->
<dependency>
    <groupId>org.apache.geode</groupId>
    <artifactId>geode-common</artifactId>
    <version>1.2.0</version>
</dependency>
	<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
</dependency>

		<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
    	<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

			<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>fastjson</artifactId>
		    <version>1.2.13</version>
		</dependency>
  </dependencies>
<build>
  <plugins>
  			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-jar-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
                <archive>  
                    <manifest>  
                        <addClasspath>true</addClasspath>  
                        <classpathPrefix>lib/</classpathPrefix>  
                        <mainClass>io.proinsight.hellogeode.App</mainClass>  
                    </manifest> 
     
                </archive> 
    
            </configuration>  
        </plugin>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-dependency-plugin</artifactId>  
            <version>2.10</version>  
            <executions>  
                <execution>  
                    <id>copy-dependencies</id>  
                    <phase>package</phase>  
                    <goals>  
                        <goal>copy-dependencies</goal>  
                    </goals>  
                    <configuration>  
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>  
                    </configuration>  
                </execution>  
            </executions>  
        </plugin>
    </plugins>
  </build>
</project>

新建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 <poolTimer-DEFAULT-2> tid=0x17] AutoConnectionSource discovered new locators [slave1/211.98.71.195:10334]

[info 2017/09/27 13:09:13.511 CST <main> 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"}
完成删除用户
开始清空表
完成清空表
时间: 2024-11-08 21:54:21

用java连接apache geode的相关文章

java连接dynamic crm2011

必备条件: Java SE SDK 1.6 update 23或更高版本 Eclipse 3.7.x及以上或NetBeans 6.9x或更高版本 Apache 轴 2 版本1.6.1 Apache HTTP 组件的客户端第 4.1.3 Microsoft Dynamics CRM Online 安装事例: 运行 Eclipse. 单击文件,单击 New,然后选择 Java 项目. 在项目名称字段中,键入Java2CRMCRUD并在项目位置字段中,键入C:\Projects\Java2CRMCRU

centos6.5_x64 安装配置java+tomcat+apache

1.下载: # wget http://download.oracle.com/otn-pub/java/jdk/6u31-b04/jdk-6u31-linux-x64-rpm.bin 2.赋权限: [[email protected] ~]# ls -l jdk-6u31-linux-x64-rpm.bin -rw-r--r-- 1 root root 81071431 Jun 26 14:00 jdk-6u31-linux-x64-rpm.bin [[email protected] ~]#

几个主流的Java连接池整理

池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象.需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用.其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能. 要了解Java连接池我们先要了解数据库连接池(

java连接MongoDB数据库

这段时间尝试了一下MongoDB,感觉十分易用,方便,相比关系型的数据库来说优势也很大,于是尝试了下使用java连接MongoDB,并进行了 基本的增删改查操作. 首先先在控制台中连接数据库,查看数据库有几个表. 现在,新建一个maven工程,pom.xml中的依赖如下: <!-- WICKET DEPENDENCIES --> <dependency> <groupId>org.apache.wicket</groupId> <artifactId&

java连接Hive的几种方式

测试环境 Hadoop 0.20.2版本.Hive-0.5.0版本.JDK1.6 1.一般来说我们对hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连接都存放一个元数据,各个之间都不相同,所以,对于这样的模式我建议是用来做一些测试比较合适,并不适合做产品的开发和应用. 2.JDBC连接的方式,当然还有其他的连接方式,比如ODBC等, 这种方式很常用,可以在网上随便找到,就不再累赘了. 不稳定,经常会被大数据量冲挂,不建议使用. 3.这种方式是直接利用Hive

Java开源Apache项目

Commons-Pool Commons-Pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实 更多Commons-Pool信息 Commons-Math Math 是一个轻量的,自包含的数学和统计组件,解决了许多非常通用但没有及时出现在Java标准语言中的实践问题. 更多Commons-Math信息 Commons-Jelly Jelly能够把XML转换成可执行代码,所以Jelly是一个基于XML与Java的脚本和处理引擎. Jelly借鉴了JSP定指标签,Ve

[JavaEE] 了解Java连接池

转载自51CTO http://developer.51cto.com/art/201006/207768.htm 51CTO曾经为我们简单的介绍过Java连接池.要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,Java连接池正是数据库连接池在Java上的应用.--我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决上述问题,可以采用数据库连接池技术.数据库连接池的基

几个主流java连接池

池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象.需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用.其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能. 要了解Java连接池我们先要了解数据库连接池(

spark/java连接 kudu incompatible RPC 异常解决

如果是新搭的CDH 集群并使用默认的kudu设置, 使用spark /java 连接kudu时候,一般都会碰到此类异常. 程序: val masteraddr = "kudumasterip:7051" //创建kudu的数据库链接 val client = new KuduClient.KuduClientBuilder(masteraddr).build //打开表 val table = client.openTable("impala::testdb.PERSON&q