为什么几秒钟后连接就不能工作了?应用程序正在挂起,没有按预期运行,并返回以下错误。
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper :不能将org.apache.tomcat.dbcp.dbcp2.DelegatingConnection转换为java.lang.ClassCastException
下面是用于获取连接的代码:
OracleConnection oracleConnection = (OracleConnection)
((DelegatingConnection)connection).getInnermostDelegate();使用库来进行加密和数据库使用tomcat-dbcp.jar。
在Tomcat context.xml中使用加密的用户名和密码。
另外,在accessToUnderlyingConnectionAllowed=true文件中使用context.xml。
问题在于JAVA8和Tomcat8。能够正确处理普通凭据,唯一的问题发生在加密凭据上。
发布于 2019-10-04 09:13:16
你不应该做铸造或拆开。在Tomcat 'conf/context.xml‘文件中使用正确的DataSource类型。对于甲骨文来说,它是: oracle.jdbc.pool.OracleDataSource。还设置正确的驱动器和工厂。看看我的例子:
<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代码中,请像这样使用它(不要强制转换):
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’字段。
发布于 2020-07-19 12:06:15
我也面临着同样的问题。经过大量的分析发现,这是类加载问题。通过在shared.loaded ( conf/catalina.properties)中提供ojdbc解决了这个问题
shared.loader="/path/to/ojdbcN_jar/ojdbcN.jar"这将确保从Tomcat和已部署的webapp中的同一个jar加载OracleConnection类。
在需要OracleConnection的应用程序中,请使用以下内容:
OracleConnection oracleConnection = connection.unwrap(OracleConnection.class);注意:在我的应用程序中,我有ojdbc jar,以便我的应用程序能够很好地编译,但是在部署时,使用的jar将是共享加载程序中提到的jar。
还不要忘记在创建Tomcat连接池时启用accessToUnderlyingConnectionAllowed。
https://stackoverflow.com/questions/52161264
复制相似问题