Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty上的JNDI数据源查找/关闭问题_Java_Spring_Jetty_Jndi_Hikaricp - Fatal编程技术网

Java Jetty上的JNDI数据源查找/关闭问题

Java Jetty上的JNDI数据源查找/关闭问题,java,spring,jetty,jndi,hikaricp,Java,Spring,Jetty,Jndi,Hikaricp,我有一个Spring Hibernate webapp,其中HikariCP在Jetty上运行,其基本webapps文件夹中有以下上下文文件: /我的服务器 C:\mypath\myServer.war jdbc/myDB 选择1 com.mysql.jdbc.jdbc2.optional.MysqlDataSource 20 30000 用户 密码 网址 jdbc:mysql://localhost/mydb?zeroDateTimeBehavior=convertToNull 用户 用户

我有一个Spring Hibernate webapp,其中HikariCP在Jetty上运行,其基本webapps文件夹中有以下上下文文件:


/我的服务器
C:\mypath\myServer.war
jdbc/myDB
选择1
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
20
30000
用户
密码
网址
jdbc:mysql://localhost/mydb?zeroDateTimeBehavior=convertToNull
用户
用户
密码
密码
高速缓存
真的
预stmtcachesize
250
prepStmtCacheSqlLimit
2048
UseServerPrepsmts
真的
在我的applicationContext.xml文件中,我能够通过以下方式成功查找和使用数据源:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myDB"/>
但是,在尝试将数据源强制转换为HikariDataSource时,我遇到以下异常:

java.lang.ClassCastException:com.zaxxer.hikari.HikariDataSource无法转换为com.zaxxer.hikari.HikariDataSource

我还得到了上面不同的identityhashcode,这让我相信我有两个类加载器,它们分别加载了HikariDataSource类的实例。我们希望数据源特定于webapp的上下文,并在热部署时关闭它。我需要改变什么才能实现这一点

try
{
    initContext = new InitialContext();
    envContext = (Context) initContext.lookup("java:comp/env");
    ds = (DataSource) envContext.lookup("jdbc/myDB");
    if (ds.getConnection() == null)
    {
        throw new RuntimeException("Failed to find the JNDI Datasource");
    }

    logger.info("JNDI HikariDataSource : " + System.identityHashCode(ds.getClass()));
    logger.info("Local HikariDataSource: " + System.identityHashCode(HikariDataSource.class));

    HikariDataSource hds = (HikariDataSource) ds;

    hds.close();

} catch (Exception ex)
{
    logger.log(Level.SEVERE, null, ex);
}