WebSphere 70-8.5 部署问题

最近产品上线,同时要部署到三个不同版本的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包进行替换就可以了。

 

你可能感兴趣的:(websphere)