应用服务器-Jboss To Websphere迁移(转载)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

***转载

***转载网址: http://www.chinaitpower.com/2006Aug/2006-09-19/215409.html

 

近日做了jboss服务器到websphere服务器的迁移工作,我们刚开始的时候估计太过乐观,认为都是j2ee架构上的应用服务器,应该在1~2天内能够完成这个工作,但实际上,最终我们用了将近2周的时间才完成此工作。迁移过程中遇到了很多典型的问题,所以觉得有必要总结一下:

 

环境:jboss-tomcat 3.2.6 ,数据库oracle9i ,工作流部分到ejb,struts+hibernate架构,表现层用到jstl ,

 

迁移环境:WSAD 5.1.2 、websphere 5.1(更新到5.1.0.4)

 

整个应用基本上是xxx.war(web应用)+yyy.jar(ejb模块)组成一个ear包

  • 1. oracle的LOB字段类型在websphere上的问题

我们EJB模块中有一个Entity Bean其中有一个字段使用了oracle 的long raw类型(long和row long数据类型在8i以后就不推荐使用了),此字段类型在websphere上不能很好的被支持(5.1以及最新的6.0版本上都存在这个问题),具体表现为:在读取此字段的时候会抛出PMGR6031E: SQLException when trying to get resultSet column x as a byte这样的异常。

 

解决办法是将数据库的long raw转换成blob的字段类型,并且将websphere5.1的版本更新到5.1.0.4(参考资料2)以上,最好不要更新到最新的5.1.1以上的版本,因为我们迁移的过程中发现我们将websphere更新到5.1.1.4的版本时存在一些奇怪的问题,例如中文乱码、数据库写入时报告插入的值长度过大的问题(这些问题在5.1.0.4和5.1.0.5上不存在)。

 

小技巧:在oralce上将long raw的数据类型转换成blob

 

1. 先将要转换的表备份,参照命令:exp用户名/密码@服务名 file=备份文件名 tables=表名

 

2. 将现有的表清空(delete from 表名)

 

3. 用alter将现有的表的long raw类型修改为blob (alter table 表名 modify(列名 blob) )

 

4. 导入数据库数据,在cmd下用imp命令导入先前备份的数据,加上ignore=y 的参数,忽略掉创建表的错误 ,参照命令:imp 用户名/密码@服务名 file=备份文件名 tables=表名 ignore=y

 

小结:在CMP中应该尽量避免使用LOB类型的字段。

 

 

 

  • 2. EJB中SessionBean调用EntityBean出现错误信息为WTRN0062E: 在全局事务中发生非法尝试使用多个仅有一阶段能力的资源 的异常。

解决办法(参考资料3):

 

1. 如果ejb模块中使用的是同一个数据源,那么将它们的jndi的引用用同一种方式,要不全部是直接的jndi引用,或者是java:comp/env/…的引用方式,在 部署描述编辑器中(ejb-jar.xml)- >概述- >WebSphere 绑定- >JNDI - CMP 连接工厂绑定 将容器授权类型换成Per_Connection_Factory。

 

2. 如果你的EJB模块中引用了不同的数据源,而且在某些方法中你许哟阿同时使用到这些不同的数据源的时候,那么上面的方法可能就不适合你了,应该要换成XA data source 的驱动方式。并且代码可能也要做相应的更改。请参考后面的参考资料

 

  • 3. web应用中 jsp 的page contentType的不能重复的问题

在tomcat中,如果a.jsp包含b.jsp,那么a.jsp和b.jsp两个文件上都要加上< %@ page contentType="text/html;charset=GBK" % >,否则jsp页面上会出现中文乱码,然而在websphere上,如果a.jsp和b.jsp上都存在< %@ page contentType="text/html;charset=GBK" % >的话,那么将抛出异常:不能出现多个 contentType', 出现这种情况,

 

解决方法为:将b.jsp中的< %@ page contentType="text/html;charset=GBK" % >去掉。

 

用以上的方法解决的话,会导致你的web应用程序代码在jboss和websphere不一致, 如果你想保持在jboss和websphere版本上的兼容的话,可以采用如下的方式。在servlet2.4的规范中,利用jsp-config 来制定pageEncoding为gbk(参考资料3),这样的话,在jsp页面中都不需要加上< %@ page contentType="text/html;charset=GBK" % >,在tomcat4.1以上的版本就已经支持servlet2.4了,但是在websphere5.1上只支持j2ee1.3,servlet支持到2.3,不支持2.4,最新的websphere 6支持j2ee1.4(servlet支持到2.4),如果你想在websphere5.1上保持应用程序和jboss上兼容的话,那么你可以在两个种版本中应用不同的web.xml,即在websphere5.1的版本上用servlet2.3的规范、jboss的tomcat中用servlet2.4的规范。

 

新的问题,如果只在websphere5.1上使用的话,a.jsp用静态方式包含b.jsp文件的话,由于只能在a.jsp上用< %@ page contentType="text/html;charset=GBK" % >,b.jsp上不能加上此行语句。如果b.jsp文件也需要单独进行访问的话,那么b.jsp文件将会出现乱码。

 

解决方法:由于b.jsp可以单独访问,所以b.jsp是可以独立a.jsp存在的,那么就不应该用静态包含(< %@include ...)应该将a.jsp换成动态包含b.jsp的方式(< jsp:include.../ >)

 

  • 4. 标签的问题

1.在webspehre5.1中,不允许在同一个页面中包含相同描述符的标签,比如a.jsp通过< %include..的方式包含了b.jsp文件,并且这两个文件都包含了相同的标签描述的话,例如都包含了< %@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" % >的话。那么websphere将会抛出 org.xml.sax.SAXParseException: 已经为元素“jsp:root”指定了属性“xmlns:c” 异常。

 

但在tomcat上,这种方式是可以的。

 

解决方法是去掉重复的的标签引用。

 

2.jboss的xml解析器与websphere的xml解析器不同,造成某些taglib使用上出错

 

例如:< c:when >

 

………

 

< /c:when >(有一个空格在其中)

 

这段代码在jboss上是正常的,但在websphere会出现异常,将< /c:when >中的空格去掉,异常排除

 

  • 5. servlet api实现不一致的问题

由于sun 公司只发布servlet的实现标准,具体的实现由应用服务器去完成,所以在不同应用服务器上的实现标准有所差异。

 

例如request.getRequestURL()方法

 

我们将test.action 通过配置文件映射到test.jsp文件上,test.jsp的内容为:

 

< % request.getRequestURL()% >

 

如果你在浏览器中输入地址http://localhost:8080/test.action,在jboss下返回的值是http://localhost:8080/test.action,而在websphere5.1上将返回的是解析过以后的真是的jsp地址:http://localhost:8080/test.jsp

 

查找servlet的api文档,上面也说得模棱两可,所以应用服务器厂商就按各自不同的理解去实现了。

 

象这种问题只能是更改程序,换其它的方式实现了。

 

  • 6. websphere 应选用良好EAR包结构

Websphere对类库的加载比较严格,在一个应用中最好不要包含不同版本的相同类库包,请检查WEB-INF/lib下的jar包。

 

在websphere上部署应用一定要采用ear的方式发布上去。所以如果在web应用上你的附件管理是用文件的方式来管理的话,那么在程序设计上应该考虑到附件保存地址的可配置性,最好不要放在web容器下面,否则在以后的维护升级上可能会照成一些麻烦,因为web要打包以后才能部署上去,所以你就需要获得客户那边最新的附件信息,然后打包再进行部署。

 

解决方法:

 

1.使用绝对地址(可配置),但这样做仿佛不够优美

 

2.用数据库来保存附件信息,这样改变了原有的程序设计,可能需要修改比较多的程序

 

3.(未测试过)用一个单独的war包来保存这些可变的应用程序数据,这样部署的时候不更新此war包就可以了

 

总结:

 

Websphere基本上是严格的遵守j2ee规范来做的,所以牺牲了部分兼容性,比如websphere的JDK你是不能重新指定的,只能用它自带的版本,并且不同版本的websphere都是基于j2ee版本上的,was5.1只支持到j2ee1.3,was6.0才支持j2ee1.4,如果你要用到j2ee1.4的特性就必须使用was6.0。在部署方面,websphere对程序具有一定的侵入性, wsad需要产生大量的部署代码,例如EJB方面会产生RMIC代码,这些代码是被安排到你程序包下面,我个人觉得。

 

部署期间如果遇到问题,请先到http://www-128.ibm.com/developerworks/cn 网站上查找,大部分问题在这上面都能找到。

 

参考资料:

 

1.将J2EE应用程序移植到WebSphere应用程序服务器

 

http://www.128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part1.html

 

http://www.128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part2.html

 

http://www.128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html

 

2. http://www.1.ibm.com/support/docview.wss?rs=180&uid=swg27004980

 

3. http://www.developer.ibm.com/isv/tech/faq/individual?oid=2:84043

 

4. tomcat include中文问题解决方法

 

http://www.matrix.org.cn/thread.shtml?forum_id=14&view_id=21142

 

5. 使用 WebSphere Studio 将 CMP 实体 Bean 字段映射到 CLOB 列

 

http://www.28.ibm.com/developerworks/cn/websphere/library/techarticles/0405_beaton/0405_beaton.html

MATLAB实现的两级OPF与电动车充电调度,用于配电网络.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

Delphi 13.2控件之WizFile.7z

Delphi 13.2控件之WizFile.7z

Web应用从WebsphereJBoss迁移注意事项

近期有一项目,需要从Websphere服务器迁移JBoss eap 5.0。经过多次反复,在测试机器上迁移成功,记录至此,以备后用。1. 在server/default/deploy路径下增加oracle-ds.xml文件,内容如下:jdbc/xxxfalsejdbc:oracle:thin:@ip:port:sidoracle.jdbc.driver.OracleDriverusername

mypop的专栏 1880

厦门侠客行 厦门旅游景点 KML矢量数据

本资源为厦门侠客行主题旅游地图KML矢量数据。标注了厦门市主要旅游景点、历史文化遗迹与城市地标位置,涵盖鼓浪屿、南普陀寺、厦门大学、曾厝垵、环岛路、胡里山炮台等厦门经典景点,以及环岛骑行路线、步行游览路径等旅行轨迹数据,可在Google Earth中沉浸式规划厦门旅游路线,适用于厦门旅游攻略制定、城市历史文化研究、自由行路线规划等场景。

WS-Security Interoperability Workarounds: WebSphere, JBoss, Axis and .Net

1. .Net client -> WebsphereWS ServiceRestrictions: WSE 3.0 will insert WS-Addressing elements in outgoing SOAP message by default. Unfortunately, its element will b

切尔斯基的工作 4617

WebSphere Application Server 常见问题及解答:迁移

1. 我是否可以将应用程序从 JBOSS 迁移WebSphere Application Server Community Edition? 答: 当然可以! JBoss Application Server 是一种兼容 J...

cuanfangxiang3803的博客 193

应用部署到JBOSS上遇到的问题

原来应用在WAS7.0下,移植到JBOSS eap5.1.2下后,遇到了一些问题,特此记录: 1、数据源配置 在was中,datasource中获取数据源名称时,直接写was中配置的数据源名称即可。而在jboss下,jndi的名称需要以java:+数据源名称开始。was下可以通过console去配置数据源,jboss中,将数据库驱动复制到%JBOSS_HOME%/server/def...

weixin_30297281的博客 123

WebSphere应用程序更新方式

在日常的使用中,一个javaee程序部署以后,以后续的使用中会有模块等的更新,但我经常见到有人直接更新服务器上的类包,文件等,(可能是tomcat,jboss这种热部署使用惯了)这样子的方式有几个问题。 问题: was一般在正式环境是多服务器集群,修改时需要每个服务器都做更新,容易出错。 修改后的文件因为不受was管理,在备份时仍然是旧的文件包,这样子在做服务器迁移时应用时出现许多意想不...

weixin_30258027的博客 838

WebSphere应用程序更新几种方式

  在日常的使用中,一个javaee程序部署以后,以后续的使用中会有模块等的更新,但我经常见到有人直接更新服务器上的类包,文件等,(可能是tomcat,jboss这种热部署使用惯了)这样子的方式有几个问题。 问题: was一般在正式环境是多服务器集群,修改时需要每个服务器都做更新,容易出错。 修改后的文件因为不受was管理,在备份时仍然是旧的文件包,这样子在做服务器迁移时应用时出现许多...

weixin_30703911的博客 662

迁移你的单体系统:最佳实践和关注领域

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378922的博客 72

别吵了,.NET和JAVA两大帮派合并了!

喜讯! 经过100多个人月和12000000多$的投资进行地研究和开发,并且经过4700000多行的.NET到Java交叉编译的测试,Mainsoft for Java EE (以前叫做Visual MainWin for J2EE)终于发布了Release2.0版本。这是一个可以免费下载的Visual Studio 2005插件。利用这个插件,无需重写你的C#或者V...

weixin_34126557的博客 154

Python 寄存器位域解析与 JSON 配置工具(芯片开发+寄存器/位域+解析源码+寄存器转储分析)

根据 JSON 指定位宽和字段起止位,解析寄存器数值并显示枚举含义。包含重叠字段、重复名称、位范围和输入数值检查。 适用于嵌入式软件开发人员、驱动开发入门者及相关技术学习者。资源包含源码或模板、使用说明及验证范围说明。Python 3.10+,仅使用标准库;寄存器宽度 1 至 64 位。 功能边界见 README.md,实际验证情况见 TESTING.md。

UAC白名单设置-软件使用

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

DELL服务器操作系统安装

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL服务器的操作系统部署流程包含一系列细致的环节,其适用范围涵盖多种操作系统类型,例如Windows Server与Red Hat Linux等。在启动部署之前,必须确认服务器的光驱设备为DVD驱动器,并且需准备对应的系统安装媒介。下面将详细列出完整的部署步骤: 1. **启动准备**:将随服务器提供的Systems Management Tools and Documentation version 6.0光盘置入服务器光驱,随后设定服务器以光驱作为启动设备。此环节旨在确保服务器在启动阶段能够读取安装光盘内容。 2. **语言设定**:服务器启动后,选定简体中文作为部署语言,并确认接受许可协议条款。 3. **时区选择**:在部署期间,需设定时区为北京、香港、重庆或乌鲁木齐,依据实际地理位置进行适配选择。 4. **系统类型选择**:随后,需选定计划部署的操作系统,支持的版本包括Server 2003 SP2、Server 2003 SP2 64位版本、Windows 2003 SBS SP2、Server 2008、Windows 2008 SBS/EBS x64版本等,以及多种Red Hat和SUSE Linux版本。 5. **RAID设定**:若服务器出厂时已预设RAID配置,则可选择跳过此步骤。若需重新设定RAID,操作时需格外小心,因为这一过程可能引发硬盘数据遗失。 6. **引导分区规划**:设定引导分区的大小,通常C盘建议预留至少20GB的空间,具体容量需根据系统需求进行调整。 7. **网络设定**:网络设定可在系统部署完成后执行,部署期间建议暂时拔除...

老人自动接视频appp

老人自动接视频app的

HTML5 audio player

代码下载地址: https://pan.quark.cn/s/a4b39357ea24 这是一款模仿酷狗的基于HTML5技术的网络音乐播放器,能够兼容全部mp3格式的音乐文件,用户既可以在联网状态下,也能够在无网络环境下欣赏自己偏爱的歌手作品。对于具备开发兴趣的人员,可以获取其源代码,将其解压并载入MM开发平台实施调整与改进,支持制作成apk(适用于Android系统)和ipa(适用于iOS系统)的应用程序包,随后安装至移动设备使用;或者将该应用项目文件配置到MM应用引擎中,通过网页浏览器来预览实际运行状况。MM应用引擎的展示页面:http://html5player.mmapp.cn/client/www/app.html 有关更多应用范例的代码资料,可以访问MM开发环境官方网站进行获取:http://dev.10086.cn/ude/index.do

如何高效推动高校科技成果转化落地,解决产学研对接难的问题?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: 关于 hot code replace fail 问题
下一篇: 项目开发经验----如何同时应对多个项目 & embedded tomcat 使用
yellowshine
博客等级 码龄19年 10粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值