将WebSphere Application Server 和 Apache Geronimo的支持和架构作为JBoss Application Server的最佳替代选择。本文帮助您将运行在 JBoss上的应用程序迁移到WebSphere Application Server Community Edition。
Java Enterprise Edition 5(Java? EE5?)面向开发和运行分布式、多层Java应用程序的编程平台。已开发的应用程序运行在其中一个Java EE容器上。两个容器实现相同的规范,因此可以无缝地将针对一个应用服务器开发的应用程序迁移到另一个应用服务器。然而,由于类加载器机制、应用程序打包方式、本机代码的使用以及部署计划等方面存在差异,这一过程并非一帆风顺。
在本文中,我们将介绍两种应用服务器及其架构方面的异同。迁移文章 一节介绍将针对JBoss Application Server 开发的应用程序迁移到WebSphere Application Server Community Edition所涉及的步骤。首先,我们将从较高的层面介绍这两种应用服务器。
JBoss应用服务器是Java Enterprise Edition 5兼容应用服务器,用于应用程序开发、测试和部署,由Red Hat创建。注意,到目前为止,JBoss v5一直在jboss.org上发布,但是RedHat JBoss v5尚未完整发行。JBoss v5的迁移应该是类似的。
Community Edition是Java Enterprise Edition 5认证的基于 Apache Geronimo 的应用服务器。它经过预打包,包含以下开源组件(仅列举其中一部分):
Apache Derby,用作默认的数据库服务器
Apache OpenJPA,用作持久化引擎
Apache OpenEJB,用作EJB容器
Apache Tomcat,用作 Web 容器
Active MQ,用作消息传递提供者
Geronimo内核是Geronimo的核心,它充当粘合剂的作用,可以插入任何开源组件。
Community Edition的一些高级特性包括:
Java支持-IBM和Sun Java。
平台支-SUSE、Ubuntu、Red Hat和Asianux Linux、AIX、Sun Solaris、Windows XP、2003、2008和Vista。
数据库支持-Apache Derby、IBM DB2、IBM Informix、MySQL、Oracle 和Microsoft SQL Server(任何 JDBC 兼容的数据库都可以使用)。
消息传递支持-Apache ActiveMQ、WebSphere MQ。
目录服务器支持-Apache Directory Server、IBM Tivoli Directory Server、Microsoft Active Directory Server、Open LDAP Server和Sun One Directory Server。
内存占用少-可以很轻松地开始使用Community Edition——下载只占用约100MB,因此开发人员可以轻松下载和使用它。Community Editions 的轻巧性也意味着它可以很容易地嵌入到更大的堆栈中,这可以帮助客户和ISV使用Community Edition构建完整的解决方案。
集中式配置和控制- Community Edition 通过管理控制台提供了监控支持。使用这一特性,您可以对多台服务器收集统计数据和性能数据,并以图形化方式将它们显示给用户。
面向WebSphere Application Server家族的可移植性 – 您对WebSphere Application Server Community Edition的投资将随时间而增值,因为开源社区将日益成熟并不断创新。同样,WebSphere Application Server Community Edition使您能够访问完整的、可靠的WebSphere中间件产品组合。当您的需求随时间增加时,IBM可以通过WebSphere Application Server配置提供高级的功能,比如SOA。
免费产品许可-免费用于开发、测试和部署。
30天免费试用支持-Community Edition提供了30天免费试用支持,用户因此可以感受IBM支持的优势。
Eclipse插件,用于应用程序开发、测试和部署。
开放论坛,可以回答您的所有问题。您可以在IBM developerWorks论坛提出任何有关Community Edition的疑问。
架构异同
下面的小节展示Community Edition和JBoss Application Server的架构图。
图 1. Community Edition 的架构图
图 2. JBoss Application Server 的架构图
表 1 展示了 JBoss Application Server 和 Community Edition 在架构方面的异同:
表 1. JBoss 和 Community Edition 特性对比
本节介绍您可能会遇到的最常见迁移问题。
Java EE实现差异
在迁移过程中,我们会遇到由于供应商在解释Java EE规范方面的差异而引起的问题。比如,一些应用服务器在验证Java EE应用程序方面并没WebSphere产品家族那样严格,因此有时部署描述符就会无法通过验证。另一个例子就是在JSP中使用单引号和双引号在WebSphere产品家族编译期间会出错。
与类加载器相关的问题
Java类加载器负责定位和加载类。应用服务器类加载器非常复杂,因此跟踪和解决这些问题也变得十分困难。每个Java EE应用服务器都使用类加载器的定制实现,由于Java EE规范目前并未覆盖类加载器。例如,Community Edition具有一个父-子类加载器结构,而JBoss使用一种统一的类加载器方法。
共享库
这些库可以用于多个应用程序或整个服务器。共享库位于不同的位置,并且其配置也因服务器而异。例如,在Community Edition中,可以有几种方法来配置共享库:
在应用服务器目录中,向部署计划添加对共享库的依赖关系。
在应用服务器目录的外部,向部署计划添加GBean。
在JBoss中,在特定于JBoss的部署计划中为库目录添加一个条目。
绑定库
每个平台都捆绑了一组独特的框架和库,例如,Apache Xerces和Apache Xalan。这些库的版本和类加载器对于每个平台都是不同的。
部署描述符
Java EE规范并没有涵盖应用程序部署和配置的所有方面。这就是我们使用特定于供应商的部署描述符的原因。每个应用服务器使用一组不同的文件集合;这是因为它们以不同的方式实现并具有不同的特性集。如表 1 所述,JBoss使用的部署计划的名称与Community Edition使用的部署计划的名称不同。例如,JBoss将其Web应用程序部署描述符命名为jboss-web.xml,而Community Edition将其称为geronimo-web.xml。在用于验证每个部署计划的模式定义方面,可能还存在许多差异。
应用程序打包方式
打包方式对于移植和迁移十分重要。每个应用程序都使用不同的方式打包。这一点,再加上每个应用服务器中的不同类加载器实现,会为迁移带来潜在的问题。要避免这些问题,应当始终遵循Java EE规范,其中包含了有关应用程序打包方式的规范。应用程序通常被打包到一个EAR文件,它可能由以下模块组成:
EJB
包含EJB类文件和部署描述符。
WAR
包含部署描述符的Web应用程序模块。
JAR
一个JAR文件,包含其他模块和部署描述符用于Java EE应用程序客户机的常用类。
RAR
Resource Adapter归档是一个JAR文件,包含J2C架构的资源适配器。
使用本地代码
Java平台允许通过Java Native Interface使用本机代码,例如,使用C或C++编写的代码。使用本机代码会在迁移到不同操作系统时引发问题。例如,一个运行在Windows上的应用程序可能使用.DLL文件,而当您迁移到Linux平台时,同一个应用程序则会使用.SO文件。
JBoss Extensions
JBoss添加了一些特定于JBoss的服务器扩展,以增强某些应用程序特性。这些扩展需要被解析为它们的Java EE规范。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。