本文共 3040 字,大约阅读时间需要 10 分钟。
本节内容为阐述如何使用Java编程语言实现SCA组件。我们将会了解一个以Java实现的组件如何实现一个本地或远端服务,以及如何通过属性文件使得实现的方式可配置。
在SCA组件的实现模型中提供了一系列的标签,这些标签可以嵌入在代码中。这些标签在SCA运行期对实现有着重要的影响。每个组件实现本身也是其他服务的一个客户端。组件实现的这一特征在基本客户端模型一节中进行了说明。
实现一个 Service
一个基于Java类(一个Java实现)的组件实现能提供一个或多个服务。
以Java实现的服务拥有一个接口,该接口可以用下列三种方式之一来定义:
一个Java接口(必须是SCA风格的)
在Java实现上的服务要求实现服务接口定义的所有操作。如果服务的接口是以Java接口定义的,那么基于Java类的组件模型的实现可以实现该Java接口,也可以实现该服务接口所定义的所有操作。
所有基于Java类的组件模型的实现,其Java类必须要有一个无参数的构造函数。
@Service 标签是用于标注一个Java类实现了哪些服务。用于实现服务的类不一定要有@Service 标签。如果没有这个标签,那么该类所实现的标注有@Remotable标签的接口都将被视为该Java组件所提供的服务。若该类实现的接口中没有任何一个带有@Remotable标签,则默认该实现类本身为一个服务。
@Service标签上有两个属性:
没有属性的@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) { ...}…} |
<?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/