Java Jetty上的JNDI数据源查找/关闭问题
我有一个Spring Hibernate webapp,其中HikariCP在Jetty上运行,其基本webapps文件夹中有以下上下文文件: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 用户 用户
/我的服务器
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);
}