SE开发
1)实现Bootstrap接口,这个类将在SE在安装时被调用。所有和程序相关的动作将在这个类中完成初始化与消除(在uninstall时)
2)实现接口:serviceunitManager接口。这个接口在SE部署SU时将会被调用。用来管理SU的生命周期,如Start,Stop,ShutDown,Init。所有和SU相关的初如化工作将在里初始化与结束。它的构造函数中接收javax.jbi.component.ComponentContext做为参数。
在start方法中:
a. 组件必须通知JBI引擎,它已经是一个激活的endpoint。
b. 创建一个与service名字相匹配的javax.xml.namespace.QName类型的类实例,和你组件将提供的URI。
c. 这些值必须与组件的部署描述文档中的值一样
d. 创建一个javax.jbi.servicedesc.ServiceEndpoint类对象,并通过ComponentContextk r activateEndpoint方法来激活。
e. 在部署描述文档中引用你所创建的endpoint。如下所示:
QName qn = new QName("http://www.payroll.org/payroll.wsdl","PayrollService");
try {
ServiceEndpoint ref = mContext.activateEndpoint(qn, "SE_Endpoint");
} catch (JBIException JBIe) {
...
}
以上和种配置不应用硬编码的方式写入,而应当是通过ServiceUnitManager的deploy方法中的ServiceUnitPath参数获得XML描述文档jbi.xml,经过parse生成正确的值。
3)实现Runnable接口,来接收来自NMR或JBI Engine的消息。
并且实现:getServiceDescription(ServiceEndpoint),isExchangeWithConsumerOkay(SE,ME),ResolveEndpointReference(DocumentFragment).
4)实现component类。这个类是组件的核心类,负责接收,处理,返回消息。
在init方法中:
a. 存储ComponentContext
b. 创建ServiceUnitManager
Public void init(ComponentContext compCtx){
If(compCtx!-null){
This.mContext=compCtx;
This.mServiceUnitMgr=new ServiceUnitManager(compCtx);
}
}
在start方法中:
a. 从ComponentContext中接收DeliveryChannel对象。
b. 创建接收消息的MsgReceiver,并以DeliveryChannel对象为参数。
c. 在MsgReceiver对象中启动新进程。如下所示:
try {
this.mChannel = this.mContext.getDeliveryChannel();
this.mMsgReceiver = new TestMsgReceiver(this.mChannel);
Thread recThrd = new Thread(this.mMsgReceiver);
recThrd.start();
} catch (MessagingException me) {
...
}
整体类图如下所示:(要图者QQ联系:15196866)