博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SCA客户端以及基于Java的模型实现(一)
阅读量:2518 次
发布时间:2019-05-11

本文共 3040 字,大约阅读时间需要 10 分钟。

本节内容为阐述如何使用Java编程语言实现SCA组件。我们将会了解一个以Java实现的组件如何实现一个本地或远端服务,以及如何通过属性文件使得实现的方式可配置。

  本节内容为阐述如何使用Java编程语言实现SCA组件。我们将会了解一个以Java实现的组件如何实现一个本地或远端服务,以及如何通过属性文件使得实现的方式可配置。

  在SCA组件的实现模型中提供了一系列的标签,这些标签可以嵌入在代码中。这些标签在SCA运行期对实现有着重要的影响。每个组件实现本身也是其他服务的一个客户端。组件实现的这一特征在基本客户端模型一节中进行了说明。

   实现一个 Service

  一个基于Java类(一个Java实现)的组件实现能提供一个或多个服务。

  以Java实现的服务拥有一个接口,该接口可以用下列三种方式之一来定义:

  一个Java接口(必须是SCA风格的)

  •   一个Java类(可以方便地集成现有Java类,但是只能用来实现本地服务,见“实现一个本地服务”一节)
  •   一个从“Web服务描述语言” (WSDL)的portType生成的Java接口(从WSDL portType生成的Java 接口总是远程的,见“实现一个远程服务”一节)

  在Java实现上的服务要求实现服务接口定义的所有操作。如果服务的接口是以Java接口定义的,那么基于Java类的组件模型的实现可以实现该Java接口,也可以实现该服务接口所定义的所有操作。

  所有基于Java类的组件模型的实现,其Java类必须要有一个无参数的构造函数。

  @Service 标签是用于标注一个Java类实现了哪些服务。用于实现服务的类不一定要有@Service 标签。如果没有这个标签,那么该类所实现的标注有@Remotable标签的接口都将被视为该Java组件所提供的服务。若该类实现的接口中没有任何一个带有@Remotable标签,则默认该实现类本身为一个服务。

  @Service标签上有两个属性:

  •   interfaces – 接口或类对象的名称的数组。表示该组件所暴露的服务。
  •   value – 接口或类对象的名称。两种属性只能指定其中一个。

  没有属性的@Service标签是没有意义的,跟没有该标签是一样的。

  所定义的服务的service names默认是不带包名的接口或类的名字。

如果一个Java组件实现需要实现同一个接口的两个服务,则需要继承该接口(在子接口中,不能添加任何方法),然后在Java实现类的@Service标签中同时声明这两个接口即可。

  以下代码为在Java所实现服务的接口和服务的实现。

  package services.hello;
  public interface HelloService {
  String hello(String message);
  }
  package services.hello;
  import org.osoa.sca.annotations.*;
  @Service(HelloService.class)
  public class HelloServiceImpl implements HelloService {
  public String hello(String message) {
  ...
  }
  }

  以下代码为这个组件实现的组件类型定义。在这里,我们不需要指明组件的类型,因为这可以从Java类反射的信息中获得。

<?xml version="1.0" encoding="ASCII"?>

  以下代码是一个Java实现类,它本身即是一个服务接口。

package services.hello;
import org.osoa.sca.annotations.*;
@Service(HelloServiceImpl.class)
public class HelloServiceImpl implements AnotherInterface {
public String hello(String message) {
...
}
}

  根据@Service标签的默认规则,你也可以写成一下这种形式。

package services.hello;
public class HelloServiceImpl implements AnotherInterface {
public String hello(String message) {
...
}
}
以下代码为以上两种组件实现的组件定义,并且服务的接口是实现类自己所定义的。组件的类型不需要在这里指明,因为可以通过Java类反射信息得到。

<?xml version="1.0" encoding="ASCII"?>

  以下代码为实现了两个服务的Java实现类。

package services.hello;
import org.osoa.sca.annotations.*;
@Service(interfaces={HelloService.class, AnotherInterface.class})
public class HelloServiceImpl implements HelloService, AnotherInterface
{
public String hello(String message) {
...
}
}

  以下代码为该组件实现的组件定义。组件的类型不需要在这里指明,因为可以通过Java类反射信息得到。

<?xml version="1.0" encoding="ASCII"?>

  以下代码为通过定义接口的子接口,同时实现一个服务接口中的两个服务的Java实现类。

package services.hello;
public interface HelloService {
String hello(String message);
}
package services.hello;
public interface HelloService2 extends HelloService {
}
package services.hello;
import org.osoa.sca.annotations.*;
@Service(interfaces={HelloService.class,HelloService2.class})
public class HelloServiceImpl implements HelloService {
public String hello(String message) {
...
}
}

  以下代码为该组件实现的组件定义。组件的类型不需要在这里指明,因为可以通过Java类反射信息得到。

<?xml version="1.0" encoding="ASCII"?>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639375/viewspace-151144/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639375/viewspace-151144/

你可能感兴趣的文章
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>