天天看点

【Websphere】6.1版本实战“坑”

大概是2012年到2014年期间,由于经常与某些企业打交道会用到IBM Websphere作为Web中间件,所以关于Websphere实战的坑多多少少能够与各位分享一下的。

本文将基于Websphere 6.1 版本进行叙述,这技术点老旧是没有办法了(毕竟有将近10年时间了),权当记录一下,也许会在不经意间帮助到别人。

  1. War包发布缺失问题

在Websphere下发布War包后Websphere管理界面会提示“因War包缺失而无法发布”的提示语,但是War包在本地部署的时候是能够正常启动的(当时使用了Eclipse绑定本地Websphere进行IDE部署,因此不会有War包缺失的提示语,究其原因就是Eclipse并不是打包成War来发布的,它会直接将文件拷贝到目标目录下)。

后来找了很久原因,最终发现是项目用Maven打包时没有将项目中“.#”开头的文件给剔除,这会导致Websphere在部署解压War包的时候因特殊字符原因而无法进行正常的解压动作(Websphere的War包解压并不是单单的解压,它在解压的过程中还需要对文件进行写入,当出现关键字或者敏感字符的时候就会导致进程无法完成,直到超时就报错提示)。

因此要解决这个问题就需要在Maven中将敏感文件排除掉就可以了。再不济写个shell脚本将War包中的特殊文件删除(为什么提出可以通过写shell来解决这个问题呢?是因为考虑到团队开发你改了Pom文件要团队所有人配合你去改。又或者这个事情要交由运维人员来处理,而你们的关系是组织级的关系,这种时候运维会希望在“增量”的情况下做处理。也就是原有可执行的内容不要动,做前置或者后置的处理即可,这是因为万一出现问题,下次要用回原来的部署方式时他能够根据“增量”的内容进行删除即可)。

  1. Websphere升级

原本使用的Websphere是6.0版本,但由于当时存在一个严重的缺陷基于安全考虑必须升级成6.1版本,于是就做了一次补丁升级。

  • 首先在官网中下载6.1版本补丁(由于链接已经失效所以就不再贴出来了),接着找到对应的安装平台(我这边是Windows平台);
  • 找到升级补丁分别是 6.1.0-WS-WAS-WinX32-FP0000045.pak 和 6.1.0-WS-WASSDK-WinX32-FP0000045.pak;
  • 补丁下载完成后将其拷贝到**${WEBSPHERE_HOME}\UpdateInstaller\maintenance**路径下;
  • 之后就能够通过GUI界面进行安装(安装过程按照提示执行即可,安装完成后需要进行重启);
  1. JSP调整为JDK1.5版本编译

Websphere 6.1版本中虽然JDK已经安装了1.5版本,但是默认情况下JSP还是以1.4规格进行编译这会导致页面编译出错,这个时候就需要对配置文件进行修改。

首先打开ibm-web-ext.xmi文件将jdkSourceLevel参数改为15,如下图所示:

由于配置文件中的编译级别发生变动,因此项目中的web.xml文件也需要修改,路径分别是:

# 部署目录(xxx为项目名称)
${WEBSPHERE_HOME}\...\config\cells\cndataco-177c16Cell01\applications\xxx_war.ear\deployments\xxx_war\xxx.war\WEB-INF

# 应用目录(xxx为项目名称)
${WEBSPHERE_HOME}\...\xxx\xxx_war.ear\xxx.war\WEB-INF
           
  1. 添加sapjoc3.dll动态链接库

因项目需要,Websphere环境需要调用SAP JOC资源。于是需要将sapjoc3.dll文件给安排上,其实也很简单只需要将dll文件拷贝到两个地方即可:

# 安装到环境变量
C:\WINDOWS\system32

# 安装到执行环境
${WEBSPHERE_HOME}\AppServer\java\bin
           

完成后记得重启Websphere服务,但启动的过程中或许会出现一个这样的报错:

java.lang.ExceptionInInitializerError: 
  Error getting the version of the native layer: java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\sapjco3.dll
           

这个报错只需要进行一下vc++的更新即可,我这边只需要将vc++更新到2005即可恢复正常。

  1. 单点登录(SSO)Session配置

由于项目使用Cookie来实现单点登录,因此SessionID将不能被覆盖,否则会获取不到来源会话信息。在Tomcat中大家都应该对这种配置比较熟悉,但是在Websphere中要怎么配置应该很少人了解过(毕竟通过Cookie来实现并不是最优解,更何况是使用Websphere呢…),下面将以based项目配置逐步讲解。

进入管理后台后依次进入“服务器 -> 应用程序服务器”就可以看到当前部署的应用,如下图:

【Websphere】6.1版本实战“坑”

点击需要设置的项目,接着点击“会话管理”链接,如下图:

【Websphere】6.1版本实战“坑”

在会话管理中记得要选择“启用cookie”,默认的情况下是不启用的。如下图:

【Websphere】6.1版本实战“坑”

点击“启用cookie”链接后进入cookie管理页面,在默认情况下Websphere默认cookie名字就是JSESSIONID,如下图:

【Websphere】6.1版本实战“坑”

为了避免因cookie名字被覆盖这里需要将cookie名稍微改一下,项目缩写叫based,那么就按照项目名来修改吧,如下图:

【Websphere】6.1版本实战“坑”

ok,修改完成后点击“应用”按钮即可。重新回到“应用程序服务器”页面按照“先关闭后启动”的方式进行重启即可应用新的cookie名。同理需要被单点登录的其他项目也按照这个方式进行配置即可。