金蝶Apusic应用服务器产品采购可行性分析报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
金蝶Apusic应用服务器产品采购可行性分析报告一、产品概述
Apusic 应用服务器4.0是完全遵循J2EE1.4规范的Java企业级应用服务器,是经受大量客户应用验证的应用支撑平台。
J2EE是一个开放的描述多层企业级应用开发的技术规范,由国际权威的Java标准化组织JCP倡导制订,JCP由众多国际知名厂商参与其中,最大程度保证了其一贯倡导的开放性。
Apusic 应用服务器是国内
第一个自有知识产权并严格遵循和实现J2EE 规范的应用服务器产品,为分布式的企业级应用提供了一个开发、部署和运行平台,对于分布式的企业级应用,提供了易扩展、可伸缩和高安全性等特性。
本文介绍了Apusic 应用服务器的体系结构,然后分别介绍了Apusic提供的服务和功能,从而显示Apusic 应用服务器对开发大型应用系统的支持能力。
Apusic应用服务器4.0已于2005年2月28日通过J2EE1.4的兼容性测试认证,能在较短间内完成
J2EE1.4的测试和认证,不仅表明Apusic应用服务器对J2EE规范紧密的跟踪,也说明Apusic应用服务器在设计时就是高质量并高度兼容J2EE规范的产品。
事实说明Apusic应用服务器已经达到世界级产品的要求。
二、功能介绍
●对Web 浏览器客户端的支持;
●对应用程序客户端的支持;
●提供内置的高效Web 服务器,并可使用Microsoft IIS 或Apache 作为Web 服务器;
●提供易用的企业应用部署及远程管理工具,可通过易于理解和使用的图形界面,或可高度自动化的命令行界面进行部署和管理应用;
●提供对无线客户端的支持;
● Apusic 应用服务器严格遵循如J2EE 等企业计算相关的工业规范及标准,包括EJB、Servlet、JSP、JMS、JNDI、JCA、JACC、HTML、Web Services、XML 等等;
● Apusic 支持多种关系型数据库。
通过Apusic,可更好地保护企业已有的IT资产。
三、性能分析
标准:
● Sun公司说:“非常高兴金蝶中间件通过了J2EE1.4应用服务器认证,取得了J2EE技术的许可,这对Java Web服务标准在整个亚洲的采用将起到积极的带动作用.金蝶中间件的技术经验,以及其产品的领导地位和声誉,将为它的客户提供强大的、具有竞争力的基础软件平台。
”
● Apusic应用服务器完全遵循J2EE规范,已通过国际权威J2EE 1.4标准认证,产品功能与国际上的主流产品保持同步并支持XML、Web Services相关规范,支持W3C的互联网技术标准。
安全:
●对于企业应用而言,应用服务器所能提供的安全方面的功能是保证企业应用数据完整、逻辑完整和减少被入侵可能的重要特性,针对多层的分布式企业应用的安全要求。
作为完全自主知识产权的产品,
Apusic应用服务器提供了Java安全框架JCA(Java Cryptograph ArchITecture)并实现Java加密扩展JCE(Java Cryptograph Extension),提供身份鉴定、安全数据存储、授权等功能。
● Apusic应用服务器的加密算法无加密位上限限制,对重要客户我们可以开放安全加密模块的源
代码;并可插拨式地增加第三方安全加密软件。
高效:
● Apusic应用服务器通过死锁检测、连接共享、结果集缓存等手段,突破了并发控制和性能优化两大技术瓶颈,并为开发、部署、维护提供了部署、性能监测、远程管理、自动迁移等工具,极大地提高了开发运行效率。
●经测试,Apusic在Solaris 10上运行性能优越,系统资源利用充分。
相比较同类型PC Server,性能超出非常明显。
Apusic 应用服务器在处理Html、SessionBean性能方面好过BEA Weblogic。
随着系统并发用户的增加,Apusic4.0对中间件服务器的压力要低于Weblogic8.1。
在其他性能方面也接近世界最好水平。
集成:
●“信息只有经过分享才能成为生产力”,一个基础架构软件,应该是开放、跨平台和高度集成的应用支撑平台,将众多分散的信息孤岛互联互通,使之成为畅通无阻的广袤大陆。
● Apusic 应用服务器实现了与CORBA及Web Services的良好集成;在与其他消息中间件、交易中间件的集成方面,Apusic也表现出色。
四、技术特点
按照多层企业应用的分层方式,从以下三个层次概述Apusic应用服务器3.0的特性。
(1). 表示层
多层应用模型中的表示层主要被用于与浏览器、桌面应用、无线设备及其他客户端的交互,Apusic应用服务器支持所有的客户机/服务器的交互机制。
在基于J2EE?编程模型的应用中,表示层主要使用JSP、Servlets 编程模型,对于Apusic应用服务器,还支持诸如Java Applets、Java Application或其他ActiveX组件的客户类型。
对于通过浏览器进行的Http请求,Apusic应用服务器提供了一个高效可靠的Web服务器。
通过使用Servlet和JSP实例池、结果缓存、JSP编译调试工具等工具和技术,对于部署于服务器上的JSP和Servlet,Apusic应用服务器服提供了一个高效可靠的运行时环境和开发、部署和维护的高效易用的平台。
1.对规范的实现
J2EE?1.3规范中包含了JSP和Servlet规范,通过使用JSP和Servlet规范,定义了J2EE企业应用中的表示层的编程模型。
通过使用JSP和Servlet,实现Web内容的动态生成。
JSP与Servlet是紧密相关的两种编程模型,二者都生成动态的Web内容。
不同之处在于Servlet使用JAVA语言编写,而JSP的编写还使用了HTML的扩展版本。
对于使用HTML编辑器或
设计器并熟悉HTML的Web设计者来说,JSP非常便利。
而全部使用JAVA的Servlet更适用于JAVA 程序员而非Web设计者。
Apusic3.0应用服务器中的Web服务器严格遵循了J2EE?规范中Servlets2.3规范和JSP1.2
规范。
2.增值特性
除了对J2EE相关JSP和Servlet规范的实现,Apusic应用服务器中的Web容器和相关工具还提供了一些增值特性,通过这些增值特性,使得面向Apusic应用服务器的表示层的开发、部署、运行和维护变得更加方便和高效。
●虚拟主机
可以在单个的Apusic应用服务器上配置多个Web站点。
通过域名与应用服务器的路径映射实现此功能,只需指定域名即可实现对站点的访问。
●多路复用
Apusic 应用服务器采用了多路复用(multiplexing)通讯技术。
在一个TCP/IP 连接上建立多个双向的虚拟连接,每个虚拟连接可以进行完全独立的通讯功能。
通讯双方可以根据需要打开或关闭虚拟连接,进行通讯,实现了将多个服务统一到一个端口上,降低服务器的管理成本。
●使用第三方Web服务器
除了Apusic应用服务器内置的Web服务器外,Apusic应用服务器可以与其他现有的Web服务器进行整合,如Apache、Microsoft IIS等,通过使用Apusic应用服务器提供的负载均衡功能,为企业应用提供一个更高可用性和伸缩性的平台。
●负载均衡与失效恢复
Apusic应用服务器提供了基于Web层的负载均衡的功能。
当使用Apusic作为集群中的负载均衡器时,服务器提供了独有的负载均衡和失效恢复的特性。
对于一个使用Apusic作为负载均衡器的服务器集群,当客户请求到达负载均衡器时,负载均衡器将请求转发到最初服务此请求的内部服务器,如果是初次请求,则负载均衡器随机选择集群中的任意一个内部服务器处理此请求;当内部服务器处理完请求,将产生的应答返回给负载均衡器,会话数据被保存在负载均衡器上;当下一个请求到达而原先处理该请求的内部服务器失效时,负载均衡器重新选择一个正常的内部服务器,这时会话数据连同请求一起被转发给新的内部服务器,会话数据被迁移到新的内部服务器。
此特性以较少的数据迁移量,较高的容错性,提供了基于Web层的负载均衡与失效恢复的增值特性
● JSPC工具
为提高表示层JSP的开发调试的效率,Apusic提供了一个简单易用的JSP命令行编译工具JSPC,通过此工具,开发者可以对JSP进行更为高效的开发和调试,通过设置相关调试工具,可以实现对JSP的源码级调试。
最有利的是,发布应用只需要发布编译好的jsp class,即可对jsp源代码提供保护,而不需要提供jsp源程序文件,以免因为其他原因暴露jsp的源文件,并且,在应用运行时,避免对jsp 源文件进行编译以节省时间。
(2) 业务逻辑层
多层应用模型中的业务逻辑层被用于封装应用业务逻辑,包括独立于应用界面的业务组件,通过应用服务器中的组件容器提供运行时环境。
Enterprise JavaBeans?(以下称EJB)是J2EE?应用中的业务逻辑层的组件模型。
Apusic应用服务器3.0版本提供了对EJB2.0规范的完全实现,同时提供了相关的增值特性,以简化对J2EE应用逻辑层的开发、部署、管理和维护。
1. 对规范的实现
Apusic应用服务器中的EJB容器提供对EJB的生存周期管理、缓存、持久性和事务管理等服务。
目前,J2EE规范中最新的EJB规范为2.0版本。
EJB2.0规范中定义了三种类型的EJB:Session Bean、Entity Bean和Message-driven Bean。
同时定义了相关的一些特性,如CMR、EJB QL等,为提高应用执行的效率,还定义了新的Local
接口。
Apusic3.0提供了对以上内容的完全实现。
● Entity Bean
Entity Bean被用于表示应用中的业务实体,通常与数据库或传统应用中的业务数据实体保持映射关系,可以理解为数据库或传统应用中的业务数据实体在内存中的对象表示方式。
Entity Bean的实例可由任何客户端的请求生成实例,且不因客户连接中断、系统失效等原因而消失,其状态被持久保留在数据库或传统应用中。
EJB2.0规范中对Entity Bean定义了新的容器管理关系模型(CMR)和Entity Bean的查询语言EJB QL。
● Session Bean
Session Bean通常被用于实现业务过程逻辑,通过对Entity Bean的操作完成业务过程并封装过程逻辑。
尽管在需要的情况下,Session Bean可以有保持数据到持久存储机制的能力,如数据库,但Session Beans不是持久的。
● Message-driven Bean
Message-driven Bean 是EJB2.0规范中新增的一个enterprise bean 类型,通常被用于异步接收从客户端发送的消息,触发相应的业务处理过程。
作为Enterprise Bean,Message-driven Bean具有一些与Session Bean 和Entity Bean 相同的接口方法,但由于Message-Driven Bean 本身不处理客户端调用,也无会话状态,客户只能通过向与Message Driven Bean 关联的队列或主题发送消息从而与Message Driven Bean 进行交互,另外,Message–Driven Bean 异步地处理队列(Queue)或主题(Topic)中的消息,而非方法调用。
2. 增值特性
除了对EJB2.0规范的实现,Apusic应用服务器中的EJB容器和相关系统服务还提供了一些高端增值特性,通过这些增值特性,使得面向Apusic应用服务器的业务逻辑层的开发、部署、运行和维护变得更加方便、高效和可靠。
●实例池
通过图形化的配置工具或简单修改组件配置文件,Apusic应用服务器可以预先装载指定数量的对象实例到实例池中,使对客户请求进行响应的过程更加高效。
● CMP Entity Bean自动升迁
对于一个按照EJB1.1规范编写的CMP Entity Bean,应用服务器在运行时将其自动升级到EJB2.0,使按照EJB1.1规范编写的EJB可以使用EJB2.0规范中提供的Lazy Loading和Smart Update技术以提高应用执行的效率,同时降低已有应用在维护上的成本。
●热部署
为提高企业应用开发、调试和维护的效率,Apusic应用服务器提供了热部署的功能。
在运行时,可以动态地部署和修改应用中的应用程序,无需停止和重新启动服务器即可应用新的改动。
●自动迁移及部署
不同的应用服务器厂商提供的基于J2EE?规范实现的应用服务器的不同,使得多数企业应用在不同的服务器之间迁移时,需要改动一些配置,提高了应用移植的成本,Apusic应用服务器提供了自动迁移和部署的能力,对于面向其他非Apusic应用服务器开发的企业应用,可以不改动应用程序,而由应用服务器自动完成移植的工作并部署到应用服务器,大大降低了应用移植的成本。
目前对于面向Weblogic6.0和J2EE?RI开发的企业应用,可以直接使用这项功能,Apusic应用服务器还将在此项功能上添加对当前其他主流应用服务器的支持。
●自动生成查询
为提高面向CMP Entity Bean的开发效率和降低开发的难度,Apusic应用服务器可为CMP Entity Bean自动生成缺省的finder query。
3.数据层
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 应用服务器提供了对连接资源的优化,使有限的数据库连接资源得到最大程度的利用,同时,对于应用错误使用连接造成的死锁或阻塞,提供了死锁检测的技术,而以上的特性对于用户而言是完全透明的。
五、成功案例
(1). 广东省工商行政管理局业务系统平台作为全国工商系统的佼佼者,根据全国工商总局的整体规划和安排,广东省工商局开始了“数字工商”的建设。
这涉及到多个业务部门,涉及的数据量庞大、业务系统众多。
选择Apusic应用服务器作为底层平台,应用遍布广东省工商系统19个地市、110多个县(区)、共1047个工商所。
为市场经济提供更快捷服务,极大提升了工商行政管理的综合水平。
(2) 中国人民银行总行综合信息平台(国家央行)选择Apusic应用服务器来支撑综合信息管理平台及应用系统,有效整合了原有各类资源,同时很好适应了复杂的新业务需求,满足了稳定性、安全性、扩展性和快速开发部署等要求;各地分、支行能更有效地利用总行的丰富信息资源,使得中国人民银行总行作为国家中央银行,充分实现了金融业信息化建设的“桥头堡”和“指南针”的龙头作用。
(3)全国15省(直辖市)高考网上阅卷系统中间件支撑平台整个网上阅卷系统都是在局域网内实现,与外网相隔。
此外,从传统的C/S二级结构向B/S三级结构转化也使阅卷系统更加稳定。
金蝶Apusic应用服务器中间件在B/S结构的运行中起到了关键作用。
由金蝶Apusic应用服务器支撑的海云天B/S浏览器模式采用三层结构:底层数据库、应用服务器和用户端。
用户端不需要安装软件,使用浏览器就能与数据库相连,并且不会残留信息,通过应用服务器处理就能全部储存在数据库。
湖北等全国15个省(直辖市)考试中心,占采用高考网上阅卷的80%
六、相关数据与图表
金蝶服务器
金蝶Apusic应用服务器采购比例
金蝶Apusic应用服务器基本数据资料目录包含
adminconsole 金蝶Apusic应用服务器6.0图形化管理控制台运行所需文件。
如果安装过程中选择安装Apusic Admin Console,则安装完后包含此目录,否则不包含此目录。
Bin 运行金蝶Apusic应用服务器6.0所需环境变量设置命令,Windows™平台下支持Internet Information Server(IIS) API plug-ins 的运行库和示例配置文件,其他命令行工具。
classes 需放置在USER CLASSPATH最前面的类文件放在此目录中,默认情况下,此目录为空。
common 金蝶Apusic应用服务器6.0和用户应用公用的JAR文件。
lib 运行金蝶Apusic应用服务器6.0所需的JAR文件。
任意的申请数据库连接
于是,在Java语言中,我们以面向对象的方法来实现,可能会是这样(常见写法,未必是最优实现):
public class Customer {
public void sequencePlus() {
Connection conn = null;
Statement stmt = null;
try {
conn = getConnection();
stmt = conn.createStatement();
String sql = "update T_SEQUENCE set CURRENT_VAL
= CURRENT_VAL + 1 "
+ " where NAME = 'CUSTOMER'";
stmt.execute(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(stmt);
DbUtils.closeQuietly(conn);
}
}
public int getSequenceCurrentVal() {
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
int id = 0;
try {
conn = getConnection();
stmt = conn.createStatement();
String sql = "select CURRENT_VAL from T_SEQUENCE
where NAME = 'CUSTOMER'";
rset = stmt.executeQuery(sql);
if (rset.next()) {
id = rset.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn, stmt, rset);
}
return id;
}
public void addCustomer(String name) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rset = null;
try {
sequencePlus();
int id = getSequenceCurrentVal();
conn = getConnection();
stmt = conn.prepareStatement(
"insert into T_CUSTOMER(ID, CUSTOMER_NAME) values(?, ?)");
stmt.setInt(1, id);
stmt.setString(2, name == null ? "" : name);
stmt.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(stmt);
DbUtils.closeQuietly(conn);
}
}
}。