2017-07-19 38 views
0

mysqlデータベースに接続すると、WebアプリケーションがMysqlDataDatasourceを取得しようとしています。私のアプリケーションはApache Tomcat 8.5 Webサーバーでホストされています。ここでTomcat BasicDataSourceからMysqlDatasourceを取得しようとするとClassCastExceptionが発生する

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource 
cannot be cast to com.mysql.jdbc.jdbc2.optional.MysqlDataSource 

はキャストが失敗している行です:

MysqlDatasource mysql_datasource = 
    (MysqlDataSource) context.lookup("java:/comp/env/jdbc/MySQLDataSource"); 

これは私のcontext.xmlである私は私のをcontext.lookupからキャストしようとすると、それはこのClassCastExceptionがスローしかし

構成:

<Resource name="jdbc/MySQLDataSource" auth="Container" type="javax.sql.DataSource" 
    username="root" password="password" maxTotal="100" maxIdle="30" maxWaitMillis="10000" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/pododdle"/> 

このweb.xmlの構成:

<resource-ref> 
    <description>Pododdle DB Connection</description> 
    <res-ref-name>jdbc/MySQLDataSource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

誰もが、問題はここにあるものを知って、そしてどのように私はこのすべての重要かつ最もとらえどころのないcom.mysql.jdbc.jdbc2.optional.MysqlDataSourceに私の手を得ることができますか?すべての助けを非常に感謝!

PS:以前、私はGlassFishの4サーバー上で自分のアプリケーションをホストしていたし、次のコードは、MysqlDatasourceを取得するために使用されました:

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

答えて

2

tomcat8コンテキストについてのいくつかのドキュメントがあります。風袋はデフォルトでApache Commons DBCPプールを使用します。

したがって、context.lookup("jdbc/MySQLDataSource")をtomcatに呼び出すと、デフォルトでBasicDataSourceが返されます。これはMysqlDataSourceに直接キャストできません。あなたがMysqlDataSourceを取得したい場合は仕事だろう

(名/パスワード/ URLをコピーするためのメソッドを追加...あなたにデータソースとのnewInstanceそれをターゲット)4myselfが

void yourmethod(){ 
    //... 
    BasicDataSource ds = (BasicDataSource)context.lookup("jdbc/MySQLDataSource"); 
    MysqlDataSource mysqlDs = unwrap(ds); 
    //... 
} 

protected MysqlDataSource unwrap(BasicDataSource ds){ 
    MysqlDataSource mysqlDs = new MysqlDataSource(); 
    mysqlDs.setUser(ds.getUsername()); 
    mysqlDs.setPassword(ds.getPassword()); 
    mysqlDs.setURL(ds.getUrl()); 
    // copy more properties 
    return mysqlDs; 
} 
+0

乾杯 - 。以前を削除しましたすぐに解決された問題についてコメントしてください。百万こんにちは!トム –

関連する問題