2011-01-17 7 views
1

私は、サーバセッションを管理するためにJDBC持続性を使用する必要があります。今はセッション値(wl_session_valuesに保存されている)を実際のオブジェクトに変換する必要があります。wl_session_values weblogicセッションを非直列化

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(); } 
} 

が、私は結果をデシリアライズしようとするが、私は常にjava.io.StreamCorruptedException: invalid stream header: 73720013を得るとき:私は私のコードを書く怒鳴ります。

ありがとうございました。

答えて

1

これらはプライベートAPIなので、私は離れています。

HttpSessionListenerを実装している問題をthis exampleのように解決できます。

+0

ハイパースパム、実際は私の要件ははるかに複雑です。だから私は前に実装することはありません周りにいくつかの仕事が必要です(それは私がこの質問をする理由です)。私はすべてのセッションデータを取得する必要があり、アプリケーションで利用可能な静的変数に保存し、私はそれをクラスタ環境で無効にすることができます。私はこのアプローチが私の問題を解決できると思います。しかし、まあ、私は別の方法を試しなければならないと思う。 –

+0

HttpSessionEvent.getSession()でセッション参照を取得し、Session.getAttributeNames()、Session.getAttribute()およびSession.invalidate()を使用してすべてのセッションデータを取得し、クラスタ環境で無効にすることができます。 – fglez

+0

ハイスパム、私は別の質問、http://stackoverflow.com/questions/4755323/invalidate-session-at-all-cluster-weblogicを書く。説明が良いかもしれません。 –