浏览 1162 次
锁定老帖子 主题:(转)SCA1.0应用开发过程
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-17
介绍 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可能在今后的工作中逐个解决这些问题,但是目前并不支持这些特性。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |