2017-09-27 1 views
0

Ich versuche, einen "Meta" -API-Endpunkt zu erstellen, der bestimmte nützliche Informationen zur internen Verwendung zurückgibt. Eines der Felder, die ich erhalten möchte, ist eine Datenbank-URL.So melden Sie die JDBC-URL aus dem Kontext

Im Kontext-Datei es wie folgt gegeben:

<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" /> 

ich einige Code (scala) haben, die die Informationen als DataSource Objekt zurück:

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

jedoch nicht herausfinden, ich kann wie man die URL daraus extrahiert. Gibt es eine andere Klasse, auf die ich das Ergebnis anwenden kann?

Ich versuchte, einen BasicDataSource verwenden, aber wenn ich den Endpunkt traf ich die Fehlermeldung: Error: com.sun.proxy.$Proxy0 cannot be cast to org.apache.commons.dbcp.BasicDataSource

Antwort

0

Eine Datenquelle eine JDBC-URL muss nicht immer. Beispielsweise kann es sich um eine treiberspezifische Datenquelle handeln, die direkt Dinge wie Host, Port und Datenbank festlegt, oder es kann eine Datenquelle sein, die einen Verbindungspool bereitstellt und die tatsächliche Datenquelle mit den Verbindungsinformationen umschließt.

Sie könnten überprüfen, ob die Reflektion von Eigenschaften nützliche Informationen liefert, aber meine Vermutung wäre, dass diese durch die Proxy-Klasse abgeschirmt ist und nur die javax.sql.DataSource API verfügbar macht.

Verwandte Themen