ibm liberty_使用Liberty Technology Preview确定迁移的适用性
最近,Java EE 6规范引入了profile的概念。 根据该规范的定义,概要文件是针对特定开发人员社区和应用程序类型的Java EE技术和API的集合。 定义了以下配置文件:
IBM WebSphere Application Server中的现有服务器概要文件始终提供Java EE 6完整平台规范的实现,因此现在将其称为“ 完整”概要文件以将其与新的Liberty概要文件区分开。
Liberty概要文件使用与WebSphere Application Server Full概要文件相同的代码库中的组件。 它在不同的服务器进程中在新内核上运行这些组件。 还可以为它配备部署在其上的应用程序所需的那些功能。 这使用户不必将其应用程序部署到具有比其应用程序所需功能更多的功能的容器中。
Liberty配置文件已被认证为Java EE 6 Web Profile兼容服务器。 Liberty概要文件还支持某些Java EE技术,这些技术仅可从Java EE 6 Full Platform获得。 也就是说,Liberty概要文件使您能够构造自定义概要文件(Java技术和API的集合),该概要文件可以小于,等于或大于Java EE 6 Web概要文件。 因此,Liberty概要文件是Java EE 6 Web概要文件(加号)服务器。
过去,对于许多IT组织而言,在轻量级容器(例如Liberty概要文件)上开发应用程序并将其部署到Full Platform Java EE容器上一直是一种惯例。 当您将使用API子集开发的应用程序移入支持这些API的超集的容器时,此用例几乎没有移植问题。 关于此用例的文章很多(请参阅参考资料 )。
最近,IT行业中有一种趋势是用轻量级容器替换现有的Full Platform Java EE服务器。 为此,必须将使用Full Platform Java技术和API开发的应用程序移至轻量级容器中。 根据使用的API,移动它们可能非常简单或非常复杂-但可能难以确定使用的API,因为原始开发人员可能已经离开公司,并且代码库可能成千上万行码。 因此,在尝试用轻量级容器替换其Full Platform Java EE服务器之前,需要使用工具来帮助企业确定移动其应用程序的适合性。
本文重点介绍从第三方Java EE服务器到Liberty概要文件的应用程序迁移。 本文介绍了Liberty Java技术规则集 ,现在可以在Technology Preview中使用它。 Liberty Technology Rule Set标识了可能在Full Platform服务器中存在但在Liberty概要文件中当前不存在的Java技术和API的使用,并就如何更改您的应用程序(如果它使用了那些Full Platform API中的任何一个)向您提供建议)具有相同的功能。
背景和术语
IBM提供的WebSphere Application Server迁移工具包可帮助企业快速,经济高效地将其Java EE应用程序从第三方完整平台Java EE服务器迁移到WebSphere Application Server完整平台。
迁移工具包提供了许多现有的竞争性迁移规则集 (即规则集合)。 迁移工具包使用它们来扫描部署描述符(XML文件),JSP源文件和Java源文件中的不可移植代码。 它在基于Eclipse的IDE的“软件分析器”视图中报告迁移问题,并提供帮助您解决这些问题的帮助。 这些规则集支持从这些Java服务器到WebSphere Application Server V8.5.x Full平台的竞争性迁移。
- Apache Tomcat服务器(版本6.0和7.0)
- JBoss应用程序服务器(Java EE 5和更早版本)
- Oracle应用服务器(Java EE 5和更早版本)
- WebLogic Server(Java EE 5和更早版本)
现有的竞争性迁移规则集也适用于将应用程序迁移到Liberty概要文件时,但是缺少一些规则。 例如,现有的竞争性迁移规则集未考虑第三方Java EE服务器中可用的Java技术和API与Liberty概要文件中不可用的Java技术和API之间的差异。 为了填补这一空白,现在提供了一个新工具,即IBM WebSphere Application Server迁移工具包– Liberty Technology Preview 。
将现有的竞争性迁移规则集与Liberty Technology Preview(例如,JBoss Application Server规则集以及Liberty Technology Preview)相结合,使您能够识别与将现有Java EE应用程序从第三方Java EE服务器移至其他相关的大多数移植问题。自由资料。
WebSphere Application Server版本比较
WebSphere Application Server V8.5.x有许多不同版本。 这些版本按编程模型和它们包含的其他功能分组。 所有产品版本都包含Liberty功能,但是每个版本中可用的功能集有所不同(请参阅参考资料 ):
- WebSphere Application Server是与Java EE 6完整平台兼容的实现,有四个版本可用:
- WebSphere Application Server Express
- WebSphere Application Server基础
- WebSphere Application Server网络部署(ND)
- WebSphere Application Server for z /OS®
- WebSphere Application Server Liberty Core是进一步的版本,具有一组基本功能,这些功能提供与Java EE 6 Web Profile兼容的实现。 它不包含WebSphere Application Server完整概要文件
- Liberty概要文件作为WebSphere Application Server Express,Base,ND和z / OS版本的功能提供。 自由配置文件不是单独的产品。 它是一个运行时,其功能集随WebSphere Application Server版本的不同而不同。 WebSphere Application Server版本中的Liberty概要文件区分如下(图1):
- WebSphere Application Server Express和Base版本中的Liberty概要文件包含相同的功能集。 该功能集包括Liberty Core版本的功能以及:Web服务,JMS,MongoDB等。
- Network Deployment版本中的Liberty配置文件包括Express和Base产品随附的Liberty功能,以及对Liberty服务器进行集群的功能。
- z / OS版中的Liberty概要文件包括ND产品随附的Liberty功能以及z / OS特定功能。
图1.自由功能集
Java技术比较
如图1所示,Liberty功能集包括许多Java技术和API。 尽管Liberty V8.5.x功能集是Web Profile Java EE规范的超集,但它是Full Platform Java EE服务器中Java技术的子集。
表1比较了Liberty概要文件支持的Java技术和Full Platform Java EE应用程序服务器支持的Java技术。 如果您的应用程序使用此表中的Java技术,则它们很适合在Liberty概要文件上运行。
那些非常适合迁移的应用程序在使用这些Java技术时可能仍会存在一些移植问题。 如果是这样,则会在表中注明这些问题,然后您可以通过针对您的应用程序运行现有的竞争性迁移规则集(例如,JBoss Application Server规则集)之一来识别问题的类型及其解决方案,作为第二步。
请参考编程模型支持和Liberty在拥有相关主题的支持的API的完整列表。 表1列出了Liberty概要文件V8.5.x中可用的一些较流行的功能。 有关不支持的API和实现的列表,以及在您的应用程序碰巧使用它们时如何处理这些问题,请参见下文 。
表1. Java资源和Liberty概要文件
Java技术 | 自由简介 | Java EE应用程序服务器 | 笔记 |
---|---|---|---|
RESTful Web服务(JAX-RS)1.1的Java API | 是 | 是 | |
基于XML的Web服务(JAX-WS)2.2的Java API | 是 | 是 | |
XML绑定Java体系结构(JAXB)2.2 | 是 | 是 | |
Java Servlet 3.0 | 是 | 是 | |
JavaServer页面(JSP)2.2 | 是 | 是 | |
企业JavaBeans(EJB)3,1 Lite子集 | 是 | 是 | |
Java持久性API(JPA)2.0 | 是 | 是 | Liberty支持OpenJPA提供程序和备用JPA提供程序,例如Hibernate和TopLink。 要使用备用JPA提供程序,请在persistence.xml文件中声明提供程序类,并确保将JPA提供程序部署到Liberty服务器(JAR在类路径中可用)。 |
Java消息服务(JMS)1.1和消息驱动Bean(MDB)3.1 | 是 | 是 | JMS和MDB很少更改应用程序。 但是您将需要根据MDB容器的要求配置JMS资源。 |
Java Transaction API(JTA)1.1 | 是 | 是 | |
Java数据库连接(JDBC)4.0 | 是 | 是 | 很少对JDBC进行应用程序更改。 但是您将需要配置驱动程序,并在server.xml文件中指定驱动程序的JAR位置。 |
Java管理扩展(JMX)2.0 | 是 | 是 | 如果应用程序使用Java EE服务器特定的域来创建ObjectName,则将需要迁移它们。 这些ObjectName不能用于引用Liberty中的JMX MBean。 请参阅相关信息用于与自由的MBean工作。 |
Java命名和目录接口(JNDI) | 是 | 是 | 如果应用程序使用Java EE服务器特定的属性来创建InitialContext,则将需要迁移它们。 这些InitialContext不能用于Liberty中的JNDI查找。 |
该工具如何工作
自由技术规则集建立在迁移工具包上。 迁移工具包包含许多规则集,用于扫描Java EE应用程序以使用供应商特定的部署描述符,具有专有API的JSP文件以及具有专有API的Java代码(请参阅参考资料 ):
- JBoss到WebSphere Application Migration Tool
- 从Oracle AS到WebSphere应用程序迁移工具
- Tomcat到WebSphere应用程序迁移工具
- WebLogic到WebSphere应用程序迁移工具
与其他工具一样,Liberty Technology Preview打包为Eclipse插件,使您可以扫描和评估Java源代码和XML部署描述符。 规则会扫描应用程序,以使用Liberty概要文件不支持的Java技术和API。
Liberty技术规则集与其他Migration Toolkit规则集一起使用,已有效地找到了将Java EE应用程序移至Liberty概要文件的可移植性问题的主要根源。
表2列出了每个规则及其相应的帮助和迁移到Liberty概要文件V8.5.x的复杂性。 具有低复杂度的规则可以识别出一些问题,而无需更改应用程序代码即可解决。 这些应用程序非常适合在Liberty概要文件上运行。 具有高度复杂性的规则识别出的问题比端口需要更多的重写。 因此,您可能想要也可能不想花费时间和精力来重写它们以在Liberty概要文件上运行。
以下规则反映了Liberty概要文件V8.5.x中不可用的Java技术和API。 随着新的Java技术和API添加到Liberty概要文件中,其中一些规则可能会被删除。 这意味着不适合迁移到Liberty概要文件V8.5.x的应用程序可能适合迁移到更高版本的Liberty概要文件版本。
表2.规则因素
自由技术规则 | 相应的帮助 | 迁移复杂度 |
---|---|---|
无法使用Enterprise JavaBeans(EJB)的异步方法 | Liberty概要文件或Liberty Core不支持EJB异步方法。 如果您的应用程序使用EJB异步方法,则可以选择以下选项之一:
|
高 |
EJB的远程接口不可用 | Liberty概要文件或Liberty Core不支持远程EJB接口。 如果您的应用程序使用远程接口,则可以选择以下选项之一:
|
高 |
EJB 1.x / 2.x不可用 | Liberty概要文件或Liberty Core不支持Enterprise JavaBeans(EJB)1.x / 2.x。 如果您的应用程序使用EJB 1.x / 2.x模块,则可以选择以下选项之一:
会话Bean和消息驱动的Bean的升级很容易,但是客户端应用程序可能会由于EJB 1.x / 2.x和EJB 3之间的EJB客户端视图中的更改而中断。 实体bean的升级很困难,但是如果您的应用程序使用设计模式,则可以简化升级。 例如DTO,会话外观和DAO。 |
高 |
EJB的计时器服务不可用 | Liberty概要文件或Liberty Core不支持EJB计时器服务。 如果您的应用程序使用EJB计时器服务,则可以选择以下选项之一:
|
高 |
JavaMail不可用 | Liberty概要文件或Liberty Core不支持JavaMail API及其资源引用。 如果您的应用程序需要JavaMail,则可以在应用程序中以编程方式创建Mail Session,并将相应的JavaMail实现JAR文件放置在应用程序类加载器可见的位置,例如WEB-INF / lib目录中。 注意:如果您没有JavaMail库,则可以下载并使用JavaMail API Reference实现。 |
低 |
Java EE连接器体系结构(JCA)不可用 | Liberty概要文件或Liberty Core不支持JCA API,资源引用和资源适配器定义。 如果您的应用程序使用JCA,则可以将应用程序的这一部分部署到WebSphere Application Server完整概要文件。 |
高 |
Java EE应用程序部署API不可用 | Liberty概要文件或Liberty Core不支持Java EE应用程序部署API。 如果您的应用程序使用Java EE应用程序部署API,则可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
Java EE管理API不可用 | Liberty概要文件或Liberty Core不支持Java EE管理API。 如果您的应用程序使用Java EE管理API,则可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
Java容器的Java授权合同(JACC)API不可用 | Liberty概要文件或Liberty Core不支持JACC API。 如果您的应用程序使用JACC API,则可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
会话发起协议(SIP)不可用 | Liberty概要文件不支持会话发起协议(SIP)Servlet API及其部署描述符。 如果您的应用程序使用SIP API,则可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
Java Portlet不可用 | Liberty概要文件或Liberty Core不支持Java Portlet API及其部署描述符。 如果您的应用程序使用Java Porlet API,则可以选择以下选项之一:
|
高 |
基于XML的RPC的Java API(JAX-RPC)不可用 | Liberty概要文件或Liberty Core中不支持JAX-RPC。 如果您的应用程序使用JAX-RPC,则可以选择以下选项之一:
|
高 |
XML注册中心(JAXR)的Java API不可用 | Liberty概要文件或Liberty Core不支持JAXR。 如果您的应用程序使用JAXR,那么您可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
getRealPath()从未扩展的WAR返回null | 如果已经从Web存档(WAR)文件中部署了应用程序,则getRealPath()方法将返回空值。 为了规避Java EE规范的这种限制,您可以将应用程序部署为扩展的Web应用程序。 例如,通过将其解压缩到以WAR文件命名的目录中。 如果您的Web应用程序包含在企业归档(EAR)文件中,则需要同时扩展EAR文件和相应的WAR文件。 |
低 |
XML消息传递(JAXM)的Java API不可用 | Liberty概要文件或Liberty Core不支持JAXM API。 如果您的应用程序使用JAXM API,则可以在WebSphere Application Server完整概要文件中部署应用程序的这一部分。 |
高 |
可扩展样式表语言(XSLT)2.x不可用 | 所有WebSphere Application Server版本都支持XSTL 1.0。 如果您的应用程序需要XSLT 2.0引擎,则可以将相应的XSLT 2.0实现jar放在应用程序类加载器可见的位置,例如WEB-INF / lib目录。 确保XSLT引擎与.xsl或.xslt转换文件中的版本相对应。 例如, Saxon 9.5实现了XSLT 2.0规范。 |
低 |
JavaServer Faces(JSF)1.x不可用 | Liberty配置文件支持JavaServer Faces(JSF)2.0。 JSF 2.0向后兼容JSF 1.2和1.1。 但是,较早的JSF应用程序在Liberty概要文件上运行时仍可能会遇到兼容性问题。 如果您的Web应用程序遇到此类兼容性问题,则可以在应用程序中包含自己的JSF 1.1 / 1.2实现。 例如,通过将JSF实现JAR文件放在WEB-INF / lib目录中。 您还需要从服务器配置中删除jsf-2.0功能。 如果您没有JSF 1.1 / 1.2库,则可以下载与在faces-config.xml中指定的JSF版本相对应的JSF实现版本 。 |
低 |
Java EE应用程序客户端不可用 | Liberty概要文件或Liberty Core不支持Java EE Application Client模块。 如果您的应用程序使用Java EE应用程序客户端,则可以选择以下选项之一:
|
高 |
使用工具
本节向您展示如何开始使用Liberty技术规则集来确定从第三方Java EE服务器迁移应用程序并在Liberty概要文件上运行它们的适用性。
Liberty技术规则集要求已在Eclipse或IBM Rational Application Developer测试的平台上安装了Migration Toolkit,这些平台包括:
- Eclipse 3.6.2、3.7、4.2和4.3
- IBM Rational Application Developer 7.5至9.0版本
- IBM Rational Software Architect 7.5至8.5版本
要分析应用程序的迁移适合性,必须将该应用程序导入基于Eclipse的IDE中。 如果该应用程序还不在Eclipse中,则使用Eclipse导入功能,可以很容易地导入应用程序并将其组织为反映其结构为EAR,WAR和EJB文件的项目。
- 将选定的应用程序导入IDE。
- 选择文件>导入菜单选项。
- 如果选定的应用程序打包为EAR,请选择Java EE> EAR file 。 如果应用程序打包为WAR,则选择Web> WAR文件 。
- 为所有EJB模块和Web模块创建项目。
- 为包含您的代码的所有Java实用程序JAR创建项目。
- 不要为第三方库创建项目。
- 将源代码导入IDE。
- 创建项目后,您需要使用Java源代码填充工作区。 由ImportedClasses文件夹中的类指示要导入的Java文件的确切集合。
- 使用ProjectUtils工具将Java源代码导入项目中的正确位置。 通过指定Eclipse项目和源代码树的位置,可以从基于Eclipse的IDE中运行它。 ProjectUtils在源代码树中搜索项目的ImportedClasses文件夹中的类。 (请参阅相关主题 。)
获取工具
自由技术规则集可以免费下载。
要安装Liberty Technology Preview:
- 下载Liberty Technology Preview 。
- 启动基于Eclipse的IDE。
- 在Eclipse菜单栏中,选择帮助>安装新软件 。
- 在“可用软件”窗口中,单击添加 。
- 在“添加存储库”弹出窗口中,输入以下内容:
- 名称:输入工具的名称,例如
Liberty Technology Preview
。 - 位置:输入下载的zip文件的位置,例如
C:\LibertyMigrationTool\WebSphere_Migration_Toolkit_Liberty_v3.5.3.zip
。
- 名称:输入工具的名称,例如
- 在“可用软件”窗口中,选择Liberty Technology Preview ,然后单击下一步 。
- 单击完成以开始安装。
- 重新启动Eclipse。
要对应用程序运行“自由技术规则集”:
- 运行IDE中的Liberty Technology Rule Set进行分析。
- 选择运行>分析菜单选项。
- 创建一个新的软件分析器配置:
- 名称:输入配置名称:例如,
Liberty Technology Rules
。 - 在“ 作用域”选项卡上,选择“ 分析整个工作空间”以扫描工作空间中的所有项目,或者选择“分析选定的项目”以扫描工作空间中的选定项目 。
- 在“ 规则”选项卡上,使用“规则集”列表选择“ 其他Liberty版本的Java技术支持 ”,然后单击“ 设置”按钮。
- 名称:输入配置名称:例如,
- 单击分析按钮。 该工具将分析应用程序,并在“软件分析器结果”视图中生成问题列表和潜在问题。
- 在“软件分析器结果”视图中查看问题。 确保在XML File Review和Java Code Review选项卡中查看问题 。 每个问题将按照其复杂性进行分类:
- 双击问题结果以查看存在该问题的代码行。
- 从结果视图中选择F1以打开“ 帮助”选项卡。 打开帮助后,选择每个结果将显示特定于规则的帮助,以帮助解决该问题。
- 评估帮助和问题,以确定迁移适用性以及应用程序在Liberty概要文件上运行所需的修复程序。
图2.代码审查
如图2所示,根窗口具有以下窗格:
- 分析结果 ,通过软件分析仪显示的结果视图,包含所有规则的结果静态分析过程中发现的。
- 分析类型根据已分析的不同资源类型对分析审查进行分组。
- 帮助目录提供有关迁移问题的基本和详细帮助。
- 规则类别根据分析区域和复杂性组织规则。
- 规则对已识别的迁移问题进行分组 。
- 规则结果是在应用程序中发现的迁移问题的实例。
- 结果选项是“查看结果”选项,在编辑器视图上显示迁移问题。
结论
本文介绍了一个新工具,您可以使用该工具来确定应用程序是否适合在Liberty概要文件上运行。 该工具扫描您的Java EE应用程序,并在基于Eclipse的IDE的“软件分析器”视图中报告问题:
- 如果该工具未报告任何问题,则您的应用程序使用Liberty概要文件支持的Java技术和API。 这些应用程序非常适合迁移到Liberty。
- 如果该工具报告了较低的复杂性问题,则意味着您只需很少或根本不更改代码即可进行修复。 这些更改的示例是将替代JavaMail,JSF和XSTL实现添加到应用程序的类路径。
- 如果该工具报告了高度复杂性的问题,则表明该工作将更多是重写而不是端口。 但是,如果只出现了少数这类问题,或者包含了影响,那么这些应用程序也可能是在Liberty概要文件上运行的不错的选择。
本文还指出,迁移工具包中有许多现有的规则集。 您可以使用它们来识别部署描述符,Java代码和JSP中的问题。 在确定了适合在Liberty概要文件上运行的应用程序之后,您应该运行Migration Toolkit规则集以发现其余的移植问题。 除非您的应用程序使用许多专有的API或JMX MBean,否则它们仍然适合迁移到Liberty概要文件。
本系列的后续文章将向您展示如何迁移在Liberty概要文件上运行Java EE应用程序所需的所有资源,并向您提供有关将Java EE应用程序及其资源迁移到Liberty概要文件的说明。
致谢
作者感谢Jarek Gawol,Cindy High和Alex Mulholland的宝贵投入和帮助。
翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1404_vines1/1404_vines1.html