Nucleus中的WebService

一、开发包

现有文档:
现用开发包:
  • 服务端开发包使用apache axis

  • 客户端开发包使用systinet wasp 5.0

服务端和客户端使用不同开发包的原因:
  • systinet的服务端开发包必须与systinet server一起使用,而我们选择了JBoss等,因此服务端选择了其它的开发包

  • systinet的服务端开发包和客户端开发包缺省占用同一个socket端口,因此无法在同一个应用中同时使用必须systinet的服务端和客户端,因此服务端选择了其它的开发包,对systinet进一步的学习可能会解决这个问题

  • axis的客户端开发包使用了"enum"做普通标识,不能在JDK5中编译,而我们必须用JDK5,因此客户端选择了其它的开发包

服务端和客户端使用不同开发包带来的问题:
  • 无法对复杂的数据类型如ArrayList,HashMap等提供支持,因为不同的开发包对非标准WebService类型的编解码方案不一样

  • 引入了很多不必要的类库和学习成本,systinet wasp 5.0实在是个很庞大的东西,目前并不能高效的使用它,测试过程中发现目前的使用方式有性能问题

解决方案:
  • 客户端也使用axis,在1.4下将生成的stub编译为jar包,然后在1.5中引用

  • 目前对systinet的了解非常有限,以上关于它的论述可能不正确,进一步学习后可能会解决上述问题

  • 等待axis或systinet各自的升级

二、Nucleus中的WebService

实现

由《简单的axis》可知,发布WebService需要一些配置描述符,目前在M2/Engine/ServiceInterface/nucleus/WEB-INF/中

而增加或修改WebService,只需要修改server-config.wsdd;通常有几种方式修改:

  • 如果对axis比较熟悉,可以手工修改

  • 如果有合适的eclipse插件,可以使用插件向导修改

  • 如果有JBuilder,可以使用JBuilder向导修改

目前使用的是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的步骤是:

  1. 定义一个服务接口:public interface nucleus.bizcommon.servicegateway.NewService;

  2. 实现这个接口:public class NewService implements nucleus.bizcommon.servicegateway.NewService;

  3. 在WebServiceProvider中增加一个方法:NewService getNewService();

  4. 在ExternalService和InternalService中实现这个方法

  5. 使用JBuilder发布NewService

  6. 修改server-config.wsdd

  7. 打包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值