开源技术选型手册

开源项目网站SourceForge

 

开源软件覆盖了软件应用各个领域。

 

软件开发中的建模

参与到核心技术研发中。

 

1、In Action

(1)web框架

mvc框架:使开发者专注于业务逻辑,不用分心于如何分派请求。

web要能与外部系统交互,要结合工作流。

 

web框架更多关注业务层。在表现层和数据层可以结合一些其他开源产品。如表现层除了使用jsp,还可以使用velocity和freemarker来呈现。

 

struts2将OSGI的设计理念(模块化)贯穿其中。

拦截器和拦截器栈,对Action进行预处理和事后处理。

 

约定优于配置是Rails带入web开发中的概念。

在struts2中,模块化已经成为了体系架构中的基本思想:用户可以通过插件来对框架进行扩展。——把与特定应用无关的新功能组织成插件,应用到多个应用中;规范化的模块系统。

 

Struts2的OSGI插件:开发人员可以把应用拆分成多个独立的jar包,只要把它们放到服务器恰当的位置上,该插件就可以把它们一一找出并进行部署,还可以实时添加、移除或升级插件,无需重启整个应用。 这样可以在内部把越来越多的功能绑到了插件中去,代码只需关注核心功能并更加敏捷。

 

简单的插件体系结构——扔一个jar文件进来就可以扩展框架而不需要手动配置。

 

spring framework提供了应用程序所需的基础设施。改善应用程序的质量和性能,让程序更易测试。

spring采用了分层架构,你可以仅仅使用你需要的那部分功能。

spring为项目带来的好处:

a、基于spring的应用程序易于测试;

b、spring提供大量辅助方法,类似JDBC、JMS、JavaMail的API在被封装后以相近的形式出现在开发者面前。有了spring,一切都变得简单;

c、你的代码可以完全不用依赖于spring API。

 

B/S架构进入企业级应用开发中。

EJB在没有工具支持的情况下使用异常复杂。

 

spring的事务管理需要声明事务管理器,由于Hibernate、JDO、JDBC的事务管理器都不一样,因此将其与其他事务的配置分开存放。

如:

 

在web.xml中载入spring applicationContext的配置

        org.springframework.web.context.ContextLoaderListener

 

 非侵入性的特点使得应用程序代码能完全不依赖于spring API。

 

 spring思想和理念包含了被反复验证的最佳实践,理解了这些,即使没有框架,一样能开发优秀的系统。

 

(2)动态语言

静态语言的数据类型是在编译期间检查的,即在写程序时,要声明所有变量的数据类型。 

动态语言,也叫脚本语言,是指在运行期间才去做数据类型检查的语言。即不需要给任何变量指定数据类型,它会在你第一次赋值给变量时,在内部将数据类型记录下来。如Ruby、Python、Groovy。

 

ActionScript由Flash Player中的ActionScript虚拟机来执行,主要在Flash内容和应用程序中实现交互性、数据处理以及其它的功能。

Erlang是一个结构化的动态编程语言,内建并行计算支持。——>被广泛应用于分布式计算系统。

perl可以很容易操作文本、文件、目录、计算机和网络等,可以很容易在任何现代的操作系统上进行移植。

 

对于Python、Ruby和Groovy等动态语言,通常都会结合与相应的web框架使用。如Python和Django、Ruby和Rails、Groovy和Grails等。

 

Python是即译式的(执行脚本前不需对Python代码进行编译)、面向对象的语言。可以用来开发各种程序。

 

python helloworld.py:执行Python脚本;

若选用Python构建web应用,可以选用Django框架。 

 

(3)面向服务架构(SOA)

web服务只是SOA的实现技术之一。

工具有Apache CXF,服务基础设施;Apache ODE,BPEL引擎;Apache Tuscany,SCA/SDO的第一个参考实现。

 

案例学习

 

Apache CXF是一个开源的服务框架

a、与spring集成——>灵活的配置,出色的性能;

b、提供了RESTful服务的支持;

c、可插拨的框架设计,对其他数据绑定和遗留系统提供了支持;

d、商业友好的Apache许可证

 

CXF支持多种传输协议、数据格式:

a、格式:XML、JSON

b、传输协议:HTTP、JMS等

c、绑定:SOAP、REST/HTTP

d、可扩展的API允许开发者方便对绑定和消息格式进行扩展;

e、灵活的部署:Tomcat等轻量级容器或spring的容器?或应用服务器中;

 

CXF旨在为服务创建必要的基础设施。它的整体架构主要由以下几个部分组成:

a、Bus

是CXF架构的主干,为共享资源提供了一个可配置的场所,作用类似于spring的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展,可方便容纳自己的资源,或替换现有的资源。默认Bus实现是基于spring的。通过依赖注入,将运行时组件串起来。Bus的创建由BusFactory负责,默认是SpringBusFactory,对应于默认的Bus实现。在构造过程中,SpringBusFactory会搜索META-INF/cxf(就包含在CXF的jar中)下的所有Bean配置文件,根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。

b、消息传递和拦截器

CXF建立于一个通用的消息层之上,主要由消息、拦截器和拦截器链组成。CXF是以消息处理为中心。通过拦截器,开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个:handleMessage和handleFault,分别对应消息处理和错误处理。在开发拦截器时注意两点:

拦截器不是线程安全的,不建议在拦截器中定义实例变量并使用它。这一点和JSP/Servlet中对于Filter的处理是一样的

不要调用下一个拦截器的handleMessage或handleFault,这个工作由InterceptorChain来完成。

c、 前端(FrontEnd)

它为CXF提供了创建服务的编程模型,当前主要的前端就是JAX-WS。

d、服务模型

CXF中的服务通过服务模型来表示。它主要有两部分:ServiceInfo和服务本身。ServiceInfo作用类似WSDL,包含接口信息、绑定、端点(EndPoint)等信息;服务包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建,它通过ServiceFactory来完成。

e、绑定

绑定提供了在传输之上映射具体格式和协议的方法,主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。

f、传输

为了向绑定和前端屏蔽传输细节,CXF提供了自己的传输抽象。其中主要有两个对象:Conduit和Destination。前者是消息发送的基础,后者对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver,以便在消息发送和接收时获得通知。 

 

CXF可以创建的web服务应用有两种:服务提供者和服务消费者。

服务只有发布之后才能被消费

 

熟悉工具涉及领域的协议。虽然CXF提供了简化服务创建的编程模型,若不了解WS-*协议,在遇到问题调试时必然会花不少时间。尤其在SOA的环境中,客户端和服务不一定使用同一语言、同一工具实现的情况下,互操作问题经常是由于对协议的不同支持造成的。

作为CXF实现内容的一个重点,JAX-WS值得关注。

spring几乎已成为开发服务器端应用的首选

CXF有大量的例子,它们是熟悉和了解CXF的大门。

动态语言Groovy由于其语法和java兼容且提供了不少方便的语法,吸引了不少java开发者。Grails框架。GroovyWS专为Groovy开发,底层就是CXF。 

 

Axis2不能和spring集成在一起。

 

Apache ODE是基于java的开源WS-BPEL引擎,它的主要功能是执行适用BPEL描述的业务流程,实现业务流程自动化。在开源BPEL引擎领域,建议关注Apache ODE。

ODE可以方便地和ESB(如ServiceMIX、Mule)进行集成。ESB成为SOA基础设施的必选件。

在SOA中,WS-BPEL用来描述业务流程。BPEL是基于XML的描述语言,它依赖WSDL来表示web服务接口。

BPEL在SOA中的作用类似工作流领域中的XPDL。BPEL主要关注自动任务的交互,而没有涉及人工任务的交互。

 

ActiveBPEL提供了基于Eclipse的图形设计器,ODE并没有提供。可以使用Intalio Designer或Lomboz作为替代选择。

 

 

(4)

 

2、TIPS

(1)

(2)

 

3、PS

(1)

(2)

你可能感兴趣的:(开源技术选型手册)