2011-01-17 4 views
1

Ich brauche JDBC Persistenz Benutzer für die Verwaltung der Server-Sitzung. und jetzt muss ich den Sitzungswert (gespeichert in wl_session_values) in ein reales Objekt umwandeln. Balg ich meinen Code schreiben:Deserialize wl_session_values ​​Weblogic-Sitzung

try { 
String userName = "root"; 
String password = "****"; 
String url = "jdbc:mysql://localhost:3306/test"; 
Class.forName("com.mysql.jdbc.Driver").newInstance(); 
conn = DriverManager.getConnection(url, userName, password); 

PreparedStatement pstmt = null; 
String query = "select * from wl_servlet_sessions"; 
pstmt = conn.prepareStatement(query); 
ResultSet resultSet = pstmt.executeQuery(); 

while(resultSet.next()){ 
    System.out.println(resultSet.getString("wl_id")); 

    Blob blob = resultSet.getBlob("wl_session_values"); 
    InputStream in = blob.getBinaryStream(); 
    ObjectInputStream ois = new ObjectInputStream(in); 

    Hashtable<Object, Object> hash = (Hashtable)ois.readObject(); 
     for(Map.Entry<Object, Object> newHash : hash.entrySet()){ 
     System.out.println("Key : " + newHash.getKey().toString()); 
     System.out.println("Value : " + newHash.getValue().toString()); 
    } 
} 

} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if (conn != null) { 
    try { 
     conn.close(); 
    } catch (Exception e) { e.printStackTrace(); } 
} 

aber wenn ich versuche, das Ergebnis zu deserialisieren, aber ich bekomme immer java.io.StreamCorruptedException: invalid stream header: 73720013.

danke für jede Hilfe.

Antwort

1

Das sind private APIs, also würde ich bleiben weg.

Sie können Ihr Problem bei der Implementierung Ihres HttpSessionListener wie in this example lösen.

+0

Hallo Antispam, eigentlich ist meine Anforderung viel komplexer. also brauche ich etwas arbeiten um das ich nie zuvor implementieren (deshalb frage ich diese frage). Ich brauche alle Sitzungsdaten und speicherte sie in der statischen Variable, die für die Anwendung verfügbar ist, und ich kann sie in der Cluster-Umgebung ungültig machen. Ich denke, dass dieser Ansatz mein Problem lösen kann. aber gut, ich denke, ich muss einen anderen Weg versuchen. –

+0

Sie können Sitzungsreferenzen mit HttpSessionEvent.getSession() abrufen und dann mit Session.getAttributeNames(), Session.getAttribute() und Session.invalidate() alle Sitzungsdaten abrufen und in einer Clusterumgebung ungültig machen. – fglez

+0

hallo Anti-Spam, schreibe ich eine andere Frage, http://StackOverflow.com/Questions/4755323/invalidate-Session-at-all-Cluster-Weblogic. es könnte besser erklären. –