SCA了解

1、在公司看到一个《SOA与SCA,SDO》的培训PPT,看到SCA的编程模型(具体见附件),有些看不到懂,特从网上找了一些相关资料分析,具体参考:http://www.ibm.com/developerworks/cn/webservices/ws-sca/

 

资料摘取:

 

服务组件是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。我们可以把它看成是构建我们应用的积木。我们可以非常容易地把 传统的POJO,无状态会话BEAN等包装成SCA中的服务组件。 SCA服务组件的主要接口规范是基于WSDL(Web Service Description Language)的,另外为了给Java编程人员提供一个比较直接的接口,SCA的部分服务组件也提供了Java接口。因此,使用服务组件的客户端可以 选择使用WSDL接口或Java接口。

服务组件提供给别的服务调用的入口叫Interface(接口)。而服务组件本身可能也需要调用别的服务,这个调用出口叫Reference(引 用)。无论是接口还是引用,其调用规范都是WSDL或Java接口



1.3 同步调用和异步调用

我们知道,常见的方法调用都是同步调用,这种调用方式是一种阻塞式的调用方式,即客户端(主调用方)代码一直阻塞等待直到被服务端(被调用方)返回 为止。这种调用方式相对比较直观,也是大部分编程语言直接支持的一种调用方式。但是,如果我们面对是基于粗粒度的服务组件,面对的是一些需要比较长时间才 能有响应的应用场景,那么我们就需要一种非阻塞式调用方式,即异步调用方式。

SCA编程模式提供了三种方式的异步调用,它们分别是:

1. 单向调用方式。

2. 延迟响应方式。

3. 请求回调方式。

单向调用

单向调用方式是最为简单的异步调用方式,在这种调用方式中,客户端发出请求之后就不再关心服务端的情况,包括是否执行成功,返回值是什么等等。我们 可以用下面的图 4示来描述这种单向调用方式:


图 4: 单向调用
图 4: 单向调用

单向调用方式是一种不管调用结果的方式,但是在很多情况下我们是需要知道调用结果的。我们需要知道调用是否成功,需要知道调用的结果,就算调用失败 我们也希望知道错误代码等信息。在这种情况下,延迟响应和请求回调就是两种能够让我们知道调用结果的方式。

延迟响应方式

延迟响应方式是指客户端在发出调用请求之后继续执行,但是经过一段时间之后,客户端再调用相应的方法去检索返回结果,并通过参数指定如何根据调用的 结果而执行进一步动作。由于是异步调用方式,因此,在第一次发出调用请求的时候,服务端需要返回一个称为票据(Ticket)的对象。这个对象会作为第二 次发出检索结果请求时的一个参数。显然,这个Ticket对象的作用与WEB编程的SessionID非常类似。我们可以用图 5 来表示延迟相应调用方式:


图 5:延迟响应调用方式
图 5:延迟响应调用方式

请求回调

与延迟响应方式类似,请求回调方式也能得到服务端的响应,但是不同的是这个响应是由服务端通过回调方式来触发的,而不像延迟响应方式由客户端来主动 检索的。请求回调方式的原理与许多编程语言中的回调机制类似,不同的是这里实现的层次比较高一点。我们可以用图6来表示请求调用方式:


图 6:请求回调方式
图 6:请求回调方式

 


 

1.4 SCA客户端的两种调用方式

从接口的角度,SCA的客户端编程模型有两种方式:

1. 静态调用方式

2. 动态调用方式

静态调用方式

静态调用方式是一种类型安全的方式,也是在一般Java编程中最为常见的方式。所谓类型安全指的就是在编译的时候就做类型的检查,而不是等到运行的 时候发现类型错误问题。说明示例如下:


在SCA客户端编程中,静态方式就是直接拿到实际实现的接口类型,也即直接拿到Java接口。

动态调用方式

与静态调用方式相对,动态调用方式是一种非安全的方式。它的优点是调用非常灵活,但同时带来的不利之处是部分问题在编译的时候是发现不了的,只有等 到运行的时候才能发现。说明示例如下:


像上面例子所示,在动态调用方式中,客户端通过invoke方法的字符串参数的方式来指定具体要调用的方法名称。很显然,在这种方式下,如果方法名 有误是不能在编译时发现的。

关于动态调用方式另外要注意的一点是,在这种调用方式下,所有参数传递都是通过DataObject的方式,即SDO的方式。哪怕实际参数只是一个 字符串,也需要包装成一个DataObject的方式。

接口类型与调用方式

实际上客户端采用哪种调用方式是与接口类型有密切的关系。当提供的接口类型是WSDL类型的,那么客户端的调用方式只能是动态调用方式。由于 WSDL是SCA模型中主要的接口方式,这样就导致动态调用方式在SCA编程模型中非常普遍。但是如果提供的接口类型时Java类型的,那么客户端的调用 方式可以是动态调用方式,也可以是静态调用方式。

 

"

 

同时,上面网址中,还编写了一个具体WPS编写的实例:

1)创建模块

2)创建接口

3)创建组件,绑定接口,创建实现类

4)创建调用(有WSDL和JAVA两种模式)

5)创建JSP来进行调用(也分为WSDL及JAVA两种模式)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值