首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用cast 1.8和Tomcat 8.5.28从ConnectionWrapper转换到oracle.jdbc.OracleConnection

不能使用cast 1.8和Tomcat 8.5.28从ConnectionWrapper转换到oracle.jdbc.OracleConnection
EN

Stack Overflow用户
提问于 2018-09-04 07:44:49
回答 2查看 1.1K关注 0票数 0

为什么几秒钟后连接就不能工作了?应用程序正在挂起,没有按预期运行,并返回以下错误。

org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper :不能将org.apache.tomcat.dbcp.dbcp2.DelegatingConnection转换为java.lang.ClassCastException

下面是用于获取连接的代码:

代码语言:javascript
复制
OracleConnection oracleConnection = (OracleConnection) 
((DelegatingConnection)connection).getInnermostDelegate();

使用库来进行加密和数据库使用tomcat-dbcp.jar。

在Tomcat context.xml中使用加密的用户名和密码。

另外,在accessToUnderlyingConnectionAllowed=true文件中使用context.xml。

问题在于JAVA8和Tomcat8。能够正确处理普通凭据,唯一的问题发生在加密凭据上。

EN

回答 2

Stack Overflow用户

发布于 2019-10-04 09:13:16

你不应该做铸造或拆开。在Tomcat 'conf/context.xml‘文件中使用正确的DataSource类型。对于甲骨文来说,它是: oracle.jdbc.pool.OracleDataSource。还设置正确的驱动器和工厂。看看我的例子:

代码语言:javascript
复制
<Context>

<!-- Default set of monitored resources. If one of these changes, the    -->
<!-- web application will be reloaded.                                   -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Resource name="UNCUNC"
          auth="Container"
          type="oracle.jdbc.pool.OracleDataSource"
          factory="oracle.jdbc.pool.OracleDataSourceFactory"
          driverClassName="oracle.jdbc.OracleDriver"

          url="jdbc:oracle:thin:@p260unc4.big.ru:1566:uncunc"
          user="dsserv"
          password="dsservPass" 

          connectionProperties="SetBigStringTryClob=true"
          maxTotal="20" maxIdle="10"
          maxWaitMillis="-1"/>              
<JarScanner scanManifest="false"/>

在后面的java代码中,请像这样使用它(不要强制转换):

代码语言:javascript
复制
try {
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("UNCUNC");
    } catch (NamingException e) {
        logger.error("DATASOURCE error", e);
    }
 Connection conn = ds.getConnection();

应该能正常工作。请注意Tomcat的不同版本,您需要使用'username‘而不是'user’字段。

票数 0
EN

Stack Overflow用户

发布于 2020-07-19 12:06:15

我也面临着同样的问题。经过大量的分析发现,这是类加载问题。通过在shared.loaded ( conf/catalina.properties)中提供ojdbc解决了这个问题

代码语言:javascript
复制
shared.loader="/path/to/ojdbcN_jar/ojdbcN.jar"

这将确保从Tomcat和已部署的webapp中的同一个jar加载OracleConnection类。

在需要OracleConnection的应用程序中,请使用以下内容:

代码语言:javascript
复制
OracleConnection oracleConnection = connection.unwrap(OracleConnection.class);

注意:在我的应用程序中,我有ojdbc jar,以便我的应用程序能够很好地编译,但是在部署时,使用的jar将是共享加载程序中提到的jar。

还不要忘记在创建Tomcat连接池时启用accessToUnderlyingConnectionAllowed。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52161264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档