科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用于Java的SCA客户机和实现模型

用于Java的SCA客户机和实现模型

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SCA Java 实现模型提供了用于在 Java 中实现 SCA 组件的框架。组件实现可以提供服务,也可以充当其他服务的客户机。本文将说明 SCA Java 组件实现和非 SCA Java 组件实现可以如何获得对服务的访问和调用服务方法。

作者:Sreedevi Penugonda 来源:论坛整理 2007年11月17日

关键字: java SCA 客户机 模型

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

引言

  SCA Java 实现模型提供了用于在 Java  中实现 SCA 组件的框架。组件实现可以提供服务,也可以充当其他服务的客户机。本文将说明 SCA Java 组件实现和非 SCA Java 组件实现可以如何获得对服务的访问和调用服务方法。在本文中,所有元数据都使用 Java 2 Standard Edition (J2SE) 5 提供的 Annotation 功能定义。不过,SCA 服务客户机和组件实现也可使用 J2SE 1.4。

  基本组件实现模型

  此模型描述本地或远程服务的实现以及特定于实现的配置属性。

  实现服务

  服务使用接口表示,而接口则是使用以下方法之一进行定义的:

  • Java 接口(SCA 的首选方式)
  • Java 类
  • 从 Web 服务描述语言(Web Services Description Language,WSDL)端口类型生成的 Java 接口

  Java 类组件实现会实现服务接口定义的所有操作,它使用 @Service Annotation 来指定服务通过使用 Java 实现而实现的服务接口。旨在用作服务实现的类并不必具有 @Service Annotation。@Service Annotation 具有两个特性:

  • Interfaces——此值是应该由其组件作为服务公开的接口或类对象的值。
  • Value——仅在提供单个服务接口时的快捷方式。没有特性的 @Service 没有意义。

  以下代码片段显示了名为 PayrollDataService 的 Java 服务接口和名为 PayrollDataServiceImpl 的 Java 接口的 Java 实现类。

  清单 1. Java 服务接口

package services.payrolldata;
public interface PayrollDataService {
float getBasic(String employeeID);
float getvariablePay(String employeeID);
float getHRA(String employeeID);
float getProfessionalTax(String employeeID);
float getNetPay(String employeeID);

  清单 2. Java 服务组件实现

package services.payrolldata;
Import org.osoa.sca.annotations.*;
@Service(PayrollDataService.class)
public class PayrollDataServiceImp implements PayrollDataService {
public float getBasic(String employeeID){ . . . }
public float getVariablePay(String employeeID){ . . . }
public float getHRA(String employeeID){  . . . }
float getProfessionalTax(String employeeID){  . . . }
public float getNetPay(String employeeID){  . . . }
}

  如果在 Java 实现类中,服务接口由类本身定义,则上述代码中的 @Service Annotation 将替换为 @Service(PayrollDataServiceImp.class)。下面将说明此组件实现的组件类型,如清单 3 中所示。

  清单 3. 组件类型

<!--<?xml version="1.0" encoding="ASCII"?>
<componentType xmlns=http://www.osoa.org/xmlns/sca/0.9>
<service name="PayrollDataService">
<interface.java interface="services.payrolldata. PayrollDataService"/>
</service>
</componentType> -->

  使用了接口的子类来提供具有相同接口的两个服务。@Service Annotation 同时列出了这两个接口。

  实现远程服务

  通过入口点发布远程服务,以提供访问外部组件的方法。为了定义远程服务,将在服务的 Java 接口中添加 @Remotable Annotation。接口不由 Java 类定义的服务不是远程服务。从 WSDL 端口类型生成的 Java 接口是远程接口。

  以下将对带 @Remotable Annotation 的远程服务的 Java 接口进行说明:

  清单 4. 带 @Remotable Annotation 的远程服务的 Java 接口

package services.payroll;
import org.osoa.sca.annotations.Remotable;
@Remotable
public interface PayrollService{
public PayrollStatement getPayrollStatement(String employeeID);

  下一个代码片段显示了 PayrollStatement Java 接口。

  清单 5. PayrollStatement Java 接口

package services.payroll;
import java.util.List;
public interface PayrollStatement {
List getPayrollDetails();
float getNetPay();
}

  远程服务使用封送技术来交换复杂数据类型。在使用 Web 服务绑定时,会将服务数据对象 (Service Data Object) 或 JAXB 数据类型作为参数传递。远程服务使用按值数据交换语义。

  远程服务的实现上的 @AllowPassByReference Annotation 用于声明它是否允许在对其进行调用时通过引用数据交换语义进行传递。

  以下代码片段显示了实现远程服务并允许通过引用传递的 Java 组件实现。

  清单 6. 具有远程服务和允许通过引用传递的 Java 组件实现

package services.payrolldata;
Import org.osoa.sca.annotations.*;
@Service(PayrollDataService.class)
@AllowsPassByReference
public class PayrollDataServiceImp implements PayrollDataService {
       . . . .
}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章