部署到其他服务器给出 ClassNotFoundException TIBCO JMS

deploying to other Server gives ClassNotFoundException TIBCO JMS

我能够在开发中成功部署我的应用程序。我正在使用 Spring JMS 模板与 Tibco 客户端进行通信,在 weblogic 中我设置了一个外部服务器,目标队列作为 Tibco 队列,连接工厂与 Tibco 连接工厂。我的 JNDI 初始上下文工厂:是 tcp://name:port...我能够发布消息并收听它。没有问题。

问题: 当部署到 QA 时(来自开发的 war 被获取并放入 QA)并且在部署过程中我们得到这个

Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.tibco.tibjms.naming.TibjmsInitialContextFactory [Root exception is javax.naming.NoInitialContextException: Cannot instantiate class: com.tibco.tibjms.naming.TibjmsInitialContextFactory [Root exception is java.lang.ClassNotFoundException: com.tibco.tibjms.naming.TibjmsInitialContextFactory]]
    at weblogic.utils.StackTraceDisabled.unknownMethod()
Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.tibco.tibjms.naming.TibjmsInitialContextFactory [Root exception is java.lang.ClassNotFoundException: com.tibco.tibjms.naming.TibjmsInitialContextFactory]
    ... 1 more
Caused by: java.lang.ClassNotFoundException: com.tibco.tibjms.naming.TibjmsInitialContextFactory
    ... 1 more

对可能出现的问题有什么建议吗?

编辑:人们认为这是一个明显的 class 路径错误。但是在开发中,我没有在 weblogic 中启动服务器的 class 路径中包含任何内容。

我没有将外部服务器添加到 weblogic,而是使用 JMS 模板并设置了以下属性。

@Bean
    public JndiTemplate jndiTemplate() throws JMSException {
        JndiTemplate jndiTemplate = new JndiTemplate();
        Properties jndiProps = new Properties();
        Properties props = System.getProperties();
        String env = props.getProperty("cwt.env");
        jndiProps.setProperty("java.naming.factory.initial", environment.getProperty("ems.contextFactory"));
        jndiProps.setProperty("java.naming.security.principal", environment.getProperty("java.naming.security.principal"));
        jndiProps.setProperty("java.naming.security.credentials", environment.getProperty("java.naming.security.credentials"));
        jndiProps.setProperty("java.naming.provider.url", environment.getProperty("tibco.ems.namingUrl"));

        jndiTemplate.setEnvironment(jndiProps);
        return jndiTemplate;
    }

在 .properties 文件中放置这个

ems.contextFactory=com.tibco.tibjms.naming.TibjmsInitialContextFactory

此外,在 pom 中添加 tibjms 依赖。

您需要 TibjmsInitialContextFactory 个 Jar 才能使上述代码正常工作。

以下是 Maven 依赖项,以防您使用 Maven 项目:

<dependency>
    <groupId>com.tibco</groupId>
    <artifactId>tibjms</artifactId>
    <version>8.3</version>
</dependency>
<dependency>
    <groupId>com.tibco</groupId>
    <artifactId>tibcrypt</artifactId>
    <version>8.3</version>
</dependency>