【问题标题】:JMS Connection problems in TomcatTomcat 中的 JMS 连接问题
【发布时间】:2020-09-14 21:19:22
【问题描述】:

我正在尝试将一个旧的、大型的、基于 Weblogic 的应用程序移植到 Tomcat。该应用程序使用 Spring、EclipseLink 和 Oracle 数据库。

有两个不同的数据库连接,两者几乎相同。与 JSF 页面的连接工作正常。不幸的是,JMS(Oracle AQ)没有。这是我得到的错误:

我的应用程序 | 17:17:34,177 错误 XmlMessageListenerContainer.refreshConnectionUntilSuccessful 无法刷新目标“SPFR_EVENT_Q”的 JMS 连接 - 使用 FixedBackOff{interval=5000,currentAttempts=4,maxAttempts=unlimited} 重试。原因:创建 db_connection 时出错;嵌套异常是 java.lang.ClassCastException: com.sun.proxy.$Proxy51 cannot be cast to oracle.jdbc.internal.OracleConnection

这是相关的连接:

<Resource
   name="jdbc/myAQDS"
   auth="Container"
   type="javax.sql.DataSource"
   factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
   driverClassName="oracle.jdbc.OracleDriver"
   url="jdbc:oracle:thin:theurlhere"
   username="theuser"
   password="thepassword"
   maxTotal="150"
   maxIdle="10"
 />

任何想法是什么导致了这个?我用谷歌搜索了具体的错误,结果完全空手而归。

【问题讨论】:

  • 这里没有什么可做的,但我真正能做的就是推测在你的应用程序的某个地方(可能在一个库中)有一些代码假设数据库连接是一个@ 987654322@。然而,这个假设失败了,因为它给出的连接是一些代理对象。您提到 Spring:您的应用程序是否有可能通过使用 JDK 动态代理来应用 AOP?您是否尝试过使用 CGLIB 代理进行数据库连接?
  • 这个问题很混乱。 JMS 不是数据库。 Config 用于数据库。错误消息清楚地表明了 JMS 故障和数据库根本原因。也许 JMS 代理(或服务器)在幕后使用 Oracle,而您在自己的应用程序中配置了 Oracle 数据库连接只是巧合?

标签: java spring oracle tomcat jdbc


【解决方案1】:

在这里查看 Spring 文档:https://docs.spring.io/spring-data/jdbc/old-docs/2.0.0.M1/reference/html/orcl.streamsaq.html 特别是关于 NativeJdbcExtractor 的部分,因为有一个 OracleJdbc4NativeJdbcExtractor 可用。

具体来说,请记住 Oracle AQ 连接工厂需要本机 Oracle 连接对象。但是,应用服务器很可能包装了 dataSource 连接对象。因此,请尝试使用 OracleJdbc4NativeJdbcExtractor 作为 JMS 连接工厂的 nativeJdbcExtractor,它将用于解包连接并保持 Oracle 库正常运行。

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2016-06-16
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2016-01-12
    • 2010-10-12
    相关资源
    最近更新 更多