我正在尝试创建一个MysqlDataSource对象以连接到我的数据库。我需要执行此操作,以便可以使用setRewriteBatchedStatements(boolean)方法。

MysqlDataSource mysql mysql = (MysqlDataSource) context.lookup("jdbc/MySQLDataSource");


它引发以下异常:

2015-07-15T14:25:46.078+0100|Severe: java.lang.ClassCastException: com.sun.gjc.spi.jdbc40.DataSource40 cannot be cast to com.mysql.jdbc.jdbc2.optional.MysqlDataSource
at com.pododdle.dao.MySQL.mysql_conn(MySQL.java:30)
at com.pododdle.dao.MySQL.getMySQLConnection(MySQL.java:48)
at com.pododdle.dao.PodcastService.getPodcasts(PodcastService.java:112)
at com.pododdle.resources.FeedResource.getNewEpisodes(FeedResource.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)


以前我使用的是DataSource对象,并且一切工作都非常好,但是我需要设置上述属性,而DataSource对象却不能这样做。先前的代码为:

mysql = (DataSource) context.lookup("jdbc/MySQLDataSource");


我在Glassfish 4 Web服务器上运行代码,并连接到MySQL5.6数据库。

最佳答案

通过执行以下步骤避免了此类classcastexception:

DataSource datasource = (DataSource) context.lookup("jdbc/MySQLDataSource");
MysqlDataSource mysql_datasource = datasource.unwrap(MysqlDataSource.class);


现在,您可以毫无问题地将rewriteBatchedStatements设置为true!

mysql_datasource.setRewriteBatchedStatements(true);
Connection conn = mysql.getConnection();

关于java - MysqlDataSource在Glassfish中引发ClassCastException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31432133/

10-11 00:18