本期文章的目的是确定并解决将使用运行在JBoss V5.0.1.GA上的重量级EJB2.x bean的旧J2EE™1.4应用程序迁移到使用运行在IBM WebSphere上的EJB3的轻量级Java™EE 6应用程序的不兼容性。 Application Server V8.5.5 Liberty配置文件。
此示例概述了迁移这些Java技术和框架所涉及的步骤:
Java Servlet 2.4 JavaServer™页面(JSP)2.0 企业Java Bean(EJB)2.x Java数据库连接(JDBC)4.0 Java SE 6的Java身份验证和授权服务 经典冬眠。本文中使用的示例应用程序是本文从JBoss到Geronimo-Security Migration的文档管理器应用程序的修改版本。 该应用程序代表了现有的J2EE应用程序,这些应用程序运行在重量级容器(如JBoss)上,组织在转向轻量级Java EE容器(如Liberty概要文件)时可能遇到。
文档管理器应用程序支持几个用例,使用户可以查看和上传文档。 该应用程序还具有安全性约束。 它由三页组成(图1):
登录页面 文件页面 登录错误页面该应用程序从“登录”页面开始。 登录后,用户将被重定向到“文档”页面。 用户有两种类型: 查看者和编辑者 。 两种用户类型都可以查看文档,但是只有编辑者可以上载新文档。
如果用户具有编辑者角色,则上载表单将显示在文档列表下方。 当用户选择一个文档并按下Upload按钮时,通过执行Upload servlet调用DocumentManagerBean会话bean的上载方法。 如果未经授权的用户尝试调用Upload servlet,则Security应用程序将引发异常。
该应用程序具有两个预定义的用户ID:
密码为1的用户 编辑器,密码为2。本文随附的下载文件包含您需要遵循并执行以下步骤的Document Manager应用程序 。 该应用程序包含在OriginalDocumentManager.ear文件中,并且由以下组件组成:
DocumentManager.ear -EAR归档文件,它打包了DocumentManager应用程序的所有JAR和模块。 DocumentManagerWeb.war -Web归档文件,其中包含处理用户操作并显示用户文档的servlet和JSP页面。 DocumentManagerEJB.jar -EJB归档,其中包含无状态会话Bean和数据访问对象以从数据库检索用户文档。 DocumentManagerSAR.sar -JBoss专有服务归档文件,其中包含JBoss定制JAAS登录模块,该模块处理DocumentManager应用程序的身份验证和授权。 DocumentManagerHibernate.jar-包含Hibernate配置和类映射的实用程序JAR。该应用程序打包为企业应用程序归档文件(EAR),如图2所示。
本教程的其余部分向您展示如何:
设置并运行示例应用程序。 分析应用程序是否适合迁移到Liberty。 本节利用第1部分中描述的Liberty Tech Preview。 从JBoss迁移到Liberty。 本节解决了步骤2中的分析所确定的所有移植问题,并且还使用了WebSphere Configuration Migration Toolkit。本教程包含一个.zip格式的下载文件 ,其中包含几个示例组件,在本练习中将使用这些示例组件来说明将JBoss应用程序迁移到Liberty概要文件的步骤。 表1列出了此文件中包含的项目。
示例应用程序使用Derby数据库服务器来维护文档信息。 要运行文档管理器应用程序,您需要一个数据库来访问该应用程序显示的文档数据。 为简单起见,此数据库将使用Derby,这是一种非常轻巧且易于使用的数据库。
从Apache Derby发行页面下载db-derby-10.11.1.1-bin.zip 。 下载后,解压缩压缩的存档文件。 这将被称为<DERBY_HOME>文件夹。
从本文随附的下载资料中 ,解压缩DerbySampleDb.zip存档的内容。 本文中提取的内容的位置将称为<SAMPLE_DB> 。
要将数据库导入Derby:
将<SAMPLE_HOME>文件夹复制到<DERBY_HOME> / lib。 您将看到一个sampledb文件夹已被复制到<DERBY_HOME> / lib。 该文件夹是示例应用程序访问的Derby数据库文件所在的位置。 要运行Derby,请转到<DERBY_HOME> / lib目录,然后通过运行java -jar ./derbyrun.jar server start命令来启动Apache Derby网络服务器。以下文件(示例应用程序必需)已添加到dworks配置中:
deploy / Derby-ds.xml -JBoss中的Derby数据源配置。 deploy / DocumentManager.ear-部署到JBoss的应用程序EAR文件。 如果JBoss已经启动,它将自动部署并启动该应用程序; 否则,该应用程序将被部署并在下次启动时启动。 lib / derby.jar和lib / derbyclient.jar -Derby数据库Java驱动程序。 通过运行<JBOSS_HOME> \ bin目录中的run.sh –c dworks命令(在Windows上使用run.bat )来启动新服务器。 服务器启动后,通过打开Web浏览器并将其指向http:// localhost:8080来验证它是否正在运行。 您应该看到JBoss Welcome窗口,并且能够访问JBoss控制台。通过导航到<JBOSS_HOME> / bin并运行run.bat来启动JBoss服务器(如果尚未启动)。 打开Web浏览器并访问http:// localhost:8080 / document 。
使用用户名editor和密码2以编辑器身份登录。 具有有效编辑者凭据的用户将有权查看“编辑者XXX .doc”文档以及将文档上载到系统的选项(仅用于显示目的),如图3所示。
具有基本有效用户凭证的用户将只能查看User XXX .doc文档(图4)。
在本部分中,您将设置开发环境以用于迁移,执行迁移分析并确定将应用程序移至WebSphere Application Server Liberty概要文件所需的更改。
首先,您需要建立用于构建示例应用程序的原始开发环境。 在随后的部分中,将使用相同的IDE来分析应用程序的移植问题,并将该应用程序从JBoss迁移到Liberty。
下载并安装Eclipse Luna for Java EE Developers IDE。 如果尚未安装Oracle Java 6或7 SDK,请下载并安装适用于Linux或Windows的Oracle Java 6 JDK 。 设置JAVA_HOME和PATH环境变量。在Windows上(从命令提示符):
设置JAVA_HOME=< jdk6-install-dir > 汇出JAVA_HOME 设置PATH=%JAVA_HOME%\bin;%PATH% 导出PATH在Linux(从终端)上:
导出JAVA_HOME=< jdk6-install-dir > 导出PATH=$JAVA_HOME/bin:$PATH从本文随附的下载资料中 ,解压缩OriginalSampleApp.zip存档的内容。 提取的内容的位置将被称为<SAMPLE_APP> 。 要将应用程序导入到Eclipse:
启动Eclipse IDE。 从Eclipse菜单中,选择File> Import> General> Existing Projects into Workspace ,然后单击Next (图5)。本系列的第1部分介绍了Application Migration Toolkit和Liberty Tech Preview的概述。 Liberty Tech Preview运行在Migration Toolkit之上,使您能够从不同的应用程序服务器(包括JBoss,WebLogic Server,Oracle®Application Server和Apache Tomcat)转移到Liberty配置文件。 它还使您能够从旧的和最新的传统IBM WebSphere Application Server版本迁移到Liberty概要文件或云。
在此处获取有关如何安装WebSphere Application Migration Toolkit的指示信息 。
通过导航到“ 帮助”>“安装新软件” ,然后单击“ 添加”,下载并安装Eclipse中的WebSphere Application Migration Toolkit,添加此存储库位置URL:
https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/updates/wamt/MigrationToolkitCompetitive
Eclipse可能需要在安装过程中重新启动。 安装工具箱后,对工作空间运行Liberty Technology Rule Set:
从Eclipse菜单中,选择“ 运行”>“分析”选项。 创建一个新的软件分析器配置。 对于名称 ,输入配置的名称; 例如, Liberty Technology Rules 。 在“作用域”选项卡上,选择“ 分析整个工作空间”以扫描该工作空间中的所有项目,或者“ 分析选定的项目”以扫描该工作空间中的某些项目 (图7)。表2列出了分析仪检测到的结果。
接下来,您要迁移开发环境,应用程序源代码和部署描述符,JBoss应用程序服务器配置以及JBoss定制JAAS登录模块。 然后,您可以在Liberty服务器上运行该应用程序。
请注意,此应用程序是“就地”迁移的,这意味着迁移后的应用程序将继续使用现有的数据库服务器。 在本节的最后,显示了迁移的应用程序在轻量级的Liberty容器上运行。
对于此迁移,您需要安装WebSphere Developer Tools,以便可以将应用程序“热部署”到Liberty。 首先启动上一部分中导入的JBoss工作区。
下载WebSphere Developer Tools并安装到Eclipse中。 接下来, 下载Liberty运行时 。 单击下载按钮以获取IBM WebSphere Application Server V8.5.5.4 Liberty概要文件的安装JAR,然后运行命令java -jar wlp-runtime-8.5.5.5.jar创建一个名为wlp的文件夹。 从Eclipse创建一个新服务器。 在“服务器”视图中,右键单击新建>服务器> IBM> WebSphere Application Server Liberty概要文件 ,然后单击下一步 。 选择选择现有安装,然后浏览到刚刚创建的wlp文件夹。 单击下一步 。 保留默认设置,然后单击完成 。 这将创建一个名为defaultServer的Liberty服务器。升级应用程序中模块的规范级别。 您可以修改项目方面,以更改Eclipse项目的模块级别和Java版本。 这些更改将导致部署描述符的升级,并使您能够将项目与目标运行时关联。 指定目标运行时将支持的运行时Java EE库包含到项目的构建路径中。
要通过更改项目构面来升级EAR项目,请右键单击EAR项目并选择Document Manager> Properties> Project Facets (图10)。 将EAR版本设置为6.0 。 在Runtimes选项卡中,选择WebSphere Application Server Liberty Profile ,然后单击OK (图10)。将Java EE应用程序移植到Liberty概要文件时,EJB 1.x / 2.x和JAX-RPC代表了两个主要挑战。 这两项技术均已从Java EE规范中删除,但尚未在Liberty中实现。 因为我们看到使用EJB 1.x / 2.x的客户端比使用JAX-RPC的客户端多得多,所以我们将在此处显示EJB 1.x / 2.x的迁移。 (您可以阅读本文以了解有关将JAX-RPC Web服务迁移到JAX-WS的更多信息。)
让我们看一下将无状态会话Bean从EJB 2.1升级到EJB 3.1。 有很多方法可以将EJB从2.x升级到3.x。 下面的步骤说明了一种没有界面视图的方式:
实施会话Bean更改会话Bean类org.apache.geronimo.samples.document.ejb.DocumentManagerBean实现SessionBean接口。 会话bean类具有ejbCreate()方法,三个业务方法(upload(),getFilesByUserid(),addUserFile())和回调方法,如清单1所示。
EJB 3.1 bean类不实现javax.ejb.SessionBean。 因此,不需要实施生命周期方法。 使用注释@Stateless指定无状态会话Bean,并使用注释@Stateful指定有状态会话Bean。
清单2中显示了与EJB 2.1无状态会话Bean相对应的已迁移的EJB 3.1会话Bean(DocumentManagerBean.java)。请注意,由于将EJB2.x Bean转换为EJB3无接口视图,因此不需要继承EJB2.x远程接口或EJB2.x远程主接口,因此可以删除这些接口:
org.apache.geronimo.samples.document.ejb.DocumentManager org.apache.geronimo.samples.document.ejb.DocumentManagerHome此应用程序中有两个servlet:UploadServlet和RetrieveServlet。 对这些servlet的更改有两个方面:
首先,用@WebServlet注释对Servlet类进行注释,以指示是Servlet的类。 其次,您使用@EJB批注来注入EJB,而不是进行home接口的JDBC查找。 EJB3中不需要主页。另一个选择是使用@LocalHome批注对EJB3 bean进行批注,并继续在servlet中进行主页查找。 但是,Liberty Server当前不支持这些注释。 也许更高版本的Liberty将支持EJB2客户端视图,但是到目前为止,您已升级了servlet以使用@EJB批注而不是EJB2主页查找。 (请参阅相关主题更多EJB2.x到EJB3迁移选项。)
清单3展示了您对UploadServlet类所做的更改:首先,您在Servlet类上方添加了@WebServlet注释,添加了@EJB注释以将会话bean注入到Servlet中,并在init()中删除了JNDI主页查找。方法。 您还删除了对create()方法的调用以创建EJB bean实例。 对RetrieveServlet的更改是相似的,因此本文中未显示。 (您可以从MigratedSampleApp.zip文件下载迁移的工作空间,以查看这两个servlet。)
现在,应用程序编码更改已完成,您可以使用第2部分中的配置迁移工具包从JBoss配置中创建Liberty配置。 (如果尚未安装WebSphere Configuration Migration工具,则可以在此处获取它。)
从迁移工具菜单中,选择WebSphere Application Server迁移>配置迁移>用于JBoss的WebSphere配置迁移工具 (图13)。尽管配置迁移工具包为您提供了具有JBoss资源的server.xml文件,但是您仍然需要添加应用程序所需的一些功能。 作为轻量级容器,Liberty仅添加您的应用程序所需的那些功能。 配置迁移工具包无法确定您的应用程序使用的功能,因此您必须将它们添加到Liberty server.xml文件中,如清单5所示。将自动添加基于配置所需的功能,但会自动添加该功能。必须手动添加应用程序(以粗体显示 )。
JBoss服务档案库定义了用户和组,并将它们存储在几个文件中。 SAR是专有的JBoss归档文件,其中包含认证和授权配置(例如,用户,组等)。 在JBoss中,无法将web.xml文件中使用的角色映射到服务档案中定义的用户和组。 即,两者使用相同的名称。
在Liberty中将角色映射到用户和组是一个三步过程。 首先,在server.xml文件中定义用户和组(用户注册表),然后定义角色(在web.xml文件中定义)到ibm-application-bnd.xml中定义的组的映射。文件注册表,然后可以删除专有的JBoss SAR项目:
使用用户和编辑器条目配置基本用户注册表。 组和用户信息来自SAR项目中的j2g_groups.properties和j2g_users.properties文件(清单6)。最后一步是迁移Hibernate配置。 在此应用程序中,Hibernate配置与其他Hibernate映射文件一起保存在DocumentManagerHibernate / src文件夹中的hibernate.cfg.xml文件中。
您只需在配置中进行最少的更改即可将应用程序部署到Liberty概要文件:
在DocumentManagerHibernate / src中打开hibernate.cfg.xml并切换到Source视图。 将connection.datasource属性从java:jdbc / DerbyDS更改为jdbc / DerbyDS 。 更改transaction.manager_lookup_class属性以使用WebSphere查找类org.hibernate.transaction.WebSphereExtendedJTATransactionLookup 。本文包含有关将Spring和Hibernate与Liberty一起使用的更多详细信息。
本教程向您展示了如何获取编码为J2EE 1.4规范的旧版重量级JBoss应用程序,并在不涉及IBM WebSphere Application Server Liberty轻量级容器概要文件的情况下将其移动。 它还显示了如何使用Liberty Technology Preview识别任何移植问题,因此您可以非常快速地确定此应用程序是否适合Liberty轻量级容器。 最后,它向您展示了如何采用现有的JBoss服务器配置并将其移至Liberty。 这使您不仅可以非常快速地迁移应用程序代码,而且还可以迁移运行该应用程序所需的服务器配置。
您还遇到了一些可能遇到的挑战性问题,例如,迁移自定义JAAS登录模块或EJB2 Bean和客户端。 在大多数情况下,除了CMP bean之外,EJB2可以相当直接地迁移到EJB3。 此外,还提供了指向其他资源的链接,这些链接可能会帮助您进行到EJB3的迁移,从JAX-RPC到JAX-WS的迁移以及Spring和Hibernate应用程序的迁移。
遵循本系列文章中的指南,可以将应用程序从旧的重量级容器(如JBoss)移至现代的Liberty轻量级容器,从而帮助您使应用程序现代化。
翻译自: https://www.ibm.com/developerworks/websphere/techjournal/1506_vines/1506_vines-trs.html
相关资源:微信小程序源码-合集6.rar