Apusic应用服务器技术概览
2008-12-02
作者:袁红岗
在Java规范的三个版本中,J2EE(Java 2 Enterprise Edition)是面向企业应用定义了一系列分布式服务的规范,Apusic应用服务器" title="应用服务器">应用服务器是国内第一个自有知识产权严格遵循J2EE规范的应用服务器产品,同时还为企业应用提供了很多功能拓展。Apusic应用服务器的体系结构为:
图一: Apusic应用服务器的体系结构
Apusic应用服务器提供了下列服务和功能:
.EJB容器(无状态Session Bean、有状态Session Bean、Entity Beans、Message-Driven Beans);
. Web容器;
.分布式事务服务;
.安全服务;
. 基于JMX的管理服务;
. JMS;
. Web Services;
. JDBC服务;
. Java Mail服务等。
在此,就以下几个方面分析Apusic应用服务器提供的服务和功能:
表现层
业务逻辑层
数据层
安全服务
事务服务
名字服务
Web Services
与CORBA的互操作
一. 表示层
多层应用模型中的表示层主要被用于与浏览器、桌面应用、无线设备及其他客户端" title="客户端">客户端的交互,Apusic应用服务器支持所有的客户机/服务器的交互机制。
J2EE?规范中包含了JSP和Servlet规范,JSP和Servlet定义了J2EE企业应用中的表示层的编程模型。通过使用JSP和Servlet,实现Web内容的动态生成。Apusic应用服务器完全支持JSP、Servlet规范,提供了对于诸如Filter等最新特性的支持
对于通过浏览器进行的HTTP请求,Apusic应用服务器提供了一个高效可靠的Web服务器。通过使用Servlet和JSP实例池、结果缓存、JSP编译调试工具等工具和技术,对部署于服务器上的JSP和Servlet,Apusic应用服务器服提供了一个高效可靠的运行时环境和开发、部署和维护的高效易用的平台。
除了对J2EE相关JSP和Servlet规范的实现,Apusic应用服务器中的Web容器和相关工具还提供了一些特有的特性,通过这些特有的特性,使得面向Apusic应用服务器的表示层的开发、部署、运行和维护变得更加方便和高效。
· 虚拟主机
可以在单个的Apusic应用服务器上配置多个Web站点。通过域名与应用服务器的路径映射实现此功能,只需指定域名即可实现对站点的访问。
· 多路复用
Apusic 应用服务器采用了多路复用(multiplexing)通讯技术。在一个TCP/IP 连接上建立多个双向的虚拟连接,每个虚拟连接可以进行完全独立的通讯功能。通讯双方可以根据需要打开或关闭虚拟连接,进行通讯,实现了将多个服务统一到一个端口上,降低服务器的管理成本。
· 使用第三方Web服务器
除了Apusic应用服务器内置的Web服务器外 ,Apusic应用服务器可以与其他现有的Web服务器进行整合,如Apache、Microsoft IIS等,通过使用Apusic应用服务器提供的负载均衡功能,为企业应用提供一个更高可用性和伸缩性的平台。
· 负载均衡与失效恢复
Apusic应用服务器提供了基于Web层的负载均衡的功能。当使用Apusic作为集群中的负载均衡器时,服务器提供了独有的负载均衡和失效恢复的特性。
· JSPC工具
为提高表示层JSP的开发调试的效率,Apusic提供了一个简单易用的JSP命令行编译工具JSPC,通过此工具,开发者可以对JSP进行更为高效的开发和调试,通过设置相关调试工具,可以实现对JSP的源码级调试。
二.业务逻辑层
多层应用模型中的业务逻辑层被用于封装应用业务逻辑,包括独立于应用界面的业务组件,通过应用服务器中的组件容器提供运行时环境。 Enterprise JavaBeans?(以下称EJB)是J2EE?应用中的业务逻辑层的组件模型。Apusic应用服务器提供了对EJB2.0规范的完全实现,同时提供了相关的特有特性,以简化对J2EE应用逻辑层的开发、部署、管理和维护。
Apusic应用服务器中的EJB容器提供对EJB的生存周期管理、缓存、持久性和事务管理等服务,Apusic提供三种类型的EJB的支持:Session Bean、Entity Bean和Message-driven Bean。 同时提供了相关的一些特性,如CMR、EJB QL等,为提高应用执行的效率,还提供了新的Local接口。
1.Entity Bean
Entity Bean被用于表示应用中的业务实体,通常与数据库或传统应用中的业务数据实体保持映射关系,可以理解为数据库或传统应用中的业务数据实体在内存中的对象表示方式。
Apusic应用服务器支持新的容器管理关系模型(CMR)和Entity Bean的查询语言EJB QL。
(1) 容器管理持久性(Container Managed Persistence)指由EJB容器处理Entity Bean需要的对数据库的访问。使Entity Bean可以脱离特定类型的数据库,从而具有更高的灵活性。
(2) 容器管理关系(Container Managed Relation)
容器管理关系用于对实体数据对象之间关系的管理。
容器管理持久性的Entity Bean有以下四种容器管理关系:
· one-to-one,一个Bean的单个实例关联另一个Bean的单个实例;
· one-to-many,一个Bean的单个实例关联另一个Bean的多个实例;
· many-to-one,一个Bean的多个实例关联另一个Bean的单个实例;
· many-to-many,一个Bean的多个实例关联另一个Bean的多个实例;
容器管理关系的方向可以是双向或单向。在一个双向的关系中,涉及的Bean都有一个关系域与另外的Bean关联,通过关系域,可以从一个Bean的实例中访问关联的Bean对象,反之亦可。在一个单向的关系中,只有一个Bean拥有关联其他Bean的关系域,只能从这个Bean的实例访问被关联的Bean对象,而不可从被关联的Bean对象访问到这个实例。
(3)EJBQL
对于容器管理持久性的Entity Bean,需要在部署描述中定义抽象模式的名字。这些名字将可以通过使用Enterprise JavaBeas? Query Language(EJB? QL)编写的查询语句进行引用。例如,必须为每一个finder方法定义一个EJB QL查询语句,通过此语句定义当此finder方法被调用时,容器执行的查询。
另外在Apusic的自有特性中提供了对从EJBQL中查询出的对象进行排序的功能,即扩展的了EJBQL的语句提供了Order By语句可以进行排序。
2.Session Bean
Session Bean通常被用于实现业务过程逻辑,通过对Entity Bean的操作完成业务过程并封装过程逻辑。 尽管在需要的情况下,Session Bean可以有保持数据到持久存储机制的能力,如数据库,但Session Beans不是持久的。
相对于表示业务实体的Entity Bean,Session Bean的生存时间要短,大致等于于一个客户端会话的延续时间。例如,客户通过浏览器,访问与Session Bean表示的相关业务过程,或通过一个Java应用程序" title="应用程序">应用程序或者是Applet访问的相关业务过程的持续时间,或其它Enterprise Bean访问此业务过程的持续时间。
Session Bean是非持久的,其状态不被保存到持久存储机制(如数据库、文件系统)中,尽管Session Bean本身可以执行对数据库的操作,但它并不是一种持久对象的表示。
Session Bean表示客户端与应用之间的会话。会话由客户端与组件之间的交互组成,一般表现为一系列的方法调用" title="方法调用">方法调用。
根据Session Bean保持会话状态的方式,可分为状态的和无状态的Session Bean。
(1)无状态(Stateless)的Session Bean,会话状态只会在单个方法调用中被保持,一旦方法调用结束,组件将丢弃方法调用过程中保持的状态,不保持跨越方法调用的会话状态。
(2)对于有状态(Stateful)的Session Bean,在整个会话期间,特定组件实例将保持与某个特定客户端之间跨越方法调用的会话状态。
3.Message-driven Bean
Message-driven Bean 是EJB2.0规范中新增的一个enterprise bean 类型,通常被用于异步接收从客户端发送的消息,触发相应的业务处理过程。
Message-Driven Bean 作为EJB2.0规范中新增的一个enterprise bean 类型,除得到应用服务器管理的事务,安全和资源访问的服务之外,同时作为 JMS消息系统中的消息使用者 (Message Consumer)接收并处理应用消息。
通过消息机制而非直接的方法调用,客户端可以继续执行而不必等待服务器的运行结果,服务器可以选择在方法调用完成后通知客户,而消息机制本身保证了信息传输的可靠性, 同时使用消息域(Message Domain)中的消息类型模型以达到事件广播的机制。
(1) Message-driven Bean 作为一般的JMS 使用者(consumer)
作为一种具有JMS使用者(consumer)功能的Enterprise Bean组件模型,Message-Driven Bean由EJB容器进行管理,具有一般的JMS使用者(consumer)所不具有的优点,如对于一个Message-driven Bean,容器可创建多个实例来处理大量的并发消息,而一般的JMS使用者 (consumer)开发时则必须对此进行处理才能获得类似的功能。同时Message-Driven Bean可取得EJB所能获得的标准服务,如容器管理事务等服务。
(2) Message-driven Bean 与其他Enterprise Bean
作为Enterprise Bean组件模型之一,Message-driven Bean,具有一些与Session Bean 和Entity Bean相同的方法,但由于Message-driven Bean本身不处理客户端调用,也无会话状态,客户只能通过向与Message Driven Bean关联的队列或主题发送消息从而与Message-driven Bean 进行交互,因此,Message-driven Bean 与Session Bean 和Entity Bean之间最大的不同之处在于Message-Driven Bean不具有组件接口及Home接口。
另外,Message-driven Bean异步地处理队列(Queue)或主题(Topic)中的消息,而非方法调用。
4.Apusic专有特性
除了对EJB2.0规范的实现,Apusic应用服务器中的EJB容器和相关系统服务还提供了一些高端增值特性,通过这些增值特性,使得面向Apusic应用服务器的业务逻辑层的开发、部署、运行和维护变得更加方便、高效和可靠。
(1)实例池
通过图形化的配置工具或简单修改组件配置文件,Apusic应用服务器可以预先装载指定数量的对象实例到实例池中,使对客户请求进行响应的过程更加高效。
(2)CMP Entity Bean自动升迁
对于一个按照EJB1.1规范编写的CMP Entity Bean,应用服务器在运行时将其自动升级到EJB2.0,使按照EJB1.1规范编写的EJB可以使用EJB2.0规范中提供的Lazy Loading和Smart Update技术以提高应用执行的效率,同时降低已有应用在维护上的成本。
(3)热部署
为提高企业应用开发、调试和维护的效率,Apusic应用服务器提供了热部署的功能。在运行时,可以动态地部署和修改应用中的应用程序,无需停止和重新启动服务器即可应用新的改动。
(4)自动迁移及部署
不同的应用服务器厂商提供的基于J2EE?规范实现的应用服务器的不同,使得多数企业应用在不同的服务器之间迁移时,需要改动一些配置,提高了应用移植的成本,Apusic应用服务器提供了自动迁移和部署的能力,对于面向其他非Apusic应用服务器开发的企业应用,可以不改动应用程序,而由应用服务器自动完成移植的工作并部署到应用服务器,大大降低了应用移植的成本。
目前对于面向Weblogic8.1和J2EE?RI开发的企业应用,可以直接使用这项功能,Apusic应用服务器还将在此项功能上添加对当前其他主流应用服务器的支持。
(5)自动生成查询
为提高面向CMP Entity Bean的开发效率和降低开发的难度,Apusic应用服务器可为CMP Entity Bean自动生成缺省的finder query。
三. 数据层
Apusic应用服务器模型中的数据层提供企业应用对关系型数据库和传统企业应用数据的高效而可靠的访问。使得企业应用可以通过JDBC实现对关系型数据库安全、可靠而且高效的访问。目前Apusic应用服务器提供了对最新的JDBC3.0版本的支持。任意合法的J2EE?编程模型都可以从Apusic应用服务器数据库连接池中获得对关系型数据库的连接。
按照J2EE?的规范,Entity Bean被设计为与数据库直接交互的最佳模型,但在实际的企业运用开发中,任何一种编程模型都有可能直接与数据库进行交互,针对这种情形,Apusic应用服务器提供了很多功能或特性,使对数据层访问的开发更为简单同时达到更为高效而安全的目标。
· JDBC结果集缓存
对于Session Bean、JSP、Servlets为主的J2EE应用中,频繁访问数据库而缺少对应的数据缓存等机制,往往会成为企业应用的瓶颈。因此,Apusic应用服务器提供了JDBC结果集缓存技术,通过将数据库返回的结果集保存在内存中可以大幅提高应用系统的性能,同时,使用结果集缓存对应用开发者是完全透明的,保证了应用的可移植特性。
· JDBC语句缓存
对于Session Bean、JSP、Servlets为主的J2EE应用中,频繁访问数据库而缺少对应的数据缓存等机制,往往会成为企业应用的瓶颈。因此,Apusic应用服务器提供了JDBC语句缓存技术,同时使用预编译的查询语句,提高应用程序访问数据库的效率。
· 连接池
对于复杂的企业应用而言,对数据库连接池的可靠、效率,成本都有着极高的要求,Apusic应用服务器提供了对连接资源的优化,使有限的数据库连接资源得到最大程度的利用,同时,对于应用错误使用连接造成的死锁" title="死锁">死锁或阻塞,提供了死锁检测的技术,而以上的特性对于用户而言是完全透明的。
四.安全服务
对于企业应用而言,应用服务器所能提供的安全方面的功能是保证企业应用数据完整、逻辑完整和减少被入侵可能的 重要特性,针对多层的分布式企业应用的安全要求,Apusic应用服务器提供了可靠高效的安全构架。同时,为应用程序的加密需求提供了一个安全、强壮、高效的JCE(Java Cryptography Extension)提供者。
图二 Apusic服务器数据安全功能的架构
· 身份鉴定
Apusic应用服务器提供了面向用户、调用过程和客户端调用等方式的身份鉴定,通过使用用户名和密码、证书等等方式,将合法的应用用户和调用程序区别于非法的入侵者。
· 授权
授权是使企业应用的完整性和安全性得以保证的重要因素,Apusic应用服务器对企业应用的授权策略提供了易于配置和修改的方法与工具,同时提供了可靠安全的授权机制。
· 加密
对于企业应用中的敏感数据的保存和交换,Apusic提供了高效可靠的加密机制。
Apusic 安全服务提供了数字签名、消息摘要、消息鉴别码、RSA 非对称加密、序列密码加密、分组密钥密码加密、密钥生成、密钥交换等常用的算法。
· 安全数据存储
对于系统中的关键数据,如消息、用户信息等等,Apusic提供了极安全的内部保护存储机制。
Apusic 应用服务器的加密算法完全是自主实现的,一举打破国际对中国加密算法位数的限制。国内企业,政府部门等使用Apusic 应用服务器会更加安全可靠。
Apusic应用服务器同时提供了对JSSE的实现。
五.事务服务
J2EE中对于事务的处理是分布式的,Apusic完全提供对XA事务的支持,显示对大型企业应用的支持。
为了简化开发者对事务的处理,Apusic应用服务器在EJB容器中提供容器管理事务(Container Managed Transaction),应用开发者使用EJB管理数据即自动获得了事务的保证,由于EJB容器对数据库的管理是分布式的开发者又由此自动获得了对应用开发较为困难的分布事务管理能力,这一切都由应用服务器完成。
为保证应用数据和业务逻辑的的完整性,除了提供完全符合规范和强壮的事务管理器之外,Apusic应用服务器对Entity Bean中特别是CMP类型的组件,提供了强壮而灵活的事务构架。
· 死锁检测
能够根据资源等待图自动检测出死锁状态,当事务发生死锁时将其中一个事务回滚,以释放事务所占用的资源,使其他事务能够继续执行。
· 并发控制
提供了灵活和强壮的EJB并发控制机制,单独分离出了并发控制部分,可以使用插件的形式同时提供多种并发控制协议。
· JMS全局事务
提供了一个作为事务性资源管理器的JMS 提供者(Provider),允许从JSP,Servlet, EJB 等应用组件中对JMS 进行事务性的访问。同时,从一个单一事务边界中允许多个应用组件访问JMS 提供者。
六.名字服务
由于J2EE应用的关键特性是分布式的,其提供的服务可能分布在任何一个机器或网络,应用的开发统一通过JNDI(Java Naming and Directory Interface)来获得服务,开发者在开发时可以不用关心服务的物理所在。
Apusic完全支持使用JNDI,并且开发完成后,部署者(Deployer)可以在部署工具中配置应用所需要的环境、资源、服务,使应用获得所需的分布式服务,完成最终生产环境的建立。
七.Web Services
Apusic应用服务器实现了对Web Services的支持。Apusic Web Services 是一个开放的遵循业界标准的Web Services实现,主要实现了以下 的Web Services相关规范:
. JAX-RPC1.0
. JAXM1.1
. SAAJ1.1
. JAXR1.0
. SOAP1.1
. SOAP with Attachments
. WSDL1.1
. UDDI2.0
Apusic Web Services支持和其他Web Services产品的交互,包括Weblogic和.Net。
八.与CORBA的互操作
CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范,被广泛的用来开发分布式系统。Apusic应用服务器完整的实现了CORBA-EJB映射规范,因此可以和CORBA对象进行互相调用。CORBA和EJB的互操作规范包含以下四个方面:
. EJB接口到CORBA接口的映射;
. JNDI名字到CORBA名称服务(CosNaming )的映射;
. EJB和CORBA之间的事务传播;
. EJB和CORBA之间的安全传播。
Apusic应用服务器实现了RMI-IIOP(Internet Inter-ORB Protocol)协议,能够在多个Apusic服务器实例之间传播事务、安全等上下文信息(Context)。
经过上面的初步分析可以看出,Apusic应用服务器是一个完全基于J2EE?1.3规范的应用服务器产品,为分布式企业应用提供了安全、可靠、高效的开发、部署、维护的平台。特别适合为电子商务、电子政务和行业应用的开发提供基础平台。