<< Back to man.ChinaUnix.net

Java开放应用程序服务器(JOnAS):J2EETM平台

本文主要描述了JOnAS J2EE平台:首先简短的介绍了J2EE概念以及ObjectWeb协会,然后介绍了JOnAS服务器架构及特性。本文的结构如下:

导论

J2EE

SunTM J2EE规范,和与它相关的规范(EJBTMJMSTM、...),一起定义了一个基于多层式架构来开发和部署分布式因特网JavaTM服务器应用程序的结构跟接口。这个规范企图促进和标准化应用程序组件的开发、部署以及组装;符合J2EE规范的组件将可部署在任意的J2EE平台上。这样的应用程序通常是基于互联网并且含有交易处理、数据库导向的、多用户的、有安全性要求的和可扩充的以及可移植性的。更精确的说,这个规范描述了二类信息:

- 一是执行时期的环境,称为J2EE服务器,它提供了执行环境 以及需要的系统服务,像交易处理服务、 数据存取服务、Java消息服务(JMS)、安全性服务...。

- 二是有一些程 序员指南和使用者指南解释如何开发、部署和使用应用程序组件。

应用程序组件不但可以独立于平台或是操作系统(因为是用Java编写的缘故),而且可以独 立于J2EE平台。

一个典型的J2EE应用程序是由展示组件(presentation components)和企业组件(enterprise components)所构成。展示组件也称之为"Web组件"(Servlets以及JSPsTM),它定义了应用程序的Web接口;企业组件,"Enterprise JavaBean"(EJB),它定义了应用程序的商业逻辑及应用程序数据。J2EE服务器提供放置Web及企业组件的容器。这些容器提供 了对组件生命周期的管理和组件与J2EE服务器之间的接口。J2EE提供的容器有两种:Web容器负责Servlet和JSP组件,而EJB容器则负责Enterprise JavaBean组件。

J2EE Architecture

ObjectWeb

JOnAS是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。ObjectWeb是一个开放源 代码组织,它类似Apache或Linux,但锁定在中间件软件(middleware)的领域。ObjectWeb的 目的是开发和推广开放源代 码的中间件软件。

ObjectWeb是一个国际协会,总部设置在INRIA,由Bull、法国电信、以及INRIA于2002年2月正式创立。所有的软件在LGPL版权之下都可自由使用。

这个协会技术上的目标是开发一个基于分布式组件的中间件软件架构,使符合CORBA、Java以及W3C标准。这个想法是把已经在J2EE/CORBA的应用程序层 所使用的组件模型应用到中间件软件里 面。ObjectWeb项目的功能范围定位在命名、贸易、通讯(事件、消息)、有效 性和安全机制(交易处理、持久性、复制、容错)、负载均衡和安全性。另外一些跨项目的主题,像是可靠性、最佳化、程序代码品质、也包括 性能测试、测试、评估、展示以及开发工具。

因此,全部ObjectWeb架 构模式从执行在中间件软件平台的应用程 序由上到下,从执行在中间件软件平台 (如JOnAS、OpenCCM或ProActive)的应用程序(如性能测试像JMOB项目的Rubis)。这平 台是基于技术组件将消息导向中间件软件 (实现JMS的JORAM)、通讯框架(CAROL)、持久性框架(JORM)、交易处理监视器(JOTM)、对象请求代理者(JOnathan)。 技术组件像C-JDBC允许任何平台从数据库集群中受益。JOnAS使用了所有的ObjectWeb组 件(JORAM、CAROL、JOnathan、JORM、C-JDBC和即将推出的JOTM),但也从其它的社群"借 用”了开放源代码组件,如Tomcat或Jetty,使用来当容器;或AXIS,使用来提供"Web Services"环境。

ObjectWeb已经有相当数目的公司会员、大学会员以及个人会员(个人会员是免费的)。ObjectWeb会员为ObjectWeb的 技术取向提供参考,参与所有ObjectWeb工作群组、会议、工作室和研讨会。围绕着ObjectWeb组件和平台的开发者和使用者社群正在持续成长中。

JOnAS特性

JOnAS是一个纯粹用Java撰写的开放源代码应用程序服务器,它符合J2EE规范。甚至它的高度模块化 允许使用它:

- 成为一个J2EE服务器,用来部署和执行EAR应用程序(例如,包括Web组件和EJB组件的应用程 序)

- 成为一个EJB容器,用来部署和执行EJB组件(例如,给没有使用Web接口或使用没有整合在JOnAS J2EE容器的JSP/Servlet引 擎的应用程序),

- 成为一个Web容器,用来部署和执行JSP及Servlet(例 如,没有使用EJB组件的应用程序)。

系统需求

JOnAS可用于JDK 1.3或1.4。它已经被使用在许多操作系统上(Linux、AIX、Windows、Solaris、HP-UX等等...),以及不同的数据库(Oracle、PostgreSQL、MySQL、SQL server、Access、DB2、Versant、Informix、Interbase等 等...)。

符合的Java标准

JOnAS是一个J2EE 1.3规范的实现。它目前符合EJB 2.0规范。并整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。JOnAS服务器依 赖或实现以下的Java API:JCATM 1.0、JDBCTM 2.0、JTATM 1.0.1、JMSTM 1.1、JMXTM 1.0、JNDITM 1.2.1、JAASTM 1.0、JavaMailTM 1.3。

关键特性

除了所有的J2EE相关标准的实现之外,JOnAS提供了以 下高级且必要的特性:

- 管理:JOnAS服务器管理使用了JMX并提供一个基于Servlet的管理控制台。

- 服务:基于服务的JOnAS架构提供 了高度的模块化和可配置性。它允许应用组件模型应用到中间件软 件里面,并且让整合新的模块变得更容易(如,适用于开放源代码贡献者)。它也允许只启动特定的应用程序所需要的服务,因而可以节省系统资源。JOnAS服务是通过JMX管理的。

- 扩展性:JOnAS整合几个最佳化机制来增加服务器的扩展性。这包含了Stateless Session Bean资源池、Message-Driven Bean资源池、线程资源池、Entity Eean缓冲、Entity Bean活化∕钝化、连接资源池(用于JDBC和JMS)、储存媒介存取最佳化(分享标志、isModified)。

- 集群:JOnAS集群解决方案,在Web和EJB层级提供负载均衡,高可用性以及失败接管支持。

- 分布式: JOnAS可以运行在几 个分布式处理环境,这是由于整合了ObjectWeb项目CAROL(RMI ObjectWeb阶层共通架构,Common Architecture for RMI ObjectWeb Layer),它支持同时使用几个通讯协议:

o使用Sun所用有的协议JRMP的RMI

oIIOP上 的RMI,

oCMI,JOnAS的"集群认知"分布式协定,

o或Jeremie,来自于ObjectWeb的 对象请求代理者的RMI性格,名为JOnathan,和Jeremie一同 使用,JOnAS从透明化的本端RMI调用最佳化得到利益。

- "Web Services"支持:透过整合AXIS,JOnAS允许J2EE组件存取"Web Services" (如,成为"Web Services"客户端),以及允许J2EE组件被部署成"Web Services"端点”。

三个J2EE的关键方面早已经实现在JOnAS服务器中:

- JCA:企业信息系统(EIS)可以从JOnAS应用程序容易的存取。透过支持Java连接器架构(Java Connector Architecture),JOnAS允许部署任何的JCA相容的资源适配器(连接器),这将让相应的EIS可用于J2EE应用程序组件中。举例来 说,Bull GCOS主机可以从JOnAS使用它相 映射的Hoox connectors来存取。

- JMS:JMS实现可以容易的置入JOnAS。它们像JOnAS服务般 执行在相同的JVM(Java虚拟机器)或是在不同的JVM并且JOnAS提供管理 工具来隐藏JMS专用的管理API。现在有两个JMS实现可以使用:JORAM是来自于ObjectWeb开放源代码的JMS和SwiftMQ

- JTA:JOnAS平台支持 分布式交易处理来将多个组件和交易处理的资源关连在 一起。JTA交易处理支持由一个交易处理监视器(Transaction Monitor)所提供,它是在CORBA交易处理服务(OTS)实现的上层开发实现的。

JOnAS套件

可以透过以下三种包装下载JOnAS:

- 简单的包装只包含了JOnAS应用程序服务器,不包括相关的Web容器实现。为了使用J2EE Web应用程序,你需要安装Tomcat或Jetty(适当的版本)并且还要 设定它跟JOnAS,这样它们才可以一起工作。

- JOnAS-Tomcat套件包容了JOnAS和Tomcat,已预先设定好并附有编译好的范例。这个是已经可以执行的J2EE应用程序服务器。这个套件 也包含了AXIS,因此提供了预先设定好的"Web Services"支持。

- JOnAS-Jetty套件包含了JOnAS和Jetty,已预先设定好并附有编译好的范例。这个是已经可以执行的J2EE应用程序服务器。这个套件 也包含了AXIS,因此提供了预先设定好的"Web Services"支持。

JOnAS结构

JonAS是架 构于服务基础之上的。一个服务通常用来给容器提供系统资源。大部份JOnAS应用程序服务器的组件都是被事先定义好的JOnAS服务。甚至还可以容易地让高级的JOnAS使用者去 定义他自己的服务并整合到JOnAS里。J2EE应用程序当然不一定需要全部的服务,只需要在JOnAS服务器配置中定义要启动的服务即可。

JOnAS架构如下图所示,展示了WEB和EJB容器依赖于JOnAS服务(所 有的服务都展示在这张图上)。两个端点客户端也被展示在这张图中。其中一个是JOnAS管理控制台(称之为Jadmin)。

J2EE Architecture

通讯和名称服务

这个服务(也称为"Registry")是被使用来执行RMI注册,比如CosNaming,CMI注册和∕或Jeremie注 册,依照JOnAS的不同设定而定(CAROL设定指定要使用的通讯协议)。有几种不同的注册执行模式,例如在相同或不同的JVM,是否自动执行注册程序等。

这个服务提供JNDI API给应用程序组件和其它的服务,以绑定及寻找远程对象 (如,EJB Home)和资源参考(JDBC数据源,邮件和JMS联机产生器等等...)。

EJB容器服务

这个服务负责加载EJB组件和它们的容器。EJB容器是由一套实现EJB规范的Java 类集合及接合EJB组件的中 间件类别集合所构成,随着服务由JOnAS应用程序 服务器所提供。中间件类是针对每个EJB组件并且由一套部署工具(叫 做GenIC)所 产生。

JOnAS设定允许指定这个服务在ejb-jar文件集合被加载时执行。也可以使用JOnAS管理工具在服务器执行期间部署ejb-jar文件。

企业JavaBeans(EJB)是实现一个应用程序的商业逻辑的软件组件(而Servlet和JSP则是实现展示)。企业JavaBean有 三种:

- Session bean是关联于唯一一个客户端的对象,生命周期短(只有一个Method调用或一个客户端的Session),它代表客户端Session的当前状态,它们可 以是transaction-aware、stateful或stateless。

- Entity bean是负责数据库数据的对象。它可以被几 个客户端共享或通过主键来区别。EJB容器是负责管理这些对象的持久性。这些对象的持久性管理是完全透明于将使用它的客户端;也 可能会透明于开发它的bean提供者,这和下列因素有关:

o容器管理持久性(CMP,Container-Managed Persistence)的企业bean。在这样的情况下,bean提供者不会开发任何的数据存取程序,持久性管理是交由容器负责。在bean和持久性储存之间的映射是 由应用程序伺服务指定的部署描述档方式所提供。

oBean管理持久性(BMP,Bean-Managed Persistence)的企业bean。在这样的情况下,bean提供者撰写数据库存取操作在企业bean的method里面,来指定数据的建立、加载、储存、恢复以及删除的操作。

- Message-driven Bean可以作为消息监听器。在接收到JMS(Java Message Service)消息时执行特定的动作。MDB是受交易控制并且无状态的,实现了几种异步的EJB的方法调用。

为了实现EJB 2.0的容器管理持久性(CMP2),JOnAS利用ObjectWeb的JORM(Java对象容器映射,Java Object Repository Mapping)架构。JORM支持复杂的EJB映射到数据库表格,以及几种 持久性支持(关系型数据库、对象式数据库、LDAP容器等等)。

WEB容器服务

这个服务是用来在JOnAS服务器的JVM中执行一个Servlet∕JSP引擎,以及加载web应用程序("war"文件)到这个引擎中。现在这个服务可以设定来使用TomcatJetty。Servlet∕JSP引擎是整合到JOnAS里当"Web容器",例如,这样的容器提供web组件在J2EE兼容的方式下存取系统资源(应用程序服务器的系统资源)及EJB组件。

JOnAS设定 充许指定这个服务在war文件集合被加载时执行。也可 以透过JOnAS管理工作在服务器执行期间部署war文件。Tomcat和JOnAS使用者管 理已经被统一。类别加载委托策略(Webapp类别加载器或父节点类别加载器的优先级)可以被设定。

ServletJSPTM是用来开发动态网页的技术。Servlet允许Java类(HTTP Servlet) 的开发透过HTTP请求调用并产生HTML页面。通常,Servlet透过Java API存取信息系统(像JDBC或EJB组件API)来创建HTML网页的内容,它们将在响应HTTP请求中产生。JSP技术是Servlet技术的补强。JSP是一个HTML包含了利用特定类似XML标签夹带Java程序代码的页面;这个Java程序代码是用来HTML页面的动态肉容处理。

Servlet和JSP是被视为在J2EE应用程序组件中负责应用程序的展示逻辑。这样的应用程序组件可能存取J2EE伺服提供的资源(如JDBC数据源、JMS联机产生器、EJB、邮件产生器、...)。至于EJB组件,这些资源的实际分配是 在组件部署期间执行,以及由每个组件的部署描述文件指定,这类的组件程序代码使用逻辑的资源名称。

Ear服务

这个服务被使用来部署完成的J2EE应用程序,如包装在EAR文件里的应用程序,这里头包 含了ejb-jar文件和∕或war文件。这个服务将管理EAR文件和war文件的部署指派到WEB容器服务,ejb-jar文件的部署则指派到EJB容器服务。它将负责建立合适于J2EE规范中所公布的类加载器,以便J2EE应用程序正确的执行。

为了部署J2EE应用程序,JOnAS必须设定 执行EAR服 务,并指定要被加载的EAR文件集合。也可以使用JOnAS管理工具 在服务器执行期间部署EAR文件。

交易处理服务

被称为Java交易处理监视器(JOnAS JTM)。这是一 个不可缺的服务,负责分布式交 易处理。它提供定义于部署描述文件的EJB组件的交易处理管理。它负责 两个阶段的交付协议以针对任何资源管理员的数量(XA资源)。就J2EE而言,交易处理资源可以是一个JDBC联机、JMS Session或是JCA资源转接器联机。交易处理本文是隐含于分布式请求的传送。JTM可以分散存取一个或多个JOnAS服务器;因此一个交易处理可以伴随几个配置于不同JOnAS服务器的组件。这个服务实现了JTA 1.0规范,因此允许明确的由应用程序组件或应用程序客户端开始 或中断交易处理。从应用程序组件开始交易处理是只允许从Web组件或从session bean或是message-driven bean(只有这两类的bean,称之为"Bean管理的交易处理管理Bean-managed transaction demarcation)")。

EJB支持交易处 理的主要优点之一是它的传达状况,它指出在服务器应用程序中的交易处理控制是不再有hard code程序代码,而是在部署期间设定。这叫做"容器管理的交易处理管理(Container-managed transaction demarcation"。在"容器管理的交易处理管理"中,企业bean的交易处理行为是被定义在设定时期,是bean的部署描述文件中的一部 份。EJB容 器负责提供交易处理管理给企业bean,依照交易处理属性的值所关联到的EJB method有以下几种:

- NotSupported若这个method被调用在交易处理中, 在method执行期间这个交易处理会被暂停。

- Required若这个method被调用在交易处理中, 这个method会在这个交易处理的范围内被执行,不然为了method的执行会有一个新的交 易处理被启动,并会在method把执行结果送给调用者前被交付。

- RequiresNew这个method将在一个新的交易处理范围中永远被执行。这个新的交易处理是为了method的执行而被启动,并在method把执行结果送给调用者 前被交付。若这个method在交易处理中被调用, 这个交易处理会在一个新的交易处理启动前被暂停,而在新的交易处理完成时 才再继续。

- Mandatory这个method在一个交易处理的范围内应该永远被调用,否则容器将丢出TransactionRequired例外。

- Supports这个method被调用在调用者的交易处理范围内,若调用者没有映射的交易处理,这个method会被调用在交易处理范 围外。

- Never随着这个属性,客户端被需要去调用在交易处理本文之外,否则容器会丢出java.rmi.RemoteException例外。

ObjectWeb的JOTM(Java开放交易处理管理员,Java Open Transaction Manager)项目基于JOnAS交易处理服务的。它已经被强化了以提供高级的交易处理特性,如巢状交易处理、"Web Service"交易处理(一个DBTP实现是可用的)。s

数据库服务

这个服务负责管理数据源对象。数据源是一个标准JDBC管理对象,用来管理数据库 的联机。在JOnAS服务器上的数据库服务建立及加载这样的数据源。数据源的建立和部署在JOnAS设定期间指定,或是在服务器运行期间透过JOnAS管理工具来建立及部署。数据库服务也负责联机的管理,如它管理了应用程序组件所使用的数据 库联机的集合,因而避免了许多实体联机建立所浪费的时间。

安全性服务

这个服务实现了如EJB规范中所指定的存取EJB组件的授权机制。EJB安全性是基于角色的观念。透过所给与的角色集合可以来存取method。为了存取method,使用者必须至少有一个在这个角色集合中。
角色和method之间的映射(权限)使用了security-rolemethod-permission在部署描述档中被完成,为了在bean程序中实施或增补安全性检查,程序的安全性管理也可能使用EJBContext界面的两个method:getCallerPrincipal()isCallerInRole (String roleName)。在EJB程序中使用的角色名称(在isCallerInRole method)事实上参考了实际的安全性角色,它让EJB程序独立于部署描述文件中的 安全性设定描述。程序设计师透过部署描述档中sessionentity所包含 的security-role-ref的方式让这些角色参考可用于bean开发者或应用程序组合者。

在JOnAS中,角色 和使用者确认之间的映射被完成在使用者 确认容器中。当使用Tomcat来做使用者认证时,这个使用者确认容器可能被存在文件中或是JNDI容器中(像LDAP),或是关系型数据库中。这个是透过Tomcat Realm的JOnAS实现所完成,如UserDatabaseRealm、MemoryRealm、JDBCRealm、JNDIRealm。这些Realm负责在EJB调用期间传送安全性本文到EJB容器。JAAS登录模块被提供用来给Java客户端认证。

消息服务

异步EJB method调用可以基于Message-driven Bean组件,像在EJB 2.0规范所指定的那样。Message-driven Bean是一个EJB组件,它被视为是JMS (Java消息服务)的消息监听器,如用来处理JMS消息异步,它联合了JMS目标,它的onMessage method将在接受由客户端应用程序传送到这个目标的消息时被激活。它也可让任何的EJB组件使用JMS API,并受应用程序服务 器的交易处理的管理。

为了在应用组件中支持Message-driven Bean,和JMS操作代码,JOnAS应用程序服务器需要依赖JMS实现。JOnAS使用了第 三方的JMS规范的实现:现在是Joram这套开放源代码软件被整合进并JOnAS分发,也可以SwiftMQ 产品,其它的JMS提供者的实现也可以容易的被整合进去。JORAM中有几个有趣的地方,特别是可靠性(持久性模式)、分布性(它可以执行在几个服务器,对JMS客户端是透明化的,如此允许 负载均衡)、可选择TCP或是SOAP通讯协议来传送消息。

JMS服务负责启 动(或建立联机)已经整合进来的JMS服务器,它执行在相同或不同JVM下的JOnAS。它也提 供联机资源池及线程资源池(给Message-driven Bean)。透过这个服务,JOnAS提供工具 在服务器启动期间来建立JMS管理对象像联机产生器和目标,或是在执行期间使用JOnAS管理工具。

J2EE CA资 源服务

J2EE连接器架 构(J2EE CA)允许不同的企业信息系统(EIS)对J2EE应用程序服务器的联机。它是基于资源转接器(Resource Adopter,RA),一个架构组件符合软件驱动 程序,连接EIS、应用程序服务器、以及企业应用程序(J2EE组件)。RA一般都由EIS厂商提供,并且也提供了Java接口(共通客户端接口或CCI)给J2EE组件来存取EIS(也可以是特定的Java接口)。RA也提供标准接口来给应用程序服 务器插接,因此它们可以和应用程序组件合作保持所有系统层面的机制(交易处理、安全性、以及联机管理)的透明性。

JCA Architecture

应用程序使用RA客户端API(CCI)在EIS数据上执行"商业逻辑"的操作,EIS上的联机(包括资源池)和安全性由应用程序服务器透过RA(系统契约)来管理。

JOnAS资源服务是掌控部署J2EE CA兼容的资源转接器(连接器),在JOnAS服务器上 包装成RAR文件。RAR文件也包括了EAR文件,在这个案例中连接器将被应用程序类加载器加载。一当资源转接器被部署,联机产生器实 体即可用在JNDI名称空间来被应用程序组件查找。

管理服务

管理服务可以用来从JOnAS Jadmin管理控制台管理JOnAS服务器。 每一个服务器执行这个服务是可见于管理控制台的。这个服务是基于JMX。标准MBean是被定义 在JOnAS应用程序服务器内,它们陈列装载于JOnAS的对象的管理method如服务、容器、服务器本身。管理服务执行一个JMX服务器(现在是MX4J,SUN RI也可以使用)。JOnAS的MBean服务器被 注册在这个JMX服务器里头。JOnAS管理控制 台是一个Web应用程序(基于Servlet∕JSP),它存取JMX服务器为了在管理控制台中展示管理的功能)。它可以透过一个简单的Web浏览器去管理一到多个的JOnAS应用程序 服务器。管理控制台允许设定所有的JOnAS服务(也可让这设定持久性)、部署任何种类的应用程序(EJB-JAR、WAR、EAR)以及任何种类的资源(数据 源、JMS和 邮件联机产生器、J2EE CA连接器),所有的动作都不需要停止∕重新启动服务器。管理控制台显示许多信息来监看你的服务器和应用程序:使用的内存、使用的线程、EJB实体的数目、哪个组件现在使 用的哪个资源等等...。

邮件服务

J2EE应用程序 组件可能会使用JavaMailTM来传送电子邮件。JOnAS应用程序 服务器的邮件服务提供必要的资源给这样的应用程序组件。相同于数据库服务或JMS服务,建立数据源或联机产生器及将这些对象注册到JNDI名称空间,邮件服务建立邮 件产生器并注册这些资源到JNDI名称空间。邮件产生器有两个种类:javax.mail.Sessionjavax.mail.internet.MimePartDataSource

JOnAS开发和部署环境

JOnAS设定和部署工具

一旦JOnAS已经被安 装完成在JONAS_ROOT环境变量所关联的目录,它可以设定服务器且部署应用程序到几个执行的环境。这是使用JONAS_BASE环境变量来完 成。JONAS_ROOT和JONAS_BASE可以比照Tomcat的CATALINA_HOME和CATALINE_BASE变量。JONAS_ROOT是专给JOnAS安装时所 用,JOnAS_BASE是被使用来指定个别的JOnAS实体的设 定。JONAS_BASE设计一个目录来包含特定的JOnAS设定,子 目录包含了会被加载到这个应用程序服务器的EJB-JAR、WAR、EAR和RAR文件。在JOnAS的build.xml中的ANT目标用来建立一个新的JON AS_BASE目录架构。因此从JOnAS的安装仅是改变JONAS_BASE变量的值,它可以切换一个应用程序环境到另一个环境去。为了设定JOnAS应用程序服务器和为了加载应用程序,你应该使用管理控制台或编辑设定档。它们也自动加载目录以允许当JOnAS服务器启动时在这个被加载的目录中自动加载各类的应用程序。

有关于部署,JOnAS提供几项 工具。

- 首先先撰写部署描述档,整合开发环境的插件提供了一些产生器和编辑功能(有Eclipse和JBuilder插件可用)。NewBean JOnAS内建 工具会为JOnAS产生样版部署描述档。 Jdoclet工 具也可用来产生JOnAS的部署描述檔。Apollon是ObjectWeb项 目,用来产生图形使用者接口来编辑任何的XML文件,它已经被用来产生部署描述档编辑器的GUI。一个由ObjectWeb JOnAS社群 开发的工具也可用来与ObjectWeb Ishmael项目所提供兼容于JSR88(J2EE 1.4)的部署API工作。

- 为了部署它自己,基本的工具为JOnAS GenIC命令列工具和映射的ANT ejbjar任 务。IDE插 件整合了部署操作工具的使用。Ishmael项目主要特性是JOnAS平台上的 应用程序部署。

JOnAS开发环境

有许多插件和工具用来让J2EE应用程序的开发被部署到JOnAS更容易。JBuilder和Eclipse的IDE插件允许开发、部署和除错JOnAS上的J2EE组件。Xdoclet程序代码产生 引擎通过读取EJB implement class 中特定的JavaDoc标签来产生EJB接口、部署描 述文件。JOnAS NewBean工具产生接口的样版、实现类别以及部署描述档来给任何种类的EJB。许多开发工具可以用于JOnAS的开发,请详见JOnAS工具页

此外,JOnAS给出了完 整的J2EE范例,提供有所有必要目标的build.xml ANT文件来编译、部署和安装J2EE应用程序。

集群及性能

应用程序服务器的集群一般来说有三个特性:负载均衡(Load Balancing,LB)、高可用性(High Availability,HA)和失败接管(Failover)。这样的机制可 以被提供在Web容器阶层(传递请求到几个Servlet∕JSP引擎实体)、EJB容器实体阶层(传递处理EJB请求到几个EJB容器实体)、以及在数据库阶 层透过使用几个数据库。复制的JNDI名称也是必要的。

JOnAS通过WEB容器层提供负载均衡、HA和失败接管,使用Apache Tomcat mod_jk插件和HTTP基于JavaGroup的 内存内session复制机制。插件传送HTTP请求从Apache网站服务器到执行成JOnAS的web容器的Tomcat实体。服务器从下和上 自动在账号中被取得。这个插件随着sticky session选项 支持round-robin和加权round-robin负载均衡算法。

负载均衡和HA是在JOnAS的EJB容器层提供。操作调用的EJB Home接口(EJB建立和取得)被传送在集群的节点上。这机制是基于"clustered aware"复制的JNDI注册使用了集群远程Method调用协议(Clustered remote Method Invocation protocol,CMI)。Stub包含了集群的知识、负载均衡策略的实现,它可以是round-robin、和加权round-robin。未来不 久,基于节点加载的负载均衡机制将可以使用。在EJB层的失败接管将由实现stateful session bean状态复制机制所提供。

JOnAS集群架构如下图说明。

Clustered Architecture

Apache被用 作前端HTTP服务器,Tomcat为JOnAS的Web容器。JOnAS服务器分享相同的数据库。mod_jk插件在Servlet∕JSP层提供负载均衡∕高可用性。失败接管透过内存内的session复制机制。负载均衡∕高可用性透过关联于复制集群认知的JNDI注册的CMI协议被 提供在EJB层。Tomcat可以执行在相同或不相同的JVM下的EJB容器。JOnAS提供一些 文件来设定这样的架构。

ObjectWeb专案中的 C-JDBC的使用允许在数据库层提供负载均衡和高可用性。C-JDBC的使用是透明化于应用 程序(在这指JOnAS)的,它是可被视成为一个平常的JDBC驱动程序。然而这个"驱动程序"实现了集群机制(读是被负载均衡的,写是用广播的)。数据库是被分散且被复制在几个节点中 且C-JDBC负载均衡查询在这些节点之间。C-JDBC的评定使用了TPC-W性能测试在6个集群节点已经显示性能线型缩放比例等于6个节点。

除了集群解决方式,JOnAS还内在的提供许多机制,提高了JOnAS服务器的扩展性和效率。这包括:

- Stateless session bean实体的资源池。

- Entity实 体的资源池,设定每一个entity bean,在它的部署描述檔之中。

- Entity bean的活化∕钝化,钝化可以透过管理控制台来控制。

- 联机资源池,有JDBC、JMS、J2EE CA连接器。

- Message-drivern bean线程资源池。

- Session bean到期可以在部署指定。

- 若这个entity bean的持久性陈述被几个服务器∕应用程序分享,或若它是用来给加载它的JOnAS服务器, 在特定的entity bean的部署描述檔中的"shared"标志来指示。在最后的案例,最佳化由JOnAS存在于不 需重新加载交易处理之间的相关数据。

- 平常的EJB 1.1的"isModified"(或"Dirty")机制是可以使用的,避免储存无修改的数据。

一些性能测试和JOnAS使用案例 已经显示JOnAS有高度可扩展性,可见范例Rubis结果,或OpenUSS使用案例。Rubis是一个针 对电子商务J2EE应用程序的性能测试,它现在属于ObjectWeb JMOB(Java中间件软件开放性能测试)项目。OpenUSS是一 个可使用的大学门户网站,有大约5000个相关使用者。

未来展望

作为一个开放源代码J2EE服务器的实现,JOnAS正在不断进步中,以满足使用者需求和遵循相关标准。主要的JOnAS发展计划如下:

- JDBC的J2EE CA 1.0资源适配 器,年中计划。它将取代现在的JOnAS数据库服务来插入JDBC驱动程序和管理联机资源池。另外,它将提供JDBC PrepareStatement资源池。在年底的时候,这个资源转接器的新版本,兼容于J2EE CA 1.5(J2EE 1.4),将可以使用, 且将提供JDBC的ResultSet的 重用给EJB容器(这个优化减少了EJB容器的SQL statement执行数量)。

- EJB 2.1(J2EE 1.4)规范的支持将在年底提供。这将包括"Timer"服务。

- "Web Services"的支持将被完成,为了支持指定在J2EE 1.4的标准部署。用于"Web Services"开发的工具和开放源代码UDDI实现将被整合。

- 如指定在JSR88(J2EE 1.4)的部署API将被在年底支持,感谢Ishmael项目。

- 通过引入管理领域的概念加强了JOnAS的管理。

- ObjectWeb JOTM项目将被整合进JOnAS的交易处理服务。这将允许支持巢状交易处理、CORBA交易处理和"Web Services"交易处理。

Sun、Java、和所有基于Java的商标是Sun微电脑公司在美国或其它国家的商标或所注册的商标。