`
masterkey
  • 浏览: 337575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZeroC ICE之旅------java

阅读更多
关于Ice请见,
ICE之轻量级分布式通讯中间件
http://masterkey.iteye.com/blog/182954
ZeroC ICE之旅------C++
http://masterkey.iteye.com/blog/183307
ZeroC ICE之旅------Slice
http://masterkey.iteye.com/blog/184064
ZeroC ICE之旅------多语言互通互联
http://masterkey.iteye.com/blog/183742
ZeroC ICE之旅------集群和容错
http://masterkey.iteye.com/blog/185081
更多ICE文章,请关注:
Titan的天空
http://masterkey.iteye.com

工欲善其事,必先利其器,我们首先从www.zero.com,下载最新安装包;
btw:

目前最新的v3.3
http://www.zeroc.com/download_beta.html
最新稳定版本:
http://www.zeroc.com/download.html


由于我自己的平台是CentOS release 4.4 (Final),java version "1.6.0_01"
所以下载的是:
http://www.zeroc.com/download/Ice/3.3/Ice-3.3b-rhel4-i386-rpm.tar.gz

解开之后:
-rw-r--r--  1 506 users 1130231  4月  1 10:39 db46-4.6.21-2ice.rhel4.i386.rpm
-rw-r--r--  1 506 users   51459  4月  1 10:39 db46-devel-4.6.21-2ice.rhel4.i386.rpm
-rw-r--r--  1 506 users  810562  4月  1 10:40 db46-java-4.6.21-2ice.rhel4.i386.rpm
-rw-r--r--  1 506 users   72125  4月  1 10:40 db46-utils-4.6.21-2ice.rhel4.i386.rpm
-rw-r--r--  1 506 users   84281  4月  1 10:15 ice-3.3b-1.rhel4.noarch.rpm
-rw-r--r--  1 506 users  450359  4月  1 10:15 ice-c++-devel-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users 2823701  4月  1 10:16 ice-java-3.3b-1.rhel4.noarch.rpm
-rw-r--r--  1 506 users  263085  4月  1 10:16 ice-java-devel-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users 3439061  4月  1 10:17 ice-libs-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users  162092  4月  1 10:19 ice-php-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users  739055  4月  1 10:19 ice-python-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users   32913  4月  1 10:19 ice-python-devel-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users  223577  4月  1 10:19 ice-ruby-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users   21406  4月  1 10:19 ice-ruby-devel-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users 3657167  4月  1 10:20 ice-servers-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users 4350193  4月  1 10:24 ice-utils-3.3b-1.rhel4.i386.rpm
-rw-r--r--  1 506 users   74856  4月  1 10:40 mcpp-devel-2.6.4-1ice.rhel4.i386.rpm
由于需要c和java的包:
所以我们仅安装:
rmp -ivh ice-3.3b-1.rhel4.noarch.rpm
rmp -ivh ice-3.3b-1.rhel4.noarch.rpm
rpm -ivh ice-3.3b-1.rhel4.noarch.rpm
rpm -ivh ice-libs-3.3b-1.rhel4.i386.rpm
rpm -ivh ice-utils-3.3b-1.rhel4.i386.rpm
rpm -ivh mcpp-devel-2.6.4-1ice.rhel4.i386.rpm
rpm -ivh ice-servers-3.3b-1.rhel4.i386.rpm
rpm -ivh ice-libs-3.3b-1.rhel4.i386.rpm
rpm -ivh ice-c++-devel-3.3b-1.rhel4.i386.rpm
rpm -ivh ice-java-3.3b-1.rhel4.noarch.rpm
rpm -ivh ice-java-devel-3.3b-1.rhel4.i386.rpm

安装之后的Ice相关路径:
slice2cpp,slice2java在/usr/bin/下
Ice.jar 存储于 /usr/share/java/下
相关的Ice的库存储于/usr/lib下.

一切就绪,我们开始Ice之旅的Slice地带:
首先,我们建立一个demo.ice的文件:

module Demo{
interface test{
 string   execute(string mth,string cmd);
};
};


注意,后两个"}"一定要包含";",否则slice2java就会过不去,赫赫
执行:
slice2java demo.ice

会在当前目录产生一个Demo目录,目录下自动生成:
-rw-r--r--  1 root root 2316  4月 15 17:01 _testDelD.java
-rw-r--r--  1 root root  560  4月 15 17:01 _testDel.java
-rw-r--r--  1 root root 1929  4月 15 17:01 _testDelM.java
-rw-r--r--  1 root root 4177  4月 15 17:01 _testDisp.java
-rw-r--r--  1 root root 1070  4月 15 17:01 testHolder.java
-rw-r--r--  1 root root  488  4月 15 17:01 test.java
-rw-r--r--  1 root root  481  4月 15 17:01 _testOperations.java
-rw-r--r--  1 root root  460  4月 15 17:01 _testOperationsNC.java
-rw-r--r--  1 root root 5418  4月 15 17:01 testPrxHelper.java
-rw-r--r--  1 root root  569  4月 15 17:01 testPrxHolder.java
-rw-r--r--  1 root root  567  4月 15 17:01 testPrx.java
到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成.

我们要实现自己的execute方法,覆盖testPrx.java的同名方法:
//TestImp.java
package Demo;

import Ice.Current;


public class TestImp extends _testDisp{

	public String execute(String mth, String cmd, Current __current) {
		// TODO Auto-generated method stub
		return mth+cmd;
	}



}
看到了,就是这么简单,仅仅覆盖_testDisp里面的抽象方法,实现把我们自己的实现代码填充到里面就行了.
之后,我们建立一个Server服务在10000端口进行侦听。
//Server.java
package Demo;

public class Server {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		try {
			ic = Ice.Util.initialize(args);
			Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(
					"TestAdapter", "default -p 10000");
			Ice.Object object = new TestImp();
			adapter.add(object, ic.stringToIdentity("TestAdapter"));
			adapter.activate();
			ic.waitForShutdown();
		} catch (Ice.LocalException e) {
			e.printStackTrace();
			status = 1;
		} catch (Exception e) {
			System.err.println(e.getMessage());
			status = 1;
		}
		if (ic != null) {
			// Clean up
			//
			try {
				ic.destroy();
			} catch (Exception e) {
				System.err.println(e.getMessage());
				status = 1;
			}
		}
		System.exit(status);
	}
}

貌似很复杂,其实里面的很多内容都是固定格式,有些部分需要固定和约定。其中上述红色部分是修改部分。

到目前为止,我们已经完成了大部分工作,我们还需要建一个客户端来对服务端的方法进行调用。
package Demo;

public class Client {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		try {
			ic = Ice.Util.initialize(args);
//			Ice.ObjectPrx base = ic
//					.stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");
			Ice.ObjectPrx base = ic
			.stringToProxy("TestAdapter:default -p 10000");

			testPrx test = testPrxHelper.checkedCast(base);
			if (test == null)
				throw new Error("Invalid proxy");
			System.out.println(test.execute("My first Ice ", "demo"));
			//System.out.println("ok");
		} catch (Ice.LocalException e) {
			e.printStackTrace();
			status = 1;
		} catch (Exception e) {
			System.err.println(e.getMessage());
			status = 1;
		}
		if (ic != null) {
			// Clean up
			//
			try {
				ic.destroy();
			} catch (Exception e) {
				System.err.println(e.getMessage());
				status = 1;
			}
		}
		System.exit(status);
	}
}


也貌似很复杂吧,其实不然,也很简单,同样包含很多固定格式。其中

System.out.println(test.execute("my first Ice ", "demo"));


是我们自己调用的逻辑。

赫赫,大功告成了,现在我们开始运行Server,再运行Client看到了么?
"My first Ice demo"

得到这样的结果,基本Ice之旅的Java部分简单实例我们基本完成。

Ice的性能和稳定性远超于我们的想象,skype知道么?其部分通讯架构就是采用的Ice.

分享到:
评论
1 楼 海鹤 2008-04-16  
学习了。谢谢

相关推荐

    Python库 | zeroc_ice-3.7.0-cp36-cp36m-win_amd64.whl

    标题中的“zeroc_ice-3.7.0-cp36-cp36m-win_...总的来说,zeroc_ice库为Python开发者提供了强大的分布式通信能力,简化了多进程间的数据交换,并且具有良好的性能和可扩展性,是构建复杂后端系统时值得考虑的工具之一。

    ASP.NET Zero Core 9.0.0 AbpZero最新源码 aspnet-zero-core-9.0.0

    ASP.NET ZERO 带补丁亲测。 利用ABP框架搭建的模板项目,它会提供预建的页面及强大的基础设施架构。利用它提供的基础框架代码能让你快速的开发你...基于Abp开发的aspnet-zero-core-9.0.0最新版本,测试可用,可以改名。

    openwrt-orangepi-zero-ext4-sdcard.img.gz

    OpenWrt-Lede_18.06.02 OrangePi Zero wifi-xr819 and soc-audio enabled! OrangePi Zero 安装OpenWrt 能够实现wifi和播放音乐。 详细安装和操作步骤: First Run boot-config: ...

    【AI论文和代码2021年】Zero-Shot_Text-to-Image Generation from OpenAI

    标题中的“Zero-Shot Text-to-Image Generation”指的是在没有经过特定示例训练的情况下,模型能够根据输入的文本描述生成相应的图像的技术。OpenAI的研究团队在这个领域取得了突破性进展,他们开发的网络能够实现这...

    Ice-3.6.4.msi

    Ice-3.6.4-msvc2015.msi zero-ice msvs2015 Ice-3.6.4-msvc2015.msi zero-ice msvs2015

    zero ICE快速入门java版

    zero ICE快速入门文档, ice是最优秀的rpc框架。 4、开发服务端代码如下 步骤一:编写Servant类即带有Disp的存根文件也就是说继承_HelloWorldDisp 这个类,这个类是个抽象类定义如下: public abstract class _...

    管理系统系列--Zero-Admin 是一套基于 go-zero 框架实现的电商系统,包括前台商城系统和后台管理系统.zip

    【标题】中的“管理系统系列--Zero-Admin”指的是一个电商解决方案,它采用了“go-zero”框架来构建。go-zero是一个用Go语言编写的微服务框架,旨在简化开发过程,提高系统的可扩展性和稳定性。Zero-Admin这个命名...

    AlphaZero-In-Unity_alphazero_五子棋AI_AlphaZero-In-Unity_missingopg

    在这个项目中,“AlphaZero-In-Unity”提供了四子棋、翻转棋和五子棋的AI实现,让玩家可以在Unity环境中与这些AI进行对战。 五子棋AI是AlphaZero应用的一个实例,五子棋是一种策略性很强的两人棋类游戏,目标是在...

    zero\axis2-1.6.1-war.zip

    zero\axis2-1.6.1-war.zip Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x ...

    aspnet-zero-core-6.3.0.zip

    此压缩包 "aspnet-zero-core-6.3.0.zip" 包含了该框架的最新稳定版本 6.3.0,适用于构建高效、可扩展的企业级解决方案。 **ABP 框架** ABP 是一套用于 .NET 平台的开源应用程序框架,它提供了一种结构化的方法来...

    Zero ICE 3.5.1 jar

    远程调用框架 Zero ICE 3.5.1 jar

    Ubuntu-zeroc-ice 环境安装

    在Ubuntu系统上安装Zeroc-ICE环境主要涉及以下知识点: 1. Ubuntu虚拟机的安装:用户需要在计算机上安装一个虚拟机软件,比如VirtualBox或者VMware,然后在虚拟机中安装Ubuntu操作系统。这一步骤是为了创建一个独立...

    Syngress - Zero-Day Exploit - Countdown to Darkness

    3/159 Syngress Zero-Day Exploit - Countdown to Darkness

    Python库 | zero_width_lib-1.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:zero_width_lib-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    aspnet-zero-core-8.1.0.zip

    此压缩包"aspnet-zero-core-8.1.0.zip"包含的是ASP.NET Zero 8.1.0版本的商业源代码。 **.NET Core** .NET Core 是微软推出的开源、跨平台的开发框架,用于构建服务器端应用。它支持Windows、Linux和macOS等操作...

    sun8i-v3s-licheepi-zero-with-800x480-lcd.dts

    sun8i-v3s-licheepi-zero-with-800x480-lcd

    zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    Zeroc ICE是一个开源的中间件平台,它支持C++、Java、Python、.NET等语言的分布式对象通信。ICE全称Internet Communications Engine,即互联网通信引擎,是一种用于开发分布式计算应用的强大工具。本文档主要围绕ICE...

    go-zero(go-zero-1.5.5.tar.gz)

    Go-Zero(go-zero-1.5.5.tar.gz)是一款基于Golang语言的高效Web和RPC框架,它致力于提供一套完整的工程化解决方案,帮助开发者在构建大规模并发服务时确保系统的稳定性和可靠性。这款框架已经经过了大量的实战测试...

    Ablon-Zero-Days-Thousands-Of-Nights-The-Life-And-Times-Of-Zero-D

    Ablon-Zero-Days-Thousands-Of-Nights-The-Life-And-Times-Of-Zero-Day-Vulnerabilities-And-Their-Exploits

Global site tag (gtag.js) - Google Analytics