2017-09-27 4 views
0

私は、内部的に有用な情報を返す「メタ」APIエンドポイントを構築しようとしています。私が得たいフィールドの1つは、データベースのURLです。コンテキストからJDBC URLを報告するには

<Resource name="jdbc/mycon" auth="Container" type="javax.sql.DataSource" 
     removeAbandoned="true" removeAbandonedTimeout="30" maxActive="8" maxIdle="4" maxWait="10000" 
     validationQuery="SELECT SQL_NO_CACHE 1+1" 
     username="u" password="p" driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://my.url.com" /> 

私はいくつかのコード(スカラ)を持っているDataSourceオブジェクトとして情報を返します:

val context = (new InitialContext).lookup("java:/comp/env").asInstanceOf[Context] 
    val dataSource = context.lookup(s"jdbc/mycon").asInstanceOf[DataSource] 

は、しかし、私は把握することはできませんそれは次のように与えられているコンテキストファイルで

これからURLを抽出する方法。私は結果をキャストすることができる別のクラスがありますか?

私はのBasicDataSourceを使用してみましたが、私はエンドポイントを打ったとき、私はエラーメッセージが表示されます:Error: com.sun.proxy.$Proxy0 cannot be cast to org.apache.commons.dbcp.BasicDataSource

答えて

0

データソースは、常にJDBC URLを持っていません。たとえば、ホスト、ポート、データベースなどを直接設定するドライバ固有のデータソースでも、接続プールを提供し、接続情報を持つ実際のデータソースをラップするデータソースでもかまいません。

プロパティの反映によって有用な情報が得られるかどうかを確認できますが、私の推測はプロキシクラスによってシールドされており、javax.sql.DataSourceというAPIしか公開されていないことになります。

関連する問題