2010-05-10 5 views
5

Ich habe eine Feder/jdbc/Oracle 10g-Anwendung. Die Zeitzone der Oracle-Server-Datenbank ist auf GMT + 2 eingestellt. Die JVM-Zeitzone ist GMT + 2 (obwohl das in meinem Fall keine Rolle spielt).Einstellung Sitzung Zeitzone mit Frühling jdbc Orakel

Ich habe eine gespeicherte Prozedur, die einige Datumsoperationen ausführt. Das Problem ist, dass die Sitzungs-Zeitzone (GMT) anders als die Datenbank-Zeitzone ist, obwohl ich die Sitzungszeitzone in meinem Code/meiner Konfiguration nicht explizit festlege.

Soweit ich weiß, ist die Sitzungszeitzone standardmäßig gleich der Datenbank-Zeitzone. Irgendeine Idee warum ist die SitzungsZeitzone anders als Datenbank Zeitzone oder wie kann ich es in Frühlingskonfiguration (org.apache.commons.dbcp.BasicDataSource) konfigurieren?

Vielen Dank.

+1

Welche Sitzung meinen Sie? Oracle-Verbindungssitzung oder HTTP-Sitzung? Ersteres, nehme ich an? – skaffman

+0

Das löst dein Problem? Ich muss dasselbe für MySQL tun und ich bin immer noch auf der Suche nach der richtigen Vorgehensweise! –

+0

Ich habe Fragen/Beiträge, die in diesem DEAD-Modus bleiben !! Keine Antworten, keine Bestätigungen, keine Spekulationen !! –

Antwort

6

Der korrekte Weg besteht darin, DelegatingDataSource zu verwenden, OracleConnection Objekt aus der ursprünglichen Datenquelle abzurufen und OracleConnection.setSessionTimeZone() mit dem entsprechenden Parameter aufzurufen.

C3P0 Code wie folgt aussieht:

private Object[] timeZoneArgs = new Object[] { "Europe/Berlin" }; 

@Override 
public Connection getConnection() throws SQLException { 
    Connection conn = super.getConnection(); 
    try { 
     final Method setSessionTimeZoneMethod = OracleConnection.class.getMethod("setSessionTimeZone", String.class); 
     final C3P0ProxyConnection castCon = (C3P0ProxyConnection) conn; 
     castCon.rawConnectionOperation(setSessionTimeZoneMethod, C3P0ProxyConnection.RAW_CONNECTION, timeZoneArgs); 
     return conn; 
    } catch (Exception e) { 
     log.error("setSessionTimeZone failed " + e.getMessage()); 
     return conn; 
    } 
} 
1

ich dieses Problem gelöst, indem Oracle JDBC-Treiber von v10.2.0.1.0 zu v11.2.0.3 aktualisieren. Es waren keine Änderungen an meinem Java-Code erforderlich.

Quelle: Spring forums.

Verwandte Themen