ICE学习(四)-Ice Box介绍

参考http://doc.zeroc.com/display/Ice/IceBox

IceBox是一个易用的ice应用服务的框架。它使用通用的IceBox server来取代一般的Ice serverIceBox server通过属性来配置,可以被远程管理。这种架构有很多优点如下:

1.一个IceBox server启动的几个服务可以获得 Ice's collocation optimizations提供的优化。

2.多种服务的组合可以通过配置来完成,不用编译和连接。他把服务和server解耦。

3.多个JAVA服务可以被一个JVM激活,而不是每个服务都有一个JVM

4.服务实现IceBox service接口,为开发人员提供了统一的框架和集中化管理。

5.IceBox被整合在IceGrid中。

 IceBox提供了一种耳目一新的观点。开发者集中于编写服务,而不是应用程序。使用IceBox,一个程序变成了一些离散的服务集合,他们的组合由配置来动态产生。


Developing IceBox Services

写一个IceBox service 需要实现一个接口,如下

module IceBox {

local interface Service {

    void start(string name, Ice::Communicator communicator, Ice::StringSeq args);

    void stop();

};

};

一个service需要实现2个操作startstop。这些操作被IceBox server调用,startservice被加载后调用,stopserver被关闭时调用。

start使service能够初始化自己,一般是创建adapterservant

nameargs通过IceBox加载的配置文件传递进来的。

communicatorIceBox server创建的。根据service的配置,communicator可能被IceBox server下的其他service分享。因此,要注意,给不同服务的适配器,起不同的名字。

Stop用来释放资源。如_adapter->destroy();也可以使用waitForDeactivate ,这可以保证在adpater撤销前,其中的数据能够全部发送出去。Start中传递过来的communicator的实例的释放,由server负责。

有些情况,stop中不用销毁adapter。比如,多个service共享一个communicator,并且service最后会被重启。

Service还可以让他的adaptercommunicator一起销毁。

这些接口都是本地接口,代表serverservice的一种契约,并不能用来和客户端远程连接。和远程客户的通信是通过servant来进行的。

C++示例代码可以在ZeroC\Ice-3.5.1-demos\demo\IceBox\hello中找到。

 

Configuring IceBox Services

Service编译出来的是一个库文件,我们通过配置文件,使 IceBox server来加载库文件,并运行其中的service

配置属性如下

IceBox.Service.name=entry_point [args]

其中,nameservice的名字,它会被传递到之前介绍的start方法中,service的名字必须是唯一的。

entry_point 代表库名字和入口函数。比如HelloService:create代表加载HelloService.dll,他的入口函数create。注意库的名字不需要后缀。

Args部分,会经过检查,其中有--name=value这种形式的参数,会被作为属性定义,剩下的参数,会被传到start中的args中。比如

IceBox.Service.Hello=HelloService:create --Ice.Trace.Network=1 hello there

--Ice.Trace.Network=1 是属性定义

Hellothere作为2个元素被传递到startargs中。


Starting the IceBox Server

ZeroC\Ice-3.5.1-demos\demo\IceBox\hello为例

首先编译helloservice工程。得到helloserviced.dll,这就是我们的服务。

Config.icebox是配置文件。

#

# The hello service

#

IceBox.Service.Hello=helloservice:create --Ice.Config=config.service

可以指定hello serviceadapter的网络节点信息

Hello.Endpoints=tcp -p 10001

之后在CMD中执行

icebox --Ice.Config=config.icebox

使用icebox读取配置文件来加载service

在运行client,发送信息。Service就能接收到。

还可以把IceBox配置成windows  service。这里先不做介绍。

你可能感兴趣的:(ICE)