引言
介绍
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可能在今后的工作中逐个解决这些问题,但是目前并不支持这些特性。
分享到:
相关推荐
sca是实现soa思想的系统架构规范1.0,最权威的中文翻译版本,英文不好的同志们的福音奥!!
本文将说明开发和部署SCA应用程序的主要概念。我们将说明如何创建组件实现来提供远程服务、本地服务、配置属性和服务引用以及如何创建组件、入口点、外边服务和模块。示例应用程序:InnovaSolutions开发我们将详细...
软件无线电体系结构规范。软件无线电开发设计者必备的资料!
sca知识体系了解,面向服务组件的架构(Service Component Architecture,SCA)
此部分将概览SCA,并说明它如何简化使用面向服务的体系结构(Service-OrientedArchitecture,SOA)所构建的业务应用程序的设计和集成。本系列的后续文章将讨论SCA体系结构及其主要概念,包括服务实现、服务客户机和...
SCA算法实现,主要针对凸优化问题进行求解,可以在其他地方使用。
基于SCA和SDO服务组件开发,本科毕业论文
Primeton EOSTM(以下简称EOS)作为全球领先的SOA应用平台,采用了先进的SOA架构和SCA1.0、SDO2.1标准规范。比起单独学习SOA的枯燥难懂的理论,学会EOS的开发和了解其实现原理是帮助您理解SOA核心思想的最好切入点。...
Primeton EOSTM(以下简称EOS)作为全球领先的SOA应用平台,采用了先进的SOA架构和SCA1.0、SDO2.1标准规范。比起单独学习SOA的枯燥难懂的理论,学会EOS的开发和了解其实现原理是帮助您理解SOA核心思想的最好切入点。...
sca的源程序代码,原始代码能够较好的学习sca算法。
基于SCA的企业应用系统构架研究与实现,一本很不错的书。与大家同享
正弦余弦算法(SCA)代码以及详解 。正弦余弦算法(SCA)是 Mirjalili于2016年提出的一种新型的群体智能优化算法,该算法结构简单、参数较少且易于实现,它的搜索过程主要受正弦和余弦函数的影响。
Primeton EOSTM(以下简称EOS)作为全球领先的SOA应用平台,采用了先进的SOA架构和SCA1.0、SDO2.1标准规范。比起单独学习SOA的枯燥难懂的理论,学会EOS的开发和了解其实现原理是帮助您理解SOA核心思想的最好切入点。...
使用Spring Framework 设计和开发 SCA 组件,第 1 部分.pdf.pdf 使用Spring Framework 设计和开发 SCA 组件,第 1 部分.pdf.pdf