1.编写ice接口
module Demo {
interface Printer
{
void printString(string s);
};
}; 2.实现接口类
package Demo;
import org.apache.log4j.Logger;
import Ice.Current;
/**
* ice java server 业务实现类
* @author peidw
*
*/
public class PrinterImpl extends _PrinterDisp {
/**
*
*/
private static final long serialVersionUID = 4526797879081429219L;
private static Logger logger=Logger.getLogger("");
@Override
public void printString(String s, Current __current) {
// TODO Auto-generated method stub
System.out.println("-----------------"+s);
logger.info("收到请求:"+s);
}
} 3.编写service
package Demo;
/**
* ice 例子 部署 在icegrid 里,运行server类必须继承Ice.Application
*
* @author peidw
*
*/
public class PrinterServer extends Ice.Application {
@Override
public int run(String[] args) {
System.out.println("~~~~~~~~~~服务器开始启动~~~~~~~~~~~~~");
if (args.length > 0) {
System.err.println(appName() + ": too many arguments");
return 1;
}
Ice.ObjectAdapter adapter = communicator().createObjectAdapter("PrinterAdapter");
Ice.Properties properties = communicator().getProperties();
Ice.Identity id = communicator().stringToIdentity(properties.getProperty("Identity"));
System.out.println("Ice.Identity id =" + id.name);
Ice.Object object = new PrinterImpl();
adapter.add(object, communicator().stringToIdentity("SimplePrinter"));
adapter.activate();
communicator().waitForShutdown();
return 0;
}
static public void main(String[] args) {
System.out.println("**********服务器启动了***********");
PrinterServer app = new PrinterServer();
String conf = "D:\\ice\\demo2\\pserver.cfg";
int status = app.main("Server", args, conf);
System.exit(status);
}
} 4.编写client
package Demo;
public class PrinterClient extends Ice.Application{
@Override
public int run(String[] args) {
System.out.println("~~~~~~~~~~~客户端开始测试~~~~~~~~~~~~~~~~~~");
//获取Printer的远程代理,这里使用的stringToProxy方式
Ice.ObjectPrx base = communicator().stringToProxy("SimplePrinter");
//通过checkedCast向下转换,获取Printer接口的远程,并同时检测根据传入的名称获取的服务单元是否Printer的代理接口,如果不是则返回null对象
Demo.PrinterPrx printer = Demo.PrinterPrxHelper.checkedCast(base);
if (printer == null) throw new Error("Invalid proxy");
//把Hello World传给服务端,让服务端打印出来,因为这个方法最终会在服务端上执行
for(int i = 0;i<10;i++){
printer.printString("xxxxxxxxxxxxxxxxxx "+i);;
}
return 0;
}
public static void main(String[] args){
System.out.println("**************客户端开始测试*****************");
PrinterClient app = new PrinterClient();
System.exit(app.main("client", args,"D:\\ice\\demo2\\client.cfg"));
}
} 项目结构:

5.创建server.cfg和client.cfg文件
server.cfg内容: PrinterAdapter.AdapterId=PrinterAdapter
PrinterAdapter.Endpoints=tcp client.cfg内容:
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 192.168.1.55 -p 4061 6.编写registry.cfg文件
IceGrid.InstanceName=SzcIceGrid
#客户端连接到注册中心的地址
IceGrid.Registry.Client.Endpoints=tcp -p 4061
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier
#注册中心数据保存路径,需要手动创建文件夹
IceGrid.Registry.Data=D:\ice\demo2\registry
IceGrid.Registry.DynamicRegistration=1
Ice.Admin.InstanceName=AdminInstance
Ice.Admin.ServerId=Admin 7.编写node1.cfg文件
# 注册中心地址
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
#node名
IceGrid.Node.Name=node1
IceGrid.Node.Endpoints=tcp
#node存储路径
IceGrid.Node.Data=D:\ice\demo2\node1
IceGrid.Node.Output=D:\ice\demo2\node1
IceGrid.Node.CollocateRegistry=0 8.编写app.xml文件
<icegrid>
<application name="PrinterApplication">
<node name="node1">
<server id="PrinterServer" exe="java" activation="on-demand">
<adapter name="PrinterAdapter" endpoints="tcp -h 127.0.0.1">
<span style="white-space:pre"> </span><object identity="SimplePrinter" type="::Demo::Printer" property="Identity"/>
</adapter>
<option>-jar</option>
<option>D:\code\Spring\testIceGrid_2\target\testIceGrid-0.0.1-SNAPSHOT.jar</option>
<property name="Ice.Trace.Network" value="1"/>
<properties>
<property name="Ice.ThreadPool.Server.SizeMax" value="1" />
</properties>
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span><property name="IceMX.Metrics.Debug.GroupBy" value="id"/>
<property name="IceMX.Metrics.Debug.Disabled" value="1"/>
<property name="IceMX.Metrics.ByParent.GroupBy" value="parent"/>
<property name="IceMX.Metrics.ByParent.Disabled" value="1"/>
</server>
</node>
</application>
</icegrid> 9.修改jar包中的MANIFEST.MF文件中,添加依赖
nifest-Version: 1.0
Class-Path: lib/ice-3.6.3.jar lib/icebox-3.6.3.jar lib/log4j-1.2.17.jar
Main-Class: Demo.PrinterServer 10.建对应的目录结构
eg:D:\ice\demo2\node1
11.配置文件目录结构
12.测试
1、icegridregistry --Ice.Config=registry.cfg
2、icegridnode --Ice.Config=node1.cfg
3、icegridadmin --Ice.Config=node1.cfg 在node1节点上启动,然后添加app.xml配置文件
application add 文件名,添加配置文件
application remove 文件名,删除配置文件
4、在ice的安装包中,找到bin\icegridgui.jar,然后以java -jar icegridgui.jar运行,然后就可以查看各节点信息,
也可以开启服务

本文详细介绍了如何使用Java进行IceGrid服务的搭建,包括编写ICE接口、实现接口类、创建服务、编写客户端,以及配置server.cfg、client.cfg、registry.cfg等文件,最后进行测试。

1380

被折叠的 条评论
为什么被折叠?



