最近产品上线,同时要部署到三个不同版本的Websphere上,分别是WebSphere 7.0、8.0和8.5.0.0,遇到不少问题在此总结一下:
1.WebSphere 8.5.0.0 这个版本最悲剧。
如果项目中用到了asm 相关的jar包,可能会遇到这样的问题。
① 我项目中用到了asm-3.3.jar
[13-8-29 15:48:52:659 CST] 000000c1 webapp E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet 错误]- [GenericServletWrapper]: java.lang.IncompatibleClassChangeError: org.objectweb.asm.ClassVisitor
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:262)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:852)
at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:762)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
at java.lang.ClassLoader.loadClass(ClassLoader.java:627)
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:262)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:852)
at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:762)
at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
at java.lang.ClassLoader.loadClass(ClassLoader.java:627)
at java.lang.J9VMInternals.verifyImpl(Native Method)
at java.lang.J9VMInternals.verify(J9VMInternals.java:85)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:162)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:390)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:347)
at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:260)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:142)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:566)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:473)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:306)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:378)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:890)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1023)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3703)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:522)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:311)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:282)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)
初期我考虑是jar包冲突,在websphere 目录找到
/opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.asm.jar
/opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.ow.asm.jar
于是删除了 项目中的asm-3.3.jar 仍然报这个错误。后来google之后找到了解决方法
1、升级到8.5.0.2解决了这个问题,详见(IBM官方提供的方法)
http://www-01.ibm.com/support/docview.wss?uid=swg1PM71336
2、创建采用隔离的类加载器的共享库,并在应用程序中引用之
类装入“请对此共享库使用隔离的类装入器”
3、采用PARENT_LAST类加载
“类已装入并且是先使用本地类装入器(父类最后)”
将cglib包cglib-2.1.3.jar更换为cglib-nodep-2.1.3.jar或者更高的版本cglib-nodep-2.2.jar
cglib-nodep-2.2.jar包中包含了完整的类与接口
这样,整个系统就可以部署成功并运行
升级必须说服客户到8.5.0.2然后才解决了这个问题。
②远程解决WebShpere 上的问题很痛苦,每次都要让现场的同事拉日志,然后看,报一些jar冲突的问题后不知道类路径的情况,后来通过导出拓扑图的方式,查看类路径下的jar包
具体做法是,WebSphere 控制台—>类装入器查看器—>企业应用程序拓扑 找到部署的项目,然后web模块 找到自己部署的项目,点击导出,将项目对应的类路径拓扑导出。根据这个东西,发现类路径中的重复jar 从而干掉了一下非法的jar包。
③ 建立共享库的意义不凡。我建立共享库的标准是这样的,当一个jar包在lib里面是报NoClassDefError V ,当jar包不在类路径的时候又报NoClassDefError ,此时我把这个
jar包放置到共享库当中。
④ log4j jar 在类路径中有可能会引起jar包冲突,如果提示log4j 冲突可以将lib目录的log4j*.jar删除即可。
2.WebSphere 7.0
① jsp页面403 forbidden
在应用程序服务器 -> [ 选择所使用的服务器 ] -> Web 容器设置 -> Web 容器 -> 定制属性,增加名称为"com.ibm.ws.webcontainer.invokefilterscompatibility"的定制属性 ,值设为 true。
或者检查 WAR 文件的 lib 库中是否存 jsf-api.jar,jsf-impl.jar,jstl-1.2.jar 三个 jar 文件。这是因为在使用 MyEclipse 开发时,MyEclipse 会自动将这三个 jar 文件 加入到 lib 库中,但 jsf-impl.jar 包中的 com.sun.faces.application.WebappLifecycleListener 与 java.util.EventListener 不兼容导致应用无法访问,打开 WAR 包的 lib 目录,删除这三个 lib 包即可解决问题。
② 部署到WebSphere 7.0 环境后
[14-5-16 19:14:25:449 CST] 0000001c SystemOut O 19:14:25.445 [Default : 0] WARN org.hibernate.cfg.SettingsFactory - Could not obtain connection metadata
com.ibm.db2.jcc.a.SqlException: DatabaseMetaData information is not known for server DB2/AIX64SQL09076 by this version of JDBC driver
at com.ibm.db2.jcc.a.t.supportsResultSetType(t.java:5177) [db2jcc.jar:na]
at com.ibm.ws.rsadapter.jdbc.WSJdbcDatabaseMetaData.supportsResultSetType(WSJdbcDatabaseMetaData.java:3287) [com.ibm.ws.runtime.jar:na]
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325) [hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) [hibernate-annotations-3.4.0.GA.jar:3.3.1.GA]
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814) [spring-2.5.6.jar:2.5.6]
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732) [spring-2.5.6.jar:2.5.6]
这个原因显然是因为DB2 jar包引起的,可以通过到官网查找相关版本的DB2jar包进行替换就可以了。
分享到:
相关推荐
然而,对于大型企业级应用,可能需要更强大的服务器,如IBM WebSphere或Oracle WebLogic,它们提供了更多的管理和安全性功能。 总的来说,Apache Tomcat 8.5.55是Java Web开发的基础工具,理解和掌握其配置和使用...
在本文中,我们将深入探讨如何在Linux环境下安装和部署WebSphere Application Server V8.5,这是一个企业级的应用服务器,广泛用于构建和运行Java EE应用程序。整个过程分为几个关键步骤,包括准备必要的软件包、...
总的来说,《xxx银行系统-WebSphere-was8.5原厂安装配置调优实战手册》为银行系统的WAS部署提供了详尽的指导,涵盖了从规划、安装到调优的全过程,是IT专业人员在实施银行系统项目时的重要参考文献。通过对这本手册...
【标题】:Websphere 8.5安装 在IT领域,WebSphere是IBM提供的一款企业级应用服务器,常用于构建、部署和管理...通过《Websphere8.5安装.xls》这样的文档,可以更详细地了解每个步骤和配置选项,为安装过程提供指导。
阿帕奇Tomcat是一款广泛应用的开源Java Servlet容器,它实现了Java EE Web...不过,对于大型企业级应用,可能需要考虑与更强大的应用服务器如IBM WebSphere或Oracle WebLogic集成,以获得更全面的功能和更高的性能。
IBM WebSphere Portal 8.5是一个企业级的Web内容管理和协作平台,它能够为用户提供个性化的Web体验和访问企业信息的途径。当涉及到大规模部署时,通常会采用Cluster(集群)的方式来保证服务的高可用性和负载均衡。...
Tomcat就是这样一个容器,它是轻量级的,因为相比其他全功能的应用服务器(如IBM WebSphere或Oracle WebLogic),它只专注于实现Java EE的Web层规范。 Tomcat 8.5.x系列是一个稳定的版本,它带来了许多增强和改进,...
WebSphere 8.5 安装和集群配置 WebSphere 8.5 是一款功能强大且灵活的应用服务器,可以在各种环境中运行,包括 Linux。下面我们将详细介绍如何在 Linux 环境下安装和配置 WebSphere 8.5,以及如何设置集群环境。 ...
尽管它不包含像大型应用服务器(如IBM WebSphere或Oracle WebLogic)那样的全面特性集,但Tomcat的简洁性和高效性使得它在开发和部署Java Web应用时非常流行。 Web容器,也称为Servlet容器,是Tomcat的核心组件之一...
### Websphere 8.5 安装与配置详解 #### 一、概述 IBM WebSphere Application Server (WAS) 是一款广泛应用于企业环境的应用服务器,它提供了强大的平台支持Java EE应用程序的部署与运行。从版本8.5开始,IBM改变了...
总的来说,安装和配置WebSphere Application Server 8.5涉及到多个步骤,包括下载和安装所需组件,通过Installation Manager管理这些组件,以及在管理控制台中进行Node创建和应用部署。这个过程虽然复杂,但却是实现...
WebSphere V8.5 是 IBM 提供的一款强大的企业级应用服务器,它支持各种应用程序的部署和管理,尤其在Java EE环境中。在这个“WebSphere V8.5 更新部署记录”中,我们将探讨如何有效地进行WebSphere的更新和部署过程...
WebSphere Application Server for Developers V8.5.5是供开发人员使用的免费版的was,需要的小伙伴可以本地安装一下 ,部署测试web项目,因为上传空间有限,这里就只上传windows64位的。
在Red Hat 5.8操作系统环境下安装WebSphere Application Server (WAS) 8.5并部署应用程序是一项关键的任务,尤其对于那些需要在企业级Linux环境中运行Java EE应用程序的组织而言。以下将详细介绍整个过程,包括安装...
【标题】"Websphere8.5.zip" 指的是IBM的一款企业级应用服务器软件——WebSphere Application Server 8.5.5的压缩包。WebSphere是IBM提供的用于部署和管理Java EE(Java Platform, Enterprise Edition)应用程序的...
### IBM WebSphere 8.5 部署项目知识点总结 #### 一、IBM WebSphere 8.5 创建数据源 ##### 1.1 新建 J2C 认证 - **步骤说明**: - 登录 WebSphere 管理控制台。 - 通过导航栏进入“安全性”>“全局安全性管理”...
WebSphere Application Server V8.5是IBM推出的一款应用服务器产品,它允许企业构建、部署和运行高性能的企业Java应用。该版本包括多个配置文件,其中Full Profile针对完整的企业级应用部署而设计。它提供了全面的...
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,而相应的war包在tomcat上是可以正常启动的,通过后台的日志分析大致可以定位为相关的cxf类无法找到,其实这些类在项目的lib目录下都是存在的,莫名其妙...
对于开发者来说,Tomcat提供了一个简单易用的环境来测试和部署Java Web应用,而无需完整的企业级应用服务器,如IBM WebSphere或Oracle WebLogic。 在"apache-tomcat-8.5.8-windows-x64"这个压缩包中,你可以期待...