您的位置:首页 > 编程语言 > Java开发

Java-ICE入门教程(2-2:Java实例)

2015-04-17 10:40 465 查看
1.安装ICE
下载地址:https://zeroc.com/download.html
需要配置环境变量:
classPath添加:
%ICE_HOME%/lib/db.jar;%ICE_HOME%/lib/Ice.jar
path添加:%ICE_HOME%/bin;

cmd命令:slice2java 出现如下画面表示安装成功:
.




3.手写ICE文件,注意后缀名为 .ice:
message.ice,文件内容如下:

module message
{
interface messageDemo{//接口类
int maxNum(int a,int b);//接口方法,参数和返回值为int
};
};

4.生成JAVA文件:
cmd:slice2java message.ice





5.接下来要写接口实现类,需要继承这么一个类:_XXXXXXXXDisp:
package ice.message.impl;
import Ice.Current;
import message._messageDemoDisp;

public class MessageI extends _messageDemoDisp {

@Override
public int maxNum(int a, int b, Current __current) {
// TODO Auto-generated method stub

if(a>b)
return a;
else if(a<b)
return b;
else {
System.out.println("妹的,他俩居然一样大!!!");
return 0;
}
}

}

6.服务端代码:

package ice.message.server;

import ice.message.impl.MessageI;

import com.bean.PrinterI;

public class IceInit {

public static void init()
{

int status = 0;
Ice.Communicator ic = null;
try {
//初使化连接,args可以传一些初使化参数,如连接超时时间,初使化客户连接池的数量等
ic = Ice.Util.initialize();
//创建名为meaaageDemoAdapter的适配器,并要求适配器使用缺省的协议(TCP/IP侦听端口为10000的请求)
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("meaaageDemoAdapter", "default -h 10.0.67.106
-p 10000");
//实例化一个MessageI对象,为Message接口创建一个服务对象
Ice.Object object = new MessageI();
//将服务单元增加到适配器中,并给服务对象指定名称为meaaageDemo,该名称用于唯一确定一个服务单元
adapter.add(object, Ice.Util.stringToIdentity("meaaageDemo"));
//激活适配器,这样做的好处是可以等到所有资源就位后再触发
adapter.activate();
System.out.println("已启动 meaaageDemoAdapter default -h 10.0.67.106 -p 10000");
//让服务在退出之前,一直持续对请求的监听
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);
}

}

7:客户端调用代码:

package ice.message.client;

import java.lang.reflect.Method;

public class IceClient {

public int maxNum(int a,int b)
{
int status = 0;
int resultNum = 0;
Ice.Communicator ic = null;
try {
//初使化
ic = Ice.Util.initialize();
//传入远程服务单元的名称、网络协议、IP及端口,获取Printer的远程代理,这里使用的stringToProxy方式
Ice.ObjectPrx objectPrx = ic.stringToProxy("meaaageDemo:default -h 10.0.67.106 -p 10000");
//通过checkedCast向下转换,获取Printer接口的远程,并同时检测根据传入的名称获取的服务单元是否Printer的代理接口,如 果不是则返回null对象

Method method
= objectPrx.getClass().getMethod("maxNum", new Class[] {Integer.class,Integer.class});

resultNum= (Integer) method.invoke(objectPrx, new
Object[] {a,b});

} 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);
return resultNum;
}

}
****************************蓝色字体也可以这么写*,但是还是建议第一种方法********************************

message.messageDemoPrx messageDemoPrx = message.messageDemoPrxHelper.checkedCast(base);
if (messageDemoPrx == null) throw new Error("Invalid proxy");
//把Hello World传给服务端,让服务端打印出来,因为这个方法最终会在服务端上执行
resultNum= messageDemoPrx.maxNum(a, b);;

8.测试代码来敲门:
1)先启动服务端:
public class MessageTest {
public static void main(String[] args) {
IceInit.init();
}
}
2)测试调用:
public class MessageClientTest {
public static void main(String[] args) {
IceClient iceClient=new IceClient();
int rer=iceClient.maxNum(14,14);
System.out.println("结果:"+rer);
}
}

***********************************************************************
本人才疏学浅:如未看懂:请移驾:
/article/2658235.html
http://masterkey.iteye.com/blog/182954
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: