除了基于在xml文件的静态配置外,还有两种方式的运行期配置,? 一种是注册引导服务(bootstrap service),在启动时动态配置;另一种是由外部条件触发,在远程对象方法?内部动态配置组件。
?1:? 使用Bootstrap Service进行动态配置
?
??? public class EmployeeRuntimeRemotingDestination extends AbstractBootstrapService
{
?private RemotingService remotingService;
??? public void initialize(String id,ConfigMap properties)
??? {??
??????? String service = "remoting-service";
??????? MessageBroker mb = getMessageBroker();
??????? remotingService = (RemotingService) mb.getService("remoting-service");
??????? RemotingDestination destination = (RemotingDestination) remotingService.createDestination(id);
??????? destination.setSource("flex.samples.crm.employee.EmployeeDAO");
??? }
??? @Override
??? public void start()
??? {
??????? // No-op
??? }
??? @Override
??? public void stop()
??? {
??????? // No-op
??? }
}
上面类写完之后还要在service-config.xml中进行配置:
?????? <services>
??? ?<service class="com.flexbook.dao.DatabaseCheckService" id="hsqldb" />
??????? <service-include file-path="remoting-config.xml" />
??????? <service-include file-path="proxy-config.xml" />
??????? <service-include file-path="messaging-config.xml" />???????
?? ??? <service class="com.flexbook.dao.EmployeeRuntimeRemotingDestination" id="runtime-employee-ro" />
??? </services>
???
??? 上面的示例很简单,我们获取id为"remoting-service"的RemotingService实例,然后以"testDestination"为id创建一个Destination,并设置了它?的source属性。之所以选择在initialize方法中创建Destination,是因为这个方法由MessageBroker调用,
调用的时机是在所有静态组件都创建完毕但启动之前,并且在此方法内创建的组件会自动启动(如果在start方法内创建组件,那么必须
由我们自己负责启动这些组件)。
???
??? 2. 使用远程对象进行动态配置
?????? 使用远程对象动态配置BlazeDS比bootstrap service更加灵活,它可以接受来自外部的输入被动地进行配置,而不是仅仅在BlazeDS启动时主动读取外部数据进行配置。
?????? 示例代码:
?????????? public class DestinationBuilder{
?????????? ?? String sevice = "message-service";
?????????? ?? MessageBroker mb = MessageBroker.getMessageBroker(null);
?????????? ?? MessageService rs = (MessageService)mb.getService(service);
?????????? ?? if(null == rs.getDestination(destId)){
?????????? ?? ?MessageDestination md = (MessageDestination) rs.createDestination(destId);
?????????? ?? ?md.start();
?????????? ?? }
?????????? ?? return destId;
?????????? }
?????? ???上面传入的参数为"null"说明我们期望获得默认的MessageBroker实例。
?????? ???
?????? ???在 remoting-config.xml中DestinationBuilder的配置片段:
?????? ???<destination>
?????? ????<properties>
?????? ?????<source>com.flexbook.blazeds.DestinationBuilder</source>
?????? ????</properties>
?????? ???</destination>
?????? ???
?????? 定义在remoting-config.xml中的原因是由于我们必须手动启动这个配置文件。