IceGrid 服务初次搭建【Java】

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"));     
         }  
    }  

项目结构:

IceGrid 服务初次搭建【Java】_第1张图片

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文件

      
          
              
                  
                      
                  
              
                        
                         
                      
                        
                            
                        
                 
                  
                  
                                                  
                  
              
          
      

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.配置文件目录结构

IceGrid 服务初次搭建【Java】_第2张图片

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运行,然后就可以查看各节点信息,
也可以开启服务
IceGrid 服务初次搭建【Java】_第3张图片





你可能感兴趣的:(客户端代理))