• 中间件Weblogic12.2.1.4与iServer 8C 10i兼容性问题解决过程分享


    作者:xiaoyan

    项目场景:

    项目场景:某客户由于安全合规要求,目前需将中间件由Weblogic由版本12.1.3升级至12.2.1.4,客户在自己研发的项目中调用了8C版本iServer中iserver-all.jar这个包,在不引用该包时,项目正常部署;引用该包时,项目部署失败,故定位到iserver-all.jar包与weblogic12.2.1.4兼容性问题。

    由于同样的jar包,该问题在iServer 8C中也存在。


    问题描述

    客户从iServer 8C中取出iserver-all.jar包,引用至自己开发的项目中,在引入该包时,项目编译运行通过,将打包好的war包部署至weblogic12.1.3成功,部署至weblogic12.2.1.4失败。问题定位到8c 版本iserver-all.jar与weblogic新版本之间兼容性问题。
    既然jar包是从8C iServer中获取的,我们本地搭建了环境,使用iServer 8C进行测试,同样该问题可以复现。
    问题出现在war包部署至weblogic过程中,通过查看
    {Weblogic安装目录}\user_projects\domains{domain_name}\servers\AdminServer\logs
    目录下的日志文件AdminServer.log,可以看到在部署iServer 8C时产生了大量的Warning和Error级别的日志,项目部署过程中出现Warning级别日志大多是由于项目不够规范,遵循的标准过旧导致的,并不影响项目的正常部署,通过排查日志中Error级别日志,最终定位到反馈部署失败原因的日志信息如下。

    <2022-7-19 上午115009,847秒 CST> <Error> <HTTP> <BEA-101216> <Servlet: "JAX-RS/Jersey#1" failed to preload on startup in Web application: "iserver.war".
    org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
    
    
    • 1
    • 2
    • 3

    原因分析:

    分析报错,该报错是由org.glassfish.jersey抛出。
    iServer 8C中使用Jersey版本为Jersey1。包名应为com.sun.jersey,而此处报错则显示使用的为Jersey2,包名为为org.glassfish.jersey。推测是Jersey版本过新,与iServer 8C不兼容导致。iServer war包内内置1.19版本Jersey,从报错看起来并没有被调用。

    jersey1.Xcom.sun.jersey
    jersey2.Xorg.glassfish.jersey

    经过多方沟通得知,Weblogic具有自动发现Jersey功能,正是由于该功能,在部署过程中会使用Weblogic内置Jersey,而Weblogic12.1.3对应Jersey1,Weblogic12.2.1.4对应Jersey2,最终出现冲突。


    解决方案:

    通过修改iServer 8C war包内WEB-INF文件夹下配置文件web.xml与weblogic.xml(位于war包目录/WEB_INF文件夹下),将产品包内Jersey设置为优先加载,再将Weblogic中自动发现Jersey功能关闭,即可正常启动iServer。配置方法如下:

    web.xml

    
    <web-app 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_3_0.xsd" version="3.0">
        <display-name>SuperMap iServer 8Cdisplay-name>
        <filter>
            <filter-name>iserver-servicesfilter-name>
            <filter-class>com.supermap.server.host.webapp.ApplicationFilterfilter-class>
            <async-supported>trueasync-supported>
        filter>
        <filter-mapping>
            <filter-name>iserver-servicesfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
        <welcome-file-list>
            <welcome-file>index.htmwelcome-file>
        welcome-file-list>
        
        <servlet>
            <servlet-name>TurnOffJerseyServletservlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainerservlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packagesparam-name>
                <param-value>org.noneparam-value>
            init-param>
            <init-param>
                <param-name>jersey.config.disableAutoDiscoveryparam-name>
                <param-value>trueparam-value>
            init-param>
        servlet>
        <servlet-mapping>
            <servlet-name>TurnOffJerseyServletservlet-name>
            <url-pattern>/TurnOffJerseyServlet*url-pattern>
        servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    weblogic.xml

    
    <weblogic-web-app
      xmlns="http://www.bea.com/ns/weblogic/90">
      <context-root>/iservercontext-root>
      <container-descriptor>
        <prefer-application-resources>
          <resource-name>META-INF/services/*resource-name>
        prefer-application-resources>
        <prefer-application-packages>
          <package-name>javax.ws.rs.*package-name>
          <package-name>com.sun.jersey.*package-name>
        prefer-application-packages>
      container-descriptor>
    weblogic-web-app>
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    直接用压缩软件打开war包修改,修改后保存,之后将该war包在weblogic控制台部署即可,部署流程与weblogic12.1.3相比不变。
    之后部署成功。
    部署成功

    关于新版iServer部署(10i、11i)

    weblogic12.2.1.4升级后对于校验更加严格,许多第三方库无法在该中间件下无法通过效验,经过验证,10i版本并不能部署在该中间件上,产品团队针对此情况,删减了部分iServer功能,调整后能够通过部署,正常运行。但例如hadoop相关功能,web打印等功能则不可用。若有需要请联系400-890-0866支持热线,和我们确认需求后,获取产品包。
    10i部署成功,但部分功能不可用
    最新版iServer 11i,针对高版本weblogic,短期内没有支持适配计划。请考虑如Tomcat之类其他中间件,或者直接下载deploy或者zip绿色包,直接解压使用。

  • 相关阅读:
    EMQX Operator 如何快速创建弹性伸缩的 MQTT 集群
    天翎知识管理系统为研究所文档管理组织创新赋能
    NumPy 数组切片及数据类型介绍
    认识网线上的各种参数标号
    SwiftUI 状态管理系统指南
    tep集成mitmproxy录制流量自动生成用例
    大规模新型冠状病毒疫情最优应对策略研究
    【毕业设计】疲劳驾驶检测系统 - 机器学习 机器视觉 OpenCV python
    无源蜂鸣器驱动实验
    前端裸辞躺平三个月自己的一点想法哈哈哈
  • 原文地址:https://blog.csdn.net/supermapsupport/article/details/126346809