什么是开源软件:

开源软件的英文为Open Source Software,简称为OSS。开放源代码软件就是在开放源代码许可证下发布的软件,以保证软件用户自由使用及接触源代码的权利,同时也保障了用户自行修改、复制,以及再分发的权利。

开放源代码发起行动组织(Open Source Initiative Association,简称OSIA)的开放源代码定义中,对开源软件有如下定义:

a. 发布的自由

开放源代码软件的许可证不能有任何限制再销售或者限制本程序同其他代码性质程序联合发布的条款,也不能有额外的收费要求。

b.关于对源代码的要求

要求软件发布鼻血为开放源代码形式,必须有免费的方式在软件初始发布的同时提供

明确获得源代码的路径。无论是下载还是书面印刷的相关资料。这些资料必须完备,能够保证专业人员进行修改,在作品中发布任何混淆概念的代码是被严格禁止的,同时任何通过其他途径,比如预处理、重编译等途径对开源软件代码进行阻隔的行为是被禁止的。源代码软件初始发布的时候,必须允许在源代码程序版本后用附属文件的形式发布修改版本。

c. 开源软件作品演绎

开放源代码软件许可证必须允许源代码可以被修改和允许根绝源代码产生有版权法意义上的演绎作品。

d.其他要求

不得对开源软件许可对象有歧视、不得对软件被使用者的领域有歧视、不得要求本开

源软件许可证生效的条件是在遵从软件许可证的前提下、许可证必须是适用于开放源代码这一类软件的而不是只针对某一个软件和开放源代码软件许可证、不得贬低其他软件许可证等条款。


 

开源软件的历史和现状:

开放源代码不仅仅指开源软件,它同事也是一种软件开放模式的名称。使用开放源代

码开放模式的软件代表就是Linux操作系统。开放源码运动在20世纪90年代开始日益发展,比较著名的有LinuxApacheTomcatMySQL等。目前,开发源码的潮流已经超出了操作系统、数据库管理系统和Web服务器等系统的开发领域,开发者在企业应用开发中寻找新的领地,用以开发框架式的优秀企业应用项目。

软件许可证协议,在软件产业中的地位非常重要,因为软件许可证约定了许可人和被许可人的权利与义务。比较著名的许可证包括GPLLGPLMPLBSD许可证。除此之外,还有NOKIAMITAPPLE许可证等。GNU通用公共许可证简称GPL,是由自由软件基金会发布的用于计算机软件的协议证书,使用该证书的软件被成为自由软件。大多数的GNU程序和过半的开源软件使用它。


 

主要开源软件项目简介

开源软件通常是由个人、组织和公司所开发的软件项目。有些开源软件来自一些知名

公司,比如IBMEclipseSUNNetBeansSAPSAP DBNetscapte CommunicationsMozilla

    开源软件需要一些必须的基础设施,使得参与项目的人员能够交流、存储和发布。开源社区就提供了这样一个平台。以下是目前比较著名的几个开源社区:

1.      Apcahe

Apache社区是由Apache Web Server软件项目发展起来的。

●    Apache Web Server项目

为人熟知的Apache Web Server,是用来做Web应用服务器的。根据最新调查显示,Apache Web Server已经击败了微软的IIS,使得它成为了Web服务器领域的领导者。

●    Apache Ant项目

Ant是基于Java的构建(build)工具,修正了make的缺点,性能优异。

●    Jakarta项目

在Java平台上由一些子项目组成。

Commons: 由一些小的java工具组成,例如BeanUtils可提供对JavaBean

动态操作。

James:  在Java技术上,实现了SMTP、POP3与NNTP等多种邮件相

           关协议。

Jetspeed:  实现了Enterprise Information Portal的开源软件。

Jmeter:    功能和性能的测试工具,被用于测试静态和动态资源的性能。

Log4j:     供Java程序使用的日志组件。

Struts:     Web开发框架。

Tomcat:    Web应用服务器。

Turbine:    与Struts类似,也是Web开发框架。

●    XML项目

该项目由一组处理XML文件的组件构成的。

Xerces:     基于Java的XML解析器。

Xalan:      基于Java的XSM Style sheet处理器。

Cocoon:     Cocoon是一种利用了XML强大功能的发布框架(XML -publishing)。   

●    Web Service项目

Apache提供的一组支持Web服务的开源软件项目。

Axis:       Apache Axis是开源的SOAP服务器和客户端。

XML-RPC:  基于XML-RPC方式的Java Web Service。

WSIF:       基于WSDL文件调用的方法实现Web服务,数据更改WSDL

文件。


 

2.      ObjectWeb 开源产品中间件

JonAs:   开源的EJB容器

JORAM:  实现了Java 消息服务(JMS)


 

3.      SourceForge.net开源社区

目前全世界最大的开源社区,为开源软件项目提供免费的服务。现在已经有几万个开源项目被收集,它为每个项目提供100MB的存储空间,并且为其配备缺陷跟踪系统、CVS代码管理系统。


 


 

大量的事实可以说明:开源软件是可靠稳定的,功能强大的,它与以微软产品为代表的商业软件各有千秋。


 

212 Sun J2EE体系结构

Sun J2EE并不像微软公司的.NET那样是一系列的产品,而是一个规范和标准,任何一家公司都可能依据这些规范和标准来开发自己的产品。Sun公司的目的就是让更多个厂家共同参与这个规范的制定,只要以这样的规范来开发自己的产品就能给用户带来更大的开放性和可移植性,正是因为如此,基于Java的应用服务器要比.NET多很多。Java的开放型和Java本身具有的“一次编写,到处执行”的跨平台性使得J2EE在企业分布式计算领域中占据很大的优势。

     J2EE使用多鞥的分布式应用模型,应用逻辑按照功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。Sun设计J2EE的初衷是为了解决两层模型(Client/Server)的弊端,来解决重用业务逻辑和界面逻辑的困难处境。现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,以下是J2EE典型的四层结构:

J2EE的体系结构

  • 运行在客户端机器上的客户层组件
  • 运行在J2EE服务器上的Web层组件
  • 运行在J2EE服务器上的业务逻辑层组件
  • 运行在EIS服务器上的企业信息系统(Enterprise information system)层软件

J2EE应用程序组件
J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关的类和文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:

  • 应用客户端程序和applets是客户层组件.
  • Java Servlet和JavaServer Pages(JSP)是web层组件.
  • Enterprise JavaBeans(EJB)是业务层组件.


客户层组件
J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.

web 层组件

J2EE web层组件可以是JSP 页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。

正如下图所示的客户层那样,web层可能包含某些 JavaBean 对象来处理用户输入,并把输入发送给运行在业务层上的enterprise bean 来进行处理。

    

业务层组件
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprise bean 进行处理. 下图表明了一个enterprise bean 是如何从客户端程序接收数据,进行处理(如果必要的话), 并发送到EIS 层储存的,这个过程也可以逆向进行。

有三种企业级的bean: 会话(session) beans, 实体(entity) beans, 和消息驱动(message-driven) beans. 会话bean 表示与客户端程序的临时交互. 当客户端程序执行完后, 会话bean 和相关数据就会消失. 相反, 实体bean 表示数据库的表中一行永久的记录. 当客户端程序中止或服务器关闭时, 就会有潜在的服务保证实体bean 的数据得以保存.消息驱动 bean 结合了会话bean 和 JMS的消息监听器的特性, 允许一个业务层组件异步接收JMS 消息.

企业信息系统层
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划 (ERP), 大型机事务处理, 数据库系统,和其它的遗留信息系统. 例如,J2EE 应用组件可能为了数据库连接需要访问企业信息系统。

J2EE 的结构
这种基于组件,具有平台无关性的J2EE 结构使得J2EE 程序的编写十分简单,因为业务逻辑被封装成可复用的组件,并且J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 因为你不用自己开发这种服务, 所以你可以集中精力解决手头的业务问题.

容器和服务
容器设置定制了J2EE服务器所提供得内在支持,包括安全,事务管理,JNDI(Java Naming and Directory Interface)寻址,远程连接等服务,以下列出最重要的几种服务:

  • J2EE安全(Security)模型可以让你配置 web 组件或enterprise bean ,这样只有被授权的用户才能访问系统资源. 每一客户属于一个特别的角色,而每个角色只允许激活特定的方法。你应在enterprise bean的布置描述中声明角色和可被激活的方法。由于这种声明性的方法,你不必编写加强安全性的规则。
  • J2EE 事务管理(Transaction Management)模型让你指定组成一个事务中所有方法间的关系,这样一个事务中的所有方法被当成一个单一的单元. 当客户端激活一个enterprise bean中的方法,容器介入一管理事务。因有容器管理事务,在enterprise bean中不必对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述文件中声明enterprise bean的事务属性,而不用编写并调试复杂的代码。容器将读此文件并为你处理此enterprise bean的事务。
  • JNDI 寻址(JNDI Lookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这样应用程序组件可以访问名字和目录服务.
  • J2EE远程连接(Remote Client Connectivity)模型管理客户端和enterprise bean间的低层交互. 当一个enterprise bean创建后, 一个客户端可以调用它的方法就象它和客户端位于同一虚拟机上一样.
  • 生存周期管理(Life Cycle Management)模型管理enterprise bean的创建和移除,一个enterprise bean在其生存周期中将会历经几种状态。容器创建enterprise bean,并在可用实例池与活动状态中移动他,而最终将其从容器中移除。即使可以调用enterprise bean的create及remove方法,容器也将会在后台执行这些任务。
  • 数据库连接池(Database Connection Pooling)模型是一个有价值的资源。获取数据库连接是一项耗时的工作,而且连接数非常有限。容器通过管理连接池来缓和这些问题。enterprise bean可从池中迅速获取连接。在bean释放连接之可为其他bean使用。


 

容器类型
J2EE应用组件可以安装部署到以下几种容器中去:

  • EJB 容器管理所有J2EE 应用程序中企业级bean 的执行. enterprise bean 和它们的容器运行在J2EE 服务器上.
  • Web 容器管理所有J2EE 应用程序中JSP页面和Servlet组件的执行. Web 组件和它们的容器运行在J2EE 服务器上.
  • 应用程序客户端容器管理所有J2EE应用程序中应用程序客户端组件的执行. 应用程序客户端和它们的容器运行在J2EE 服务器上.
  • Applet 容器是运行在客户端机器上的web浏览器和 Java 插件的结合.

J2EE的核心API与组件


 

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):

JDBC(Java Database Connectivity);JNDI(Java Name and Directory Interface);EJB(Enterprise JavaBean);RMI(Remote Method Invoke);Java IDL/CORBA;JSP(Java Server Pages);Java Servlet; XML(Extensible Markup Language);JMS(Java Message Service);JTA(Java Transaction Architecture);  JTA(Java Transaction Architecture);JTS(Java Transaction Service);JavaMail;JAF(JavaBeans Activation Framework)。

为什么选择J2EE?

在构建一个企业级应用系统的时候,平台的选择至关重要,.NET与J2EE是当前最为流行的两个企业级应用平台,目前来讲。从应用的数量与成熟度上来讲,因为J2EE诞生的历史要早一些,所以具有许多NET没有的优点,主要体现在如下一些方面

(1)开放性

J2EE是一个开放的标准,已经有越来越多的公司参与J2EE规范的更新和改进,这使J2EE一方面得到了业界普遍的支持和使用,另一方面,也使技术本身有了生命力。

(2)跨平台

J2EE建立在Java语言基础之上,从血缘关系上继承了Java跨平台的特性,从而天生是可移植的。J2EE不依赖于特定的操作系统、中间件、硬件的特性使它特别适合于企业中复杂的异构环境系统开发,节省了企业大量的成本。

(3)灵活性

遵守规范的J2EE应用可以无须更改在各种不同应用服务器间移植,J2EE倡导的三层或多层架构容许企业根据自身规模调整系统的架构,ME提供的组件模型容许企业根据自身需求选用其中部分技术,在需要时进行增加或减少,这种灵活性使企业可以从容面对未来可能发生的任何问题。

(4)可伸缩性

企业的发展需要高可伸缩性的系统,J2EE应用模型使企业可以根据自身需要实现。