Verwenden der impliziten Caching-Funktion des Oracle JDBC-Treibers

Ich bin mir ziemlich sicher, dass jemand anderes diese Frage bereits gestellt hat, aber ich konnte trotzdem keine zufriedenstellende Antwort darauf finden. Hier ist also mein Szenario: Ich möchte das implizite Anweisungs-Caching des JDBC-Treibers von Oracle verwenden (hier dokumentiert:http://docs.oracle.com/cd/B28359_01/java.111/b31224/stmtcach.htm#i1072607)

Ich muss die Verbindungen eines JDBC-Pool-Anbieters eines Drittanbieters (genauer gesagt Tomcat JDBC) verwenden und habe dort keine andere Wahl.

Das Problem ist, dass der Weg zum Aktivieren des impliziten Cachings ein zweistufiger Prozess ist (entsprechend der Dokumentation):

1.

Rufen Sie setImplicitCachingEnabled (true) für die Verbindung auf oder rufen Sie OracleDataSource.getConnection mit der auf true festgelegten ImplicitCachingEnabled-Eigenschaft auf. Sie legen ImplicitCachingEnabled fest, indem Sie OracleDataSource.setImplicitCachingEnabled (true) aufrufen.

2.

Zusätzlich zum Aufrufen einer dieser Methoden müssen Sie OracleConnection.setStatementCacheSize für die physische Verbindung aufrufen. Das von Ihnen angegebene Argument gibt die maximale Anzahl von Anweisungen im Cache an. Ein Argument von 0 gibt kein Caching an.

Ich kann mit 1 leben (irgendwie kann ich meinen Pool konfigurieren, um die zu verwendenOracleDataSource als primäre anschlussfabrik und darauf kann ich den einstellenOracleDataSource.setImplicitCachingEnabled(true)). Aber im zweiten Schritt brauche ich schon die Verbindung, um die anzurufensetStatementCacheSize.

Meine Frage ist, ob es eine Möglichkeit gibt, auf der Datenquellenebene einen Standardwert für die anzugebenstatementCacheSize damit ich das abholen kannOracleDataSource Verbindungen, die bereits für das implizite Caching aktiviert sind.

PS: einige verwandte Fragen, die ich hier gefunden habe:Oracle-JDBC-Treiber: impliziter Anweisungscache oder setPoolable (true)?

Update (mögliche Lösung):

Schließlich habe ich das getan:

Erstellt einen nativen Verbindungspool mitoracle.jdbc.pool.OracleDataSource.Erstellt einen Tomcat-JDBC-Verbindungspool mitorg.apache.tomcat.jdbc.pool.DataSource das verwendet die native (siehe die EigenschaftdataSource).Aktiviert über AOP einen Poincut, so dass ich nach der Ausführung von 'execution (public java.sql.Connection oracle.jdbc.pool.OracleDataSource.getConnection ()' das Objekt aufnehme und die gewünschte Einstellung vornehme.

Die Lösung funktioniert hervorragend. Ich bin nur unglücklich, dass ich dafür ein Kesselschild schreiben musste (ich hatte eine einfache Immobilie erwartet).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage