module Demo {
interface Printer
{
void printString(string s);
};
};
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);
}
}
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);
}
}
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"));
}
}
PrinterAdapter.AdapterId=PrinterAdapter
PrinterAdapter.Endpoints=tcp
client.cfg内容:
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 192.168.1.55 -p 4061
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
# 注册中心地址
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
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
eg:D:\ice\demo2\node1