You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Solace WebLogic Resource Adapter打包进EAR部署的问题咨询

我之前也碰到过类似的WebLogic + Solace Resource Adapter(RA)打包部署的问题,因为环境限制没法手动部署RA,只能把它塞进EAR和业务WAR一起发。结合官方文档的要求和实际踩过的坑,给你整理几个关键步骤和常见问题的排查方向:

1. 确保EAR包的结构与配置正确

这是基础,结构不对或者配置缺失直接会导致RA部署失败或者无法被WAR引用:

  • EAR目录结构:要把Solace的RAR包放在EAR的根目录或者lib目录下,同时业务WAR包放在根目录。示例结构:
    my-app.ear/
    ├── solace-jms-ra.rar
    ├── my-web-app.war
    ├── META-INF/
    │   ├── application.xml
    │   └── weblogic-application.xml
    
  • application.xml配置:需要在这个文件里声明RA模块和Web模块,示例配置:
    <application xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="7">
      <module>
        <connector>solace-jms-ra.rar</connector>
      </module>
      <module>
        <web>
          <web-uri>my-web-app.war</web-uri>
          <context-root>/my-web-app</context-root>
        </web>
      </module>
    </application>
    
  • weblogic-application.xml配置:如果需要自定义RA的连接属性(比如Solace broker地址、用户名密码),可以在这里添加部署参数,或者后续通过WebLogic控制台配置,但打包时提前配置能减少手动操作:
    <weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" version="12.2.1">
      <module-descriptor>
        <root-element>connector</root-element>
        <uri>META-INF/ra.xml</uri>
        <external-descriptor>
          <uri>solace-jms-ra.rar/META-INF/weblogic-ra.xml</uri>
          <module-type>connector</module-type>
        </external-descriptor>
      </module-descriptor>
      <!-- 可选:提前配置连接池参数 -->
      <resource-description>
        <res-ref-name>jms/SolaceConnectionFactory</res-ref-name>
        <jndi-name>eis/SolaceJMSRA</jndi-name>
      </resource-description>
    </weblogic-application>
    
2. 部署后常见的“未明确问题”排查方向

很多时候RA部署成功了,但业务代码用不了,大概率是以下几个点:

  • JNDI引用不匹配:WAR里的resource-ref必须和EAR配置的JNDI名称一致,或者和WebLogic自动生成的RA JNDI名称匹配(WebLogic会给部署的RA自动生成类似eis/solace-jms-ra的JNDI,可在控制台的“部署”->RA详情里查看)
  • RA连接池初始化失败:检查WebLogic控制台的“连接池”页面,看Solace RA的连接池状态。常见原因是broker地址、用户名密码配置错误,或者网络不通(基础设施防火墙限制)
  • 类加载冲突:Solace RA里的JMS API包可能和WebLogic自带的JMS包冲突。可以在weblogic-application.xml里添加类加载优先级配置,强制使用RA里的类:
    <prefer-application-packages>
      <package-name>com.solacesystems.jms.*</package-name>
      <package-name>com.solacesystems.common.*</package-name>
    </prefer-application-packages>
    
  • 权限不足:WebLogic的服务器用户需要有访问RA连接池的权限。可以在控制台给对应的用户添加“Connector Connection Pool Access”权限。
3. WAR包中正确引用RA的姿势

业务WAR里必须正确声明对RA的引用,否则代码无法lookup到连接工厂:

  • web.xml配置:添加resource-ref声明:
    <resource-ref>
      <description>Solace JMS Connection Factory</description>
      <res-ref-name>jms/SolaceConnectionFactory</res-ref-name>
      <res-type>javax.jms.ConnectionFactory</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    
  • weblogic.xml配置:把WAR里的res-ref-name映射到RA的JNDI名称:
    <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" version="12.2.1">
      <resource-description>
        <res-ref-name>jms/SolaceConnectionFactory</res-ref-name>
        <jndi-name>eis/SolaceJMSRA</jndi-name>
      </resource-description>
    </weblogic-web-app>
    
  • 代码中lookup:用相对路径或者全局JNDI路径lookup,比如:
    Context ctx = new InitialContext();
    ConnectionFactory cf = (ConnectionFactory) ctx.lookup("java:comp/env/jms/SolaceConnectionFactory");
    

内容的提问来源于stack exchange,提问作者Alexandru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:03:44