基于Tuscany的Web应用程序分析
2008-03-26 11:49
381 查看
Tuscany下典型的Web架构:
乍一看,平淡无奇,这不就是我们常用的Web目录结构么?没错!
但玄机出在Web.xml和Calculator.composite上,下面我们分别看下这两个文件:
Web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Apache Tuscany Calculator Web Service Sample</display-name>
<filter>
<filter-name>tuscany</filter-name>
<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>tuscany</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list id="WelcomeFileList">
<welcome-file>calc.jsp</welcome-file>
</welcome-file-list>
</web-app>
这里使用了TuscanyServletFilter过滤器,此过滤器的作用我们会在后文提到。
Calculator.composite
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://sample"
xmlns:sample="http://sample"
name="Calculator">
<component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>
<reference name="addService" target="AddServiceComponent"></reference>
<reference name="subtractService" target="SubtractServiceComponent"></reference>
<reference name="multiplyService" target="MultiplyServiceComponent"></reference>
<reference name="divideService" target="DivideServiceComponent"></reference>
</component>
<component name="AddServiceComponent">
<implementation.java class="calculator.AddServiceImpl"/>
</component>
<component name="SubtractServiceComponent">
<implementation.java class="calculator.SubtractServiceImpl"/>
</component>
<component name="MultiplyServiceComponent">
<implementation.java class="calculator.MultiplyServiceImpl"/>
</component>
<component name="DivideServiceComponent">
<implementation.java class="calculator.DivideServiceImpl"/>
</component>
</composite>
此文件类似Spring,是Tuscany的服务配置文件,在此文件中提供了组件、实现的声明及配置。
下面,再结合调用时序图,来详述Tuscany在此应用中的位置及作用。
由此时序图可知,整个流程如下:
1、应用服务器启动;
2、客户端访问calc.jsp页面,服务器调用Web.xml中的配置TuscanyServletFilter过滤器;
3、在TuscanyServletFilter过滤器中,首先得到一个WebAppServletHost实例,WebAppServletHost是在Web应用环境中使用的Tuscany功能提供者;
4、在WebAppServletHost中,得到一个SCADomain实例,并将之放入ServletContext上下文中,以后可藉由相应的key得到此SCADomain实例;
5、calc.jsp中成功取得SCADomain实例;
6、通过SCADomain实例取得CalculatorServiceComponent组件;
7、调用CalculatorServiceComponent组件的各种业务方法实施计算。
这一个完整的过程,演示了Tuscany在一个Web应用中所充当的角色,在某种意义上Tuscany和Spring是相同的,只不过粒度不一样,
Spring注重的是bean的管理,是技术层面的,粒度相对较细;而Tuscany关注 则是业务组件的管理,是业务层面的,粒度相对较粗。
从软件重用角度讲,业务重用比技术重用更加受欢迎,操作起来也更加容易。业务重用是趋势。现在的SAAS热潮更加证明,软件即服务的时代已经到来。
乍一看,平淡无奇,这不就是我们常用的Web目录结构么?没错!
但玄机出在Web.xml和Calculator.composite上,下面我们分别看下这两个文件:
Web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Apache Tuscany Calculator Web Service Sample</display-name>
<filter>
<filter-name>tuscany</filter-name>
<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>tuscany</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list id="WelcomeFileList">
<welcome-file>calc.jsp</welcome-file>
</welcome-file-list>
</web-app>
这里使用了TuscanyServletFilter过滤器,此过滤器的作用我们会在后文提到。
Calculator.composite
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://sample"
xmlns:sample="http://sample"
name="Calculator">
<component name="CalculatorServiceComponent">
<implementation.java class="calculator.CalculatorServiceImpl"/>
<reference name="addService" target="AddServiceComponent"></reference>
<reference name="subtractService" target="SubtractServiceComponent"></reference>
<reference name="multiplyService" target="MultiplyServiceComponent"></reference>
<reference name="divideService" target="DivideServiceComponent"></reference>
</component>
<component name="AddServiceComponent">
<implementation.java class="calculator.AddServiceImpl"/>
</component>
<component name="SubtractServiceComponent">
<implementation.java class="calculator.SubtractServiceImpl"/>
</component>
<component name="MultiplyServiceComponent">
<implementation.java class="calculator.MultiplyServiceImpl"/>
</component>
<component name="DivideServiceComponent">
<implementation.java class="calculator.DivideServiceImpl"/>
</component>
</composite>
此文件类似Spring,是Tuscany的服务配置文件,在此文件中提供了组件、实现的声明及配置。
下面,再结合调用时序图,来详述Tuscany在此应用中的位置及作用。
由此时序图可知,整个流程如下:
1、应用服务器启动;
2、客户端访问calc.jsp页面,服务器调用Web.xml中的配置TuscanyServletFilter过滤器;
3、在TuscanyServletFilter过滤器中,首先得到一个WebAppServletHost实例,WebAppServletHost是在Web应用环境中使用的Tuscany功能提供者;
4、在WebAppServletHost中,得到一个SCADomain实例,并将之放入ServletContext上下文中,以后可藉由相应的key得到此SCADomain实例;
5、calc.jsp中成功取得SCADomain实例;
6、通过SCADomain实例取得CalculatorServiceComponent组件;
7、调用CalculatorServiceComponent组件的各种业务方法实施计算。
这一个完整的过程,演示了Tuscany在一个Web应用中所充当的角色,在某种意义上Tuscany和Spring是相同的,只不过粒度不一样,
Spring注重的是bean的管理,是技术层面的,粒度相对较细;而Tuscany关注 则是业务组件的管理,是业务层面的,粒度相对较粗。
从软件重用角度讲,业务重用比技术重用更加受欢迎,操作起来也更加容易。业务重用是趋势。现在的SAAS热潮更加证明,软件即服务的时代已经到来。
相关文章推荐
- 基于Tuscany的Web应用程序分析
- zz 基于Tuscany的Web应用程序分析
- Android系统中基于Binder的IPC流程框架分析
- 本书已出版<拨云见日:基于android的内核与系统架构源代码分析 >
- 基于MTD的NANDFLASH设备驱动底层实现原理分析(二)
- 基于JavaScript实现的希尔排序算法分析
- 基于BNT的贝叶斯模型仿真分析
- 使用python构建基于hadoop的mapreduce日志分析平台 推荐
- 基于mykernel的一个简单的时间片轮转多道程序内核代码分析
- 基于visual c++之windows核心编程代码分析(26)实现文件关联
- 基于S3c2440的FT5x06 linux触屏驱动源码分析
- HashMap原码分析(基于JDK1.6)
- 基于visual c++之windows核心编程代码分析(29)ICMP实现远程控制
- 基于群星ARM的lwIP以太网中断分析
- 基于visual c++之windows核心编程代码分析(33)实现防火墙模型
- 基于visual c++之windows核心编程代码分析(37)实践信息安全隐患监测-嗅探
- 基于visual c++之windows核心编程代码分析(40)实现屏幕截取
- 基于Netty的HTTP通信研究分析
- 基于visual c++之windows核心编程代码分析(45)利用Windows系统服务启动程序
- 基于Android6.0的RIL底层模块分析