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

引言

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 具有两个特性:

Inte***ces——此值是应该由其组件作为服务公然的接口或类对象的值。 Value——仅在提供单个服务接口时的快捷方式。没有特性的

@Service 没有意义。

以下代码片断显示了名为 PayrollDataService 的 Java 服务接口和名为

PayrollDataServiceImpl 的 Java 接口的 Java 实现类。

清单 1. Java 服务接口

package services.payrolldata;

public inte***ce 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. 组件类型

使用了接口的子类来提供具有相同接口的两个服务。@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 inte***ce PayrollService{

public PayrollStatement getPayrollStatement(String

employeeID);

}

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

清单 5. PayrollStatement Java 接口

package services.payroll;

import java.util.List;

public inte***ce 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

{

. . . .

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值