论坛首页 Java企业应用论坛

(转)SCA1.0应用开发过程

浏览 1162 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2008-01-17  
SOA
引言
介绍
Tuscnay近日将推出 1.0版本,它在实现了 SCA1.0的基础上,还开发了一些扩展内容,为开发者提供了将更多主流技术一直到Tuscany环境下的手段。

目标
本文是在认真研究 Tuscany SCA环境的前提下,总结以前我们在 SOA方面所作的研究,提出了 一个利用 Tuscany1.0的技术能力构建一个具有分布式特点的服务化的应用系统,读者可以从中看出 SCA1.0和Tuscany1.0为我们所展现的SOA前景。

术语和缩略语
构件:本文将SCA中的Component译为构件。
组件:本文将SCA中的Composite译为组件。

--------------------------------------------------------------------------------

背景介绍
SCA首先是想解决 SOA平台之间的兼容性问题,但是道路漫长。 Tuscany目前已经做到了这样一个服务环境:

他首先提供了一个本地构件运行环境,这与 Spring所做的工作是相同的。本地系统可以运行于 Tuscany提供的 IoC环境/容器之上。但是该环境比 Spring更加易于将异构系统所提供的服务通过 WS集成到本地系统中。本文将要展现的是两个本地系统在Tuscnay1.0的帮助下,简单地将构件服务化,而彼此可以享用来自其他系统的服务功能。


--------------------------------------------------------------------------------

分析内容
利用 Tuscany IoC实现本地应用
在本文中,我们将实现以下用例。



插图 1

图中包含两个用例:用户管理和邮件递送,对于用户管理系统来说,需要使用邮件递送系统中的某个功能,邮件系统可能是一个已经存在的系统,但是它是使用Tuscany环境的系统,在这个假设下,用户管理系统可以轻松使用由递送系统所提供的服务。

两个用例分别在两个应用中被实现,他们原本非别服务于自己的系统中,本来他们并不相关。



插图 2

图中,用户管理和邮件管理系统分别位于两个应用节点上,从设计初衷来讲,它们之间并无关联。而本文的用例中,用户管理系统的某个(新)功能将要使用邮件管理系统的某个功能(而不是自己去重新实现相同的功能)。

本文以WebX1.0为例说明系统的开发过程。

实现用户管理系统
图中,我们创建了UserManager,它包含一个UserDao对象,在WebX1.0中,这个依赖关系由 spring管理,而在本文介绍的这个系统中,该关系由Tuscany管理。



插图 3

运行时管理构件属性

SCA 1.0规定了构件的属性化,其意义在于构件被引用时,由引用方给定这些属性的值,从而实现动态配置的目的。

SCA1.0的构件由配置文件和osoa的标准annotation共同描述。

本例中,UserManager对UserDAO的引用,要求UserManger在setter方法上使用 @Reference。而userManager中的待配置属性必须附加osoa的标准annotation:@Property

Tuscany配置文件

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://application-1" name="application-1-composite">
<component name="UserManager">
<implementation.java class="com.sitechasia.UserManager"/>
<reference name=”ref1” target=”UserDao”/>
</component>
<component name=”UserDao”>
<implementation.java class=”com.sitechasia.UserDao”>
</component>
</composite>

实现邮件管理系统
我们通过实现以下类实现邮件递送功能,该系统是一个独自运行的系统,独自完成与邮件管理有关的各种功能。



插图 4

图中,MailManager包含一个MailGateway的实例,这个依赖关系由Tuscany管理。

Tuscany配置文件

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://application-2" name="application-2-composite">
<component name="MailManager">
<implementation.java class="com.sitechasia.MailManager"/>
<reference name=”ref1” target=”MailGateway”/>
</component>
<component name=”MailGateway”>
<implementation.java class=”com.sitechasia.MailGateway”>
</component>
</composite>

通过 Tuscany管理构件的实例
在 spring管理的 context中, bean的实例在却生条件下都是单例的,开发者也可以将某个 bean标注为多例。同样地, Tuscany也可以通过标准的 osoa的SCA api 1.0的annotation控制一个构件的实例。

Web应用加载 SCADomain以及构件描述文件



插图 5

图中,TuscanyServlet是一个标准的HttpServlet,Web应用必须在web.xml中描述这个 Servlet,容器将在启动时加在这个Servlet。TuscanyServlet包含了一个WebAppServletHost,它是一个ServletHost的具体实例。

每个binding.ws都对应一个AxisServletServlet,它们由Axis2ServletProvider在加载过程中创建,并保存在WebAppServletHost中。

TuscanyServlet被map到某个url/*上,从而来自其他系统的SOAP over HTTP就可以通过这个 url/*来获得 web service。

对于web应用自己来说,TuscanyServlet将一个SCADomain实例存储于ServletContext中,本地的jsp可以从ServletContext中获得这个SCADomain的实例。



插图 6

该图描述了TuscanyServlet与SCADomain以及具体应用中的StrutsAction的静态关系。



插图 7

上图描述了StrutsAction对象与SCADomain以及构件接口的动态关系。StrutsAction通过 SCADomain实例的getService方法获得构件的接口。

App1引用 App2的服务
将邮件管理服务化
现在,由于用户管理系统需要使用邮件系统中的某些功能,而这些功能正好是 MailManager可以提供的。所以,我们需要将构件MailManager服务化。Tuscany在这里提供了很好的支持,我们只需要在原有的 composite文件中增加服务华标注,然后为原来的 MailManager类增加一个接口,然后在这个接口上使用osoa标准annotation: @Remotable

下面是描述MailManager的composite文件。

<component name="MailManager">
<implementation.java class="com.sitechasia.MailManager"/>
<reference name=”ref1” target=”UserDao”/>
<service name="IMailManager">
<binding.ws/>
</service>
</component>

图4中, MailManager实现了一个 IMailManger接口,目前, Tuscany已经能够为这个接口自动生成wsdl。

用户管理系统引用邮件服务
在图 3中, UserManager引用了一个 MailService接口,该接口无需由邮件系统提供,只要该接口中的方法与wsdl中的相应的PortType相符即可。

<reference name=”mailservice”>
<interface.wsdl interface=”[namespace]#interface(portType)”/>
</reference> <component name="UserManager">
......
<reference name=”ref2” target=”mailservice”/>
......
</component>

但是目前 Tuscnay服务引用的一个缺陷在于引用方不能直接通过 URL,如 http://[hostname]:[port]/[servicename]?wsdl来引用服务提供者的接口定义,而只能将 wsdl文件存储至 classpath中。

事务(期待)
目前, Tuscnay仍然不能解决甚至是本地的事物问题,但是这无疑将是 Tuscany的发展过程中必须要解决的问题。

SCA1.0时使用 Policy框架来描述事物的,但是这种描述并不包含应如何实现事务,所以绝大多数工作都是由SCA Runtime提供者自行实现的。

安全性(期待)
在传统应用中已经有了一些成熟的安全性框架,如 WebX1.0采用的acegi框架。

SCA1.0时使用 Policy框架来描述安全性的,与事务问题相同, Tuscnay可能在今后的工作中逐个解决这些问题,但是目前并不支持这些特性。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics