代码之家  ›  专栏  ›  技术社区  ›  Ilias

java.lang.ClassCastException:com.tibco.tibjms.naming.TibjmsFederatedQueueConnectionFactory无法强制转换为javax.jms.QueueConnectionFactory

  •  0
  • Ilias  · 技术社区  · 11 年前

    在试图查找JNDI上下文时,我遇到了以下异常,尽管这个站点上已经回答了类似的问题,提到了缺失的 tibjms.jar 从类路径中删除。

    java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsFederatedQueueConnectionFactory cannot be cast to javax.jms.QueueConnectionFactory
    at com.xxx.host.tibco.ConnectionHandler$JMSConnectionFactory.<init>(ConnectionHandler.java:337)
    at com.xxx.host.tibco.ConnectionHandler.init(ConnectionHandler.java:94)
    at com.xxx.host.tibco.ConnectionHandler.<init>(ConnectionHandler.java:84)
    at com.xxx.host.tibco.ConnectionHandler.getInstance(ConnectionHandler.java:63)
    at com.xxx.productOne.host.HostGetMemberBalanceRequest.doDecision(HostGetMemberBalanceRequest.java:42)
    at com.audium.server.voiceElement.DecisionElementBase.service(DecisionElementBase.java:386)
    at com.audium.server.controller.Controller.goToDecision(Controller.java:2857)
    at com.audium.server.controller.Controller.goToElement(Controller.java:2687)
    at com.audium.server.controller.Controller.continueCall(Controller.java:2511)
    at com.audium.server.controller.Controller.goToElement(Controller.java:2742)
    at com.audium.server.controller.Controller.continueCall(Controller.java:2511)
    at com.audium.server.controller.Controller.doPost(Controller.java:733)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:662)
    

    除此之外,我在另一台版本/编号完全相同的服务器上也有同样的代码可以正常工作。TOMCAT中的库。

    以下是如何查找上下文的代码片段:

    InitialContext iniCtx;
            try {
                iniCtx = new InitialContext(oProperties);
                PoolableObjectFactory objectFactory = new JMSConnectionFactory(iniCtx);
                this.pool = new GenericObjectPool(objectFactory);
                createQueues(iniCtx);
                singleton = this;
                System.out.println("Connection Handler is initialized");
            } catch (NamingException ne) {
                ne.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    我们非常感谢您在解决问题方面提供的任何帮助。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Bernd Ebertz    11 年前

    像这样的问题总是由不同的类加载器加载的一个类(在本例中为javax.jms.QueueConnectionFactory)。通常,但并非总是如此,不同的类加载器意味着与加载类的位置不同。类的加载位置很容易在调试器中找到

    javax.jms.QueueConnectionFactory.class.getProtectionDomain().getCodeSource().getLocation();
    

    connectionFactory.getSuperclass()..
    

    如果在大多数情况下位置不同,原因会很快得到澄清。

        2
  •  0
  •   Angelo Immediata    11 年前

    我猜这个类被不同的类加载器加载了两次