Websphere通用部署步骤及问题处理详细版

websphere上部署基于cxf框架的webservice项目报错问题的解决方案 注:这篇文章来自公司内部wiki,之前在碰到这种问题的时候,首先也是去网上搜资料,但发现没有完整可行的解决方案。这篇文章上列出的解决方案,目前仍在完善中,但已经解决了几个项目的上线问题,因此将这篇文章分享出来,希望对被同样问题所困扰的项目组能够有所帮助。 问题简介 在日常的开发过程中,我们会经常使用到一些第三方(当然这里所指的第三方是指非产品或者产品附属组件,如cxf、Axis2等)的webs 阅读详情
AI摘要

本文详细介绍了Websphere应用服务器的部署步骤,包括SSL配置、应用部署、参数优化、session管理等内容,并提供了session冲突解决方案和应用开发注意事项。

以下对Websphere部署步骤及问题处理进行了详细说明,包括SSL密钥库生成、HTTPS配置、解决同一个was服务中部署多个应用时session冲突问题、Websphere参数优化、session持久化、web.xml更新问题、在Websphere控制台中查看运行状态等。

1.  名词说明

was:WebSphere Application Server

ihs:IBM HTTP Server

服务:was中的Server

应用:was服务中部署的应用

单元:was中的Cell

节点:was中的Node

服务端口:was的server监听的端口

虚拟主机:was的应用可访问的端口,必须存在相同端口号的服务端口才能访问

上下文根:was的应用访问URL的最后一部分(不包含参数),如http://ip:port/context?arg中的/context

nd版was:Network Deploy,可使用was的软集群,不同服务器之间可实现会话复制。was控制台的进程与was Server的进程独立。一个Node可以安装多个Server。除了was Server的进程外,还包括node与dmgr的进程。

base版was:不可使用was的软集群,不同服务器之间不可实现会话复制。was控制台的进程与was Server的进程为同一个进程。一个Node只能安装一个Server。除了was Server的进程外,不包括node与dmgr的进程。

2.  was通用部署步骤

以下步骤在was base版本8.5测试,不同版本的was可能存在差异。修改了was的配置后,通常需要重启was Server才能生效。

2.1     说明

以下步骤中各项配置的值仅起说明使用,请以实际需要的值为准。

2.2     SSL密钥库生成

若应用使用HTTPS访问,需要先生成SSL密钥库,在应用所在的每台服务器执行以下操作(不同服务器使用相同命令生成的密钥库文件与密钥请求文件均不相同,因此需要在每台服务器均执行):

a.   使用was用户,进入was的java/bin目录,/was/IBM/WebSphere/AppServer/java/bin

b.   执行以下命令,在当前目录生成密钥库文件

参数

说明

-keystore

指定生成的keystore文件

-alias

密钥别名,固定为server(下同)

-storepass与-keypass

密码,需修改

-dname,CN=

使用HTTPS访问的域名(若使用IP访问则应为IP)

-validity

有效天数,7300约20年

命令如下:

keystore=keystore.jks

alias=server

pwd=xxxxxx

url=cscsr.szrcb.net

validity=7300

 

./keytool -genkey -alias $alias -keyalg RSA -keysize 2048 -keystore $keystore -storetype jks -storepass $pwd -keypass $pwd -dname "CN=$url, OU=srcb, O=srcb, L=sz, ST=gd, C=CN" -validity $validity

若执行成功,无提示;若提示“keytool 错误:java.lang.Exception: 未生成密钥对,别名 <server> 已经存在”,说明别名为server的密钥库文件已存在,需删除。

c.   执行以下命令,在当前目录生成证书请求文件certreq-xx.pem,xx为当前服务器的IP尾号,用于区分不同服务器生成的密钥请求文件

pem=certreq-xx.pem

alias=server

pwd=xxxxxx

 

./keytool -certreq -alias $alias -sigalg MD5withRSA -file $pem -keystore keystore.jks -keypass $pwd -storepass $pwd

若执行成功,无提示

d.   将生成的certreq-xx.pem发送给CA,生成每台服务器的证书,需要告知CA生成keystore文件时使用的域名

e.   将CA提供的每台服务器的证书文件xx.cer分别上传至对应服务器的/was/IBM/WebSphere/AppServer/java/bin目录,将CA的根证书也上传至该目录

f.   执行以下命令,将CA根证书root.cer导入密钥库,会提示“信任此证书吗?[no]:”,输入“y”并回车

keystore=keystore.jks

rootcer=root.cer

pwd=xxxxxx

 

./keytool -import -alias intermediate -keystore $keystore -trustcacerts -storepass $pwd -file $rootcer

若执行成功,提示“证书已添加到密钥库中”

g.   执行以下命令,将CA生成的服务器证书xx.cer导入密钥钥库,

keystore=keystore.jks

alias=server

pwd=xxxxxx

cert=xx.cer

 

./keytool -import -alias $alias -keystore $keystore -trustcacerts -storepass $pwd -file $cert

若执行成功,提示“证书应答已安装在密钥库中”

提示“keytool 错误:java.lang.Exception: 应答中的公用密钥与密钥库中的公用密钥不匹配”,说明CA提供的证书有问题

h.   将keystore.jks复制到保存密钥的目录,如/was/key

i.   执行以下命令,导出服务器证书(导出的证书与CA提供的相同,可不执行)

keystore=keystore.jks

alias=server

pwd=xxxxxx

exportcert=xx.cer

 

./keytool -export -alias $alias -keystore $keystore -file $exportcert -storepass $pwd

若导出成功,提示“证书存储在文件 <export-xx.cer> 中”

2.3     was通用部署步骤

2.3.1  上传数据库驱动程序至服务器

该步骤仅需在每台服务器执行一次。

将ojdbc6.jar上传至${WAS_INSTALL_ROOT}/lib目录下。

WAS_LIBS_DIR与WAS_INSTALL_ROOT定义在“环境->WebSphere 变量”中。

WAS_INSTALL_ROOT在Linux下一般为/was/IBM/WebSphere/AppServer,Windows下一般为D:\IBM\WebSphere\AppServer。

说明:

oracle 11g,JDK 1.6,需要使用驱动ojdbc6.jar,驱动程序与oracle及JDK版本的对应关系可在oracle官网查看。ojdbc6.jar可从测试环境oracle服务器获取,所在目录如“/soft/product/11.2.0.3/dbh/jdbc/lib”。

2.3.2  创建JDBC提供程序

该步骤仅需在每个Node执行一次。

a.   新建JDBC提供程序,作用域选择单元

b.   设置JDBC提供程序基本信息

c.   设置JDBC驱动程序文件的类路径,“类路径”此时不需修改,将“另存为WebSphere变量xxx的目录位置”修改为“${WAS_INSTALL_ROOT}/lib”。

d.   完成

e.   保存

f.   点击刚生成好的JDBC提供程序“Oracle JDBC Driver”

g.   修改类路径为“${WAS_INSTALL_ROOT}/lib/ojdbc6.jar”,保存。ojdbc6.jar驱动可用于10g与11g的oracle数据库。

2.3.3  创建J2C认证数据(存储数据库用户密码)

该步骤仅需为每个数据库执行一次。

a.   打开“J2C认证数据”

b.   新建

c.   设置“别名”等信息,“用户标识”为数据库用户名,密码为数据库密码,保存

建议填写描述,否则启动时日志会提示“找不到 ConnectionFactory 或 DataSource [数据源名字] 的 mappingConfigAlias。”。

2.3.4  创建数据源

a.   新建数据源,作用域选择单元

b.   设置数据源信息

c.   选择之前创建的JDBC提供程序

d.   设置数据源URL(域名需要在hosts文件中设置)

e.   选择对应的J2C认证信息,完成,保存

2.3.5  创建虚拟主机

a.   新建虚拟主机

b.   设置虚拟主机名字,保存

c.   点击刚创建的虚拟主机

d.   点击“主机别名”,新建

e.   设置需要的端口

2.3.6  服务端口设置

a.   选择需要设置的服务

b.   点击“端口”,新建

c.   设置端口属性。“指定端口名”为当前新建的端口名字,“主机”为*,不能使用localhost,否则无法访问。“端口”应与对应虚拟主机设置的端口相同。确定,保存。新增或修改端口后,需要重启was的server才能生效。

2.3.7  服务Web容器传输链设置(HTTP)

a.   选择需要设置的服务

b.   点击“Web容器传输链”,新建

c.   输入传输链名称,传输链模板选择“WebContainer”(HTTP)

d.   选择刚创建的端口,完成,保存

 

2.3.8  SSL配置

a.   将“SSL密钥库生成”步骤生成的keystore.jks文件从/was/IBM/WebSphere/AppServer/java/bin移动到/was/key目录中

b.   进入SSL的密钥库和证书配置界面

c.   选择“SSL密钥库”,新建

d.   输入密钥库的名称,“路径”填入jks文件的路径,输入jks文件密码,类型选择“JKS”

e.   进入SSL配置界面

f.   新建SSL配置

g.   输入SSL配置名称,“信任库名称”与“密钥库名称”选择上一步骤新建的密钥库,点击“获取证书别名”,“缺省服务器证书别名”与“缺省客户机证书别名”全自动变成密钥库的别名(即创建密钥库时-alias的参数值)

h.   更新证书文件后,若未修改密码,重启was服务即可生效,不需重新进行配置

2.3.9  服务Web容器传输链设置(HTTPS)

与配置HTTP的传输链相比,有以下区别:

a.   输入传输链名称,传输链模板选择“WebContainer-Secure”(HTTPS)

b.   保存之后,点击刚配置了传输链,点击“SSL入站通道(SSL_X)”

c.   “特定于此端点”选择上一步骤新建的SSL配置。

完成以上配置后,需在客户端安装SSL根证书,重启was服务,可使用HTTPS链接登录。

2.3.10     生成war包

cd 到需要打包的目录,即“WEB-INF”目录所在的目录,执行以下命令打包

jar -vcf xxx.war *

2.3.11     上传war包至服务器

将生成的war包上传到服务器指定目录,如/was/publish

2.3.12     部署应用

a.   安装应用

b.   选择需要部署的war包

c.   选择“快速路径”

d.   设置“安装应用程序的目录”

e.   将模块映射至服务器

f.   选择需要的JNDI名称

g.   选择需要的虚拟主机

h.   设置上下文根,完成,保存

2.3.13     更新应用

使用“更新”功能即可使用新的war包部署应用,不需要先卸载再重新安装

2.4     解决同一个was服务中部署多个应用时session冲突问题

若同一个was服务中若部署了多个应用,由于应用的默认session名字均为JSESSIONID,当使用浏览器登录同一was服务(使用相同的IP或域名)的不同应用时,可能产生session冲突的问题,导致服务器无法正确判断浏览器的登录状态。可通过网络层面与应用层面解决。

2.4.1  网络层面解决

为同一个was服务的不同应用申请不同的域名,每个应用使用不同的域名访问,session不会出现冲突,可解决上述问题。

新呼叫中心采用该方法解决上述问题。

2.4.2  应用层面解决

为同一个was服务的不同应用设置不同的session名字,可解决上述问题,步骤如下:

a.   打开“WebSphere企业应用程序”,打开需要设置的应用

b.   打开“会话管理”

c.   钩选“覆盖会话管理”,打开“启用cookie”

d.   修改“cookie名”,如使用应用简称作为前缀或后缀,使其不与同一个was服务中的其他应用的冲突。完成以上修改后,不需重启was服务即可生效。

2.5     修改或移除访问was时返回的HTTP头中的Server字段

默认配置下,访问was控制台或was部署的应用时,返回的HTTP头中会包含Server字段,内容为“WebSphere Application Server/[was版本号]”,如“Server: WebSphere Application Server/8.0”。

若需要修改或移除上述Server字段,需要在was应用所使用的Web容器传输链的HTTP入站通道新增定制属性,如下图所示(假设was应用所使用的Web容器传输链名称为“csr_chain”)。

当需要移除上述Server字段时,需要添加的属性名称为“RemoveServerHeader”,值为“true”。

当需要修改上述Server字段时,需要添加的属性名称为“ServerHeaderValue”,值为所需返回的HTTP头中的Server字段值。如将值设为“xxx”,返回的Server字段内容为“Server: xxx”。

修改访问was时返回的HTTP头中的Server字段,可判断浏览器当前访问的服务器,便于定位会话丢失与会话保持问题。

2.6     was参数优化

2.6.1  JAVA虚拟机堆大小设置

a.   选择需要设置的服务

b.   打开“Java和进程管理”“进程定义”

c.   打开“其他属性”“Java虚拟机”

d.   设置“初始堆大小”与“最大堆大小”,点击“确定”“保存”

2.6.2  Web容器线程池设置

a.   选择需要设置的服务

b.   打开“其他属性”“线程池”

c.   打开“WebContainer”

d.   设置最小与最大线程数,点击“确定”“保存”

2.6.3  数据源连接池设置

a.   打开“资源”“JDBC”“数据源”

b.   打开需要修改的数据源

c.   打开“其他属性”“连接池属性”

d.   修改最大与最小连接数,点击“确定”“保存”

2.6.4  日志参数设置

a.   进入服务的日志设置界面

b.   打开“JVM日志”界面

c.   System.out与System.err均设为最大大小:20MB,历史日志文件最大数:10

2.7     session持久化

2.7.1  was配置

a.   打开需要配置session持久化的应用的会话管理界面

b.   钩选“覆盖会话管理”以及“启用cookie”并保存,否则会使用对应的Server的会话管理设置,session持久化设置不会生效。再点击“分布式环境设置”。

c.   点击“数据库”;

d.   在“数据源JNDI名称”处写入was应用所使用的数据源JNDI名称,在“用户标识”处写入对应数据库用户名,在“密码”处写入对应数据库用户的密码,“DB2行大小”选择“ROW_SIZE_4KB”,“表空间名”处写入用于保存 session的数据库表对应的表空间,“使用多行模式”需钩选,使session信息在数据库中按多行保存。

e.   打开对应的was Server配置;

f.   点击“Web容器设置”,“Web容器”;

g.   点击“定制属性”;

h.   点击“新建”,创建名称为“UseOracleBLOB”,值为“true”的属性。

若不设置UseOracleBLOB属性,当session中有值超过2000字节时(保存session的表中的SMALL字段长度为2000),System.out日志中会出现以下报错

[15-5-3 14:43:16:792 CST] 0000006f WASSession    E DatabaseHashMapMR handlePropertyHits SESN0057E: 将应用程序数据更改存储到数据库时出错。

[15-5-3 14:43:16:793 CST] 0000006f WASSessionCor E DatabaseHashMapMR handlePropertyHits 异常为:

                                 java.sql.SQLException: ORA-01460: 转换请求无法实施或不合理

 

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)

    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)

    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)

    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1119)

    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2191)

    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2064)

    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2989)

    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658)

    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1185)

    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:802)

    at com.ibm.ws.session.store.db.DatabaseHashMapMR.handlePropertyHits(DatabaseHashMapMR.java:262)

    at com.ibm.ws.session.store.db.DatabaseHashMap.persistSession(DatabaseHashMap.java:2123)

    at com.ibm.ws.session.store.common.BackedHashMap.updateSession(BackedHashMap.java:469)

    at com.ibm.ws.session.store.common.BackedHashMap.put(BackedHashMap.java:543)

    at com.ibm.ws.session.store.common.BackedSession.flush(BackedSession.java:240)

    at com.ibm.ws.session.store.common.BackedSession.flush(BackedSession.java:225)

    at com.ibm.ws.session.store.common.BackedHashMap.doTimeBasedWrites(BackedHashMap.java:992)

    at com.ibm.ws.session.store.common.BackedStore.runTimeBasedWrites(BackedStore.java:125)

    at com.ibm.ws.session.WsTBWSessionStorer.alarm(WsTBWSessionStorer.java:118)

    at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:133)

    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)

2.7.2  数据库配置

IBM提供的数据库脚本如下:

CREATE TABLE SESSIONS  (

  ID               VARCHAR(128) NOT NULL ,

  PROPID           VARCHAR(128) NOT NULL ,

  APPNAME          VARCHAR(128) NOT NULL,

  LISTENERCNT      SMALLINT ,

  LASTACCESS       INTEGER,

  CREATIONTIME     INTEGER,

  MAXINACTIVETIME  INTEGER ,

  USERNAME         VARCHAR(256) ,

  SMALL            RAW(2000),

  MEDIUM           BLOB,

  LARGE            RAW(1)

  )

was会自己执行添加索引的语句,将表空间修改为实际表空间后(以cc_session为例),实际建表语句如下:

DROP TABLE sessions CASCADE CONSTRAINTS;

 

CREATE TABLE sessions

(

  ID               VARCHAR2(128 CHAR)           NOT NULL,

  propid           VARCHAR2(128 CHAR)           NOT NULL,

  appname          VARCHAR2(128 CHAR)           NOT NULL,

  listenercnt      INTEGER,

  lastaccess       INTEGER,

  creationtime     INTEGER,

  maxinactivetime  INTEGER,

  username         VARCHAR2(256 CHAR),

  small            RAW(2000),

  medium           BLOB,

  LARGE            RAW(1)

)

TABLESPACE cc_session

PCTUSED    0

PCTFREE    10

INITRANS   1

MAXTRANS   255

STORAGE    (

            INITIAL          64 k

            NEXT             1 m

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

           )

LOGGING

NOCOMPRESS

LOB (medium) STORE AS

      ( TABLESPACE  cc_session

        ENABLE      STORAGE IN ROW

        CHUNK       8192

        PCTVERSION  0

        NOCACHE

        STORAGE    (

                    INITIAL          64 k

                    NEXT             1 m

                    MINEXTENTS       1

                    MAXEXTENTS       UNLIMITED

                    PCTINCREASE      0

                    BUFFER_POOL      DEFAULT

                   )

      )

NOCACHE

NOPARALLEL

MONITORING;

 

 

CREATE UNIQUE INDEX sess_index ON sessions

(ID, propid, appname)

LOGGING

TABLESPACE cc_session

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

            INITIAL          64 k

            NEXT             1 m

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

           )

NOPARALLEL;

3.  was重要目录与文件

下文中的AppSrv01应为对应服务的实际名称。

3.1     was日志目录

应用中通过System.out,System.err输入的日志以及was服务启停日志的存储目录:

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1

3.2     jsp缓存目录

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/[was的节点名字]/[was的服务名字]/[应用名字]/[应用war包名字]

3.3     应用的WEB-INF目录被拷贝的目录

was应用部署时,WEB-INF目录会被拷贝生成一个目录。更新应用的WEB-INF目录下的文件时,需将以下目录中的文件同时修改,因此应尽量将WEB-INF目录的文件移动到WEB-INF的子目录中去,方便后期维护。拷贝生成的目录路径如下:

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/[was单元名字]/applications/[应用ear名字]/deployments/[应用war包名字]/[应用名字]/WEB-INF/

当使用增量更新方式更新web.xml文件时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件都需要替换。

3.4  web.xml文件说明

3.4.1  应用读取的web.xml

当应用读取web.xml时,从应用的WEB-INF被拷贝的目录(见上文)中读取web.xml,而不是从应用部署目录的WEB-INF目录中读取web.xml。

3.4.2  web.xml的web-app节点的version值的影响

a.   web.xml的web-app节点的version值为2.4(或2.3)时

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

当web.xml的web-app节点的version值为2.4时,即文件头如上文所示时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中会出现ibm-datasource-ext.xml、ibm-web-bnd.xmi、ibm-web-ext.xmi、web.xml。

若在web.xml文件中使用<resource-ref>字段定义了数据源引用,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的<resource-ref>字段可能被was修改为类似“<resource-ref id="ResourceRef_xxx">”的形式。若通过替换web.xml文件进行更新,会导致web.xml文件中的数据源对应关系丢失,因此不能通过替换web.xml进行更新。

在was控制台查看应用的部署描述符,如下图所示:

b.   web.xml的web-app节点的version值为2.5时

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

当web.xml的web-app节点的version值为2.5时,即文件头如上文所示时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中会出现ibm-datasource-ext.xml、ibm-metadata.xml、ibm-web-bnd.xml、ibm-web-ext.xml、web.xml、web_merged.xml。

web.xml与web_merged.xml内容类似,经验证,应用会读取web.xml而不是web_merged.xml。

若在web.xml文件中使用<resource-ref>字段定义了数据源引用,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的<resource-ref>字段不会被修改,因此可以通过替换web.xml文件进行更新。

无论web.xml的web-app节点的version值为2.3、2.4或2.5,应用安装后,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的web-app节点均会被修改为“web-app id="WebApp_xxx"”的形式。若通过替换web.xml文件进行更新时,将“web-app id="WebApp_xxx"”的形式中的 id="WebApp_xxx"删除,不影响应用运行。

在was控制台查看应用的部署描述符,如下图所示:

c.   结论

web.xml的web-app节点的version值应设置为2.5,而不是2.3或2.4,否则使用增量更新方式时,更新了web.xml会导致数据源对应关系丢失。

3.4.3  web.xml与web_merged.xml

应用读取web.xml时,若存在web_merged.xml,会从应用的WEB-INF被拷贝的目录(见上文)中读取web_merged.xml的内容;若不存在web_merged.xml,会读取web.xml的内容。

4.  在was控制台中查看运行状态

4.1     查看已加载的类

4.2     性能查看

需先启动监视(查看完后停止监视),打开页面后,在左侧选择需要查看的信息,可查看线程池、JDBC连接池、页面访问情况等,点击“查看模块”后会在右侧显示

4.3     查看session情况

查看was的session情况的链接为:http://[was服务器IP]:9080/servlet/com.ibm.ws.webcontainer.httpsession.IBMTrackerDebug

必须安装并启动DefaultApplication.ear应用,若被卸载,可使用服务器中的安装文件“/was/IBM/WebSphere/AppServer/installableApps/DefaultApplication.ear”再次安装。

示例如下:

4.4     手工产生core文件

在was控制台点击“故障诊断”“Java转储和核心”

点击“堆转储”,会产生文件heapdump;点击“Java核心”,会产生javacore文件;点击“系统转储”,会产生core文件。

以上文件生成目录一般为:/was/IBM/WebSphere/AppServer/profiles/AppSrv01,AppSrv01与was Server有关。以上文件可使用jca工具(IBM Thread and Monitor dump analyzer for Java)进行分析。

5.  was其他说明

5.1     was应用更新功能说明

“替换整个应用程序”:将整个应用进行更新。

“替换或添加单个模块”:不详。

“替换或添加单个文件”:替换单个文件,当用于替换web.xml文件时,会将应用部署目录与WAS拷贝的WEB-INF目录中的web.xml文件全部替换,但不会像重新部署时修改web.xml的内容。

“替换、添加或删除多个文件”:说明同上。

5.2  nd版本启动顺序

nd版was在启动was服务前需要先启动dmgr与node。

服务

原始启动脚本

原始停止脚本

查看进程

dmgr

/was/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/startManager.sh

同目录stopManager.sh

ps -ef|grep dmgr

node

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/startNode.sh

同目录stopNode.sh

ps -ef|grep nodeagent

5.3     was帮助文档

https://was服务器IP:9043/ibm/help/index.jsp

IBM Knowledge Center

5.4  将控制台显示语言改为中文

将IE选项的[语言]设置中,将中文设为首位,如下图。

6.  使用was部署的应用开发相关

6.1     URL中包含中文时的处理

若URL中包含了中文,需在java中调用URLEncoder.encode(xxx,"utf-8");,或在js中调用encodeURI(xxx),对URL进行编码,否则中文会乱码。

在jsp或Servlet中处理进行了编码的URL时,需调用URLDecoder.decode(request.getParameter("xxx"), "utf-8");对进行了编码的参数进行解码。使用was部署时,在调用request.getParameter()之前需要先调用request.setCharacterEncoding("UTF-8");,否则获取到的中文会乱码。

在以弹出下载框形式返回待下载文件内容时,需对attachment;filename字段调用URLEncoder.encode(xxx,"utf-8");否则浏览器显示的下载框中文件名会乱码。

6.2     SRVE0199E错误

报错如下:

[15-1-27 13:37:29:197 CST] 00000111 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: 应用程序 [csr_war] 中 servlet [action] 的其中一个服务方法抛出异常。创建的异常:[java.lang.IllegalStateException: SRVE0199E: 已获取了 OutputStream

    at com.ibm.ws.webcontainer.srt.SRTServletResponse.getWriter(SRTServletResponse.java:780)

    at com.sunyard.struts.RequestProcessor.process(RequestProcessor.java:91)

    at com.sunyard.struts.ActionServlet.process(ActionServlet.java:76)

    at com.sunyard.struts.ActionServlet.doGet(ActionServlet.java:81)

Servlet1.2规定OutputStream只能获取一次,was8.5遵守此规定,tomcat未遵守此规定,因此代码中一次HTTP通信过程中,OutputStream不能获取多于一次。

6.3     通过servlet请求无法下载附件时的处理

通过servlet请求下载附件时,必须通过以下代码指定下载类型与文件名,否则可以打开下载提示框,但点击保存会失败。需增加下代码:

            response.setHeader("Content-Disposition","attachment; filename=\"" + outFilename + "\"");

            response.setContentType("application/x-msdownload");

使用HTTPS访问时,还需调用以下代码。若不调用以下代码,IE会提示无法下载,使用chrome可以下载,与IE的特性有关。

                response.setHeader("Pragma","public");

                response.setHeader("Cache-Control","max-age=30");

6.4     WEB-INF目录

WEB-INF目录中的文件最好只保存一个web.xml文件,其他配置文件均需保存在WEB-INF目录的子目录中。

使用Websphere部署应用时,WEB-INF目录中的文件会在应用部署目录之外的其他目录产生拷贝,在替换文件进行版本时,需要将两个目录中的文件都进行替换,不便于版本更新,因此WEB-INF目录中的文件最好只保存一个web.xml文件。

6.5     web.xml文件

web.xml文件中最好只保存不会修改的应用配置,若有应用配置可能需要经常修改,最好不要保存在web.xml文件中,而是保存在WEB-INF子目录中的其他配置文件内。

web.xml文件中的web-app节点的version值应为2.5,即web.xml文件的文件头应如下:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

web.xml文件中的web-app节点的version值不应为2.4,即web.xml文件的文件头不应如下:

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

若不按照以上配置,可能会导致web.xml文件无法进行增量更新。具体原因见本文“5.4.2 web.xml的web-app节点的version值的影响”。

IBM WebSphere Application Server 9.0.0.2 部署Spring Boot 2.x IBM WebSphere Application Server 9.0.0.2 部署Spring Boot2.x 项目目录1:创建JDBC 提供程序2:创建数据源3:创建数据源认证信息(JAAS - J2C)4:认证数据源5:Spring Boot 项目配置 目录 上一篇博客讲了WebSphere Application Server如何安装,今天来说一下。如何使用它部署Spring Boot2... 阅读详情

相关推荐

was应用服务器项目部署

was应用服务器项目部署,步骤详细含图片

WebSphere 安装部署,发布web应用

目录 一、WebSphere 是什么? 二、安装 三、添加服务 四、部署&发布应用 五、访问web应用 一、WebSphere 是什么?WebSphere 为 SOA 环境提供软件,以实现动态的、互联的业务流程,为所有业务情形提供高度有效的应用程序基础架构。WebSphere 是 IBM 的应用程序和集成软件平台,包含所有必要的中间件基础架构(包括服务器、服务和工具),这些基础架构是创建、部署、

greensure的专栏 5万+

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 485

websphere服务器之was应用部署(集群部署)

websphere作为IBM的稳定的产品线,WebSphere Application Server 是所有产品的基础,其他所有产品都在它之上运行。这里记录一下公司里用到的was应用部署(集群部署)在控制台的操作步骤: 序号 操作内容 1 部署WAS应用 打开浏览器,在地址栏中输入https://127.0.0.1:8888

u014730338的专栏 9497

VisionPro九点标定实战:从相机拍照到机器人精准抓取的完整流程

本文详细介绍了VisionPro九点标定技术在工业自动化中的应用,从相机拍照到机器人精准抓取的完整流程。通过硬件配置、标定步骤和实战技巧的解析,帮助工程师实现高精度视觉引导系统,提升生产效率。特别适合需要解决二维图像坐标与物理空间转换问题的自动化项目。

weixin_30664051的博客 407

微调BERT进行中文文本分类任务(Pytorch代码实现)

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型。其模型结构由多层Transformer的Encoder堆叠而成,在大规模语料中进行预训练后,迁移到下游任务,仅进行参数微调训练,就能显著提升性能。本文聚焦于微调中文BERT进行新闻标题分类任务的代码实现。

Iswayzw的博客 1万+

Websphere安装配置与项目部署

0x01 下载安装 1、在IBM官网下载安装包 打开下载地址,需注册账户,登录后,选择Windows 64-bit下载 2、解压缩,运行install.exe文件 3、输入刚才注册的用户名和密码,并输入安全存储器的新主密码 4、安装软件包,点击下一步 5、接收许可协议条款,下一步 6、选择共享资源目录 7、选择安装目录,下一步 8、默认简体中文和...

1万+

2026年全国青少年信息素养大赛算法应用主题赛C++样题及答案解析

2026年全国青少年信息素养大赛算法应用主题赛C++样题

王老师青少年编程 3719

在websphere上部署应用遇到的问题

      我相信客户的变化是随心情的, 我突然接到通知, 系统要在webshpere上运行, 哈哈哈... -_-      webshpere长什么样???       用jar命令将应用打成war包, 部署到webshpere时显示web.xml错误, shit! 由于不确认出错的具体原因, 我将web.xml文件中的内容全部清空, 只留下xml version="1.0" 

幽弓的狂想曲 3806

代码复现1——Matterport3d数据集下载

进入“Dataset Download”部分,下载申请书,填写之后发送到指定邮箱(matterport3d@googlegroups.com),之后会收到回信,回信中附有一个download_mp.py的脚本文件。,大小约15G,并不是所有的Mp3d datasets,所有大小约1.3T。下载完成后如下图所示:我这边显示大小为16.1G。

qq_44100524的博客 8056

FLUENT Meshing Watertight Geometry工作流入门 - 9 生成体网格

总结一下我们学到的东西。讨论体积网格的重要性,并了解生成体积网格的不同方法。还了解体积网格质量的重要性,并学习如何改进它。

B_etter_Man的博客 1万+

Linux系统上WebSphere的安装、配置与应用部署

1.WebSphere安装 1. 安装环境: 操作系统: redhat-release-5Server-5.4.0.3 WebSphere版本: WebSphere6.1 安装包名称: was.cd.6100.linux.ia32.tar(请使用服务器集群版) 2. 准备安装环境 将was.cd.6100.linux.ia32.tar拷贝至应用服务器某一路径下. 如: /websphere/ wa...

DoubleJing的博客 1万+

orin+96712接GMSL2相机调试经验

orin gmsl camera调试

乐于分享 4456

Jenkins WebSphere 部署

Jenkins 安装 1.1安装方式: 选择windows 安装文件或以war包形式运行 下载地址:https://jenkins.io/ 选择最新版本的window版 1.2插件安装: 选择默认插件安装全部插件 Jenkins WebSphere插件安装 2.1安装: 在可选插件列表中搜索WebSphere Deployer Plugin 安装 2.2配置:...

qq_32929101的博客 3225

交通仿真软件:SUMO_(1).SUMO基础知识

SUMO 中的交通网络由节点(junctions)和边(edges)组成。节点表示交叉口或路网的连接点,边表示连接节点之间的道路。节点:节点文件(.nod.xml)定义了网络中的所有节点。每个节点有一个唯一的 ID 和坐标。</边:边文件(.edg.xml)定义了连接节点的边。每个边有一个唯一的 ID、起点节点 ID 和终点节点 ID。</车辆文件(.vtype.xml)定义了不同类型的车辆。每个车辆类型可以有不同的参数,例如长度、最大速度、加速度等。</

kkchenjj的博客 1432

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

EAR部署websphere步骤

  .拷贝JDBC驱动jar 将ojdbc14-10.2.0.2.0.jar、infomixjdbc.jar、sybase_jconn.jar、mysql-connector-java-3.1.12-bin.ja、db2jcc.jar、 mssqlserver.jar拷贝至 [PROFILE_HOME]/AppServer/ib/ext下   2.部署数据源、JMS等应用绑定资源 2....

iteye_20868的博客 1458

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

websphere部署war包

通过websphere部署以及打包成war的web项目。 (1)安装配置war包,部署项目 登录websphere,进入websphere主页(依次选中) Applications --> Application Types --> websphere Enterprise Application --> install 打开选择文件,选择需要上传的war包,然...

weixin_30340617的博客 2937

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

weblogic迁移至websphere的步骤和方法(简要步骤说明,随笔写的,有点乱,有空再整理一下)

一,原项目weblogic中配置说明(项目使用两个数据源,用到了sessionBean和entityBean)1,一个jdbc pool连接池,两个DataSource数据源(一个是TX,一个是非TX) *如何区分WAS中的两种数据源?2,ejb的部署(原使用weblogic.xml),以及使用jndi查找EJB的方式 *迁移需要修改的三个weblogic配置文件:webl

生活简单化 3119

WebSphere 部署出现问题

find /opt/app/WebSphere/ -name ‘fitech.’ |xargs rm -rf find /opt/app/WebSphere/ -name 'fitech_war.’ |xargs rm -rf 1.1)如果安装部署出现问题 2)was登录不起来(项目包有问题),导致启动一直初始化 A composition unit with name **** already exists. Select a different application name. 2.把缓存的数据删掉

IT_Octopus的博客 917

Axis2 在 WebSphere 7.0中部署的问题

问题:项目中加入了Axis2的war包,当部署到websphere7.0版本上时,总是报: [4/26/12 20:35:31:742 CDT] 00000026 SystemErr R org.apache.axis2.deployment.DeploymentException: org.apache.commons.fileupload.FileUploadExceptio

不积跬步,无以至千里;不积小流,无以成江海! 5532

websphere一直安装部署_WebSphere集群安装配置及部署应用说明

《WebSphere集群安装配置及部署应用说明》由会员分享,可在线阅读,更多相关《WebSphere集群安装配置及部署应用说明(27页珍藏版)》请在人人文库网上搜索。1、WebSphere6.1集群安装配置及部署应用说明1 安装Webphere1.1 安装WebSphere ND 6.11、 双击launchpad.exe,进入2、 点击启动WebSphere Application Server...

weixin_42500130的博客 942

jstl 在tomcat5以及webSphere上的部署

本文是我在第一次使用JSTL中在不同环境下部署中遇到的问题以及解决办法,因为项目赶时间,解决办法可能不是最好的,见笑见笑。本地环境:  服务器:tomcat5.0        JRE 版本:1.5.2        jstl版本:1.1远程服务器环境:        服务器:webSphere 5.0        jre版本:未知,可能为WebSphere 自带的jdk1.3 screen.w

skyfree的专栏 2939

WebSphere上部署Web时 找不到用于处理 JSP 的扩展处理器

WebSphere7.0 上部署struts2 找不到用于处理 JSP 的扩展处理器     [11/24/11 12:56:54:145 CST] 00000018 webapp        E com.ibm.ws.webcontainer.webapp.WebApp initializeExtensionProcessors SRVE0280E: Extension process

ziyunlong1984的专栏 7073

java websphere_将Java Web 应用部署至 WebSphere 7

因为项目最终需要被部署至IBM WebSphere上,而且以前都没有接触过WebSphere,所以先写一个测试例子练练手。在网上找了很多文档,折腾了一下午,才把项目部署上去,有很多文档写得并不全,所以整理一份出来,希望能帮助到一些朋友!WebSphere 7 的安装过程我就不说了。基本上是默认配置。紧接着是你的JavaWeb应用的web.xml需要添加如下配置:jdbc/testds //Re...

weixin_39609354的博客 379

WebSphere部署失败浏览器卡死或长时间无反应

背景 Was应用部署失败后,造成浏览器上的控制台界面卡死或长时间无反应,刷新后无法访问控制台界面,这时就需要手工清理当前部署失败的应用 手工清理Was应用的步骤 进入当前所使用的概要文件的目录,如当前使用的AppSrv03 // 当前WebSphere服务安装在 /home 目录下,请根据实际做适当调整 cd /home/IBM/WebSphere/AppServer/profiles/AppSrv03 查询部署失败的应用,并进行删除 // demo-1216为部署失败的应用名 find .

Hershey's Blog 1194

解决WebSphere下在同一个server部署多个应用时的session相同的问题

在部署多个应用时,可能会部署在同一个server下,只是上下文根路径不同,这样会导致每个应用的sessionID是相同的,如下图所示: 分别访问,会发现sessionID相同。 我部署的这两个项目很简单,index.jsp里只是简单获取sessionID request.getSession().getId(); 访问是只是路径不同,端口号相同,如下图: 为了使这两个应用的session不冲突,修改步骤如下: 1、登录WAS的控制台→应用程序→应用程序类型→WebSphere 企业应用程

einstein618的专栏 1824
上一篇: MySQL更新使用二级索引字段导致死锁问题分析
下一篇: word文档批量转换为html格式
adrninistrat0r
博客等级 码龄18年 395粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值