一、开发包
现有文档:
现用开发包:
服务端和客户端使用不同开发包的原因:
-
systinet的服务端开发包必须与systinet server一起使用,而我们选择了JBoss等,因此服务端选择了其它的开发包
-
systinet的服务端开发包和客户端开发包缺省占用同一个socket端口,因此无法在同一个应用中同时使用必须systinet的服务端和客户端,因此服务端选择了其它的开发包,对systinet进一步的学习可能会解决这个问题
-
axis的客户端开发包使用了"enum"做普通标识,不能在JDK5中编译,而我们必须用JDK5,因此客户端选择了其它的开发包
服务端和客户端使用不同开发包带来的问题:
解决方案:
二、Nucleus中的WebService
实现
由《简单的axis》可知,发布WebService需要一些配置描述符,目前在M2\Engine\ServiceInterface\nucleus\WEB-INF\中
而增加或修改WebService,只需要修改server-config.wsdd;通常有几种方式修改:
目前使用的是JBuilder+手工修改:
-
可以先新建一些无关的工程,熟悉一下JBuilder对axis和WebService的支持
-
熟悉了之后,使用JBuilder发布Nucleus中新的WebService,从而产生新的server-config.wsdd
-
从新的server-config.wsdd中拷贝出新的WebService对应的描述,粘贴到M2\Engine\ServiceInterface\nucleus\WEB-INF\server-config.wsdd中
设计
为了不依赖于WebService,Nucleus以接口的形式定义了基础服务的接口:
package nucleus.bizcommon.servicegateway:
public interface AgentService
public interface EngineManager
public interface MonitorWebService
public interface OrganizationWebService
public interface PDMWebService
public interface ReportWebService
public interface TaskListWebService
为了在分布式和嵌入式之间方便的进行整体切换,Nucleus定义了服务网关接口:
package nucleus.servicegateway:
public interface WebServiceProvider {
PDMWebService getPDMWebService();
OrganizationWebService getOrganizationWebService();
EngineManager getEngineWebService();
MonitorWebService getMonitorWebService();
TaskListWebService getTasklistWebService();
ReportWebService getReportWebService();
AgentService getAgentService();
}
同时,分别提供了分布式的服务网关
public final class nucleus.servicegateway.ExternalService implements WebServiceProvider
和嵌入式的服务网关
public final class nucleus.servicegateway.InternalService implements WebServiceProvider
然后通过配置就可切换
<bean id="web.service.provider" class="nucleus.servicegateway.InternalService"/>
<!-- <bean id="web.service.provider" class="nucleus.servicegateway.ExternalService"/> -->
此处存在不方便扩展、接口命名没有对应意图(如接口名称中不应包含"Web")等问题,似乎应该把消息系统也包括进来
打包
目前使用CruiseControl和ant来打包,脚本文件位于M2\Engine\*.xml
三、总结
综上所述,新建WebService的步骤是:
-
定义一个服务接口:public interface nucleus.bizcommon.servicegateway.NewService;
-
实现这个接口:public class NewService implements nucleus.bizcommon.servicegateway.NewService;
-
在WebServiceProvider中增加一个方法:NewService getNewService();
-
在ExternalService和InternalService中实现这个方法
-
使用JBuilder发布NewService
-
修改server-config.wsdd
-
打包