關於J2ee的struts結構不能解決的幾個問題

fsz521job發表於2005-12-05
我們的系統是採用J2EE的struts結構開發的mis系統,系統已經基本開發完畢,可是考慮過後發現存在兩個不足之處,可以算是兩個小bug,並且想了幾個解決方案不知可取不可取,請高手多多指教:[@more@]第一:使用者重複登入的問題

關於這個問題我考慮了兩種解決方法:

1:可以使用session來實現,具體的實現可能要用到session的監聽listener,我想這樣是可以實現的(參考所有的偵聽事件都必須在session的監聽這篇文章),我們可以把所有登入的使用者名稱儲存在一個ArrayList中,這樣可以在使用者登入的時候,先判斷ArrayList中是否存在此使用者名稱,if 存在則說明已經登入,else 則還沒有登入,把使用者名稱存在ArrayList中,按照這樣的思路,似乎可以解決重複登入,但是還存在一個問題,那就是如果使用者登入後非正常退出即session沒有銷燬那麼使用者在session-timeout(系統銷燬session的時間)的時間內是不能登入的,可參考session祥解,session祥解中提到session銷燬需要呼叫HttpSession.invalidate();或者是距離上一次收到客戶端傳送的session id時間間隔超過了session的超時設定,在瀏覽器關閉時是不能刪除session的,從這個角度我們考慮,如果使用者關閉瀏覽器後,session還是存在的,即使使用者沒有登入,那麼使用者就要等待很長一段時間才能登入;如何解決這個問題?

2:可以採用資料庫臨時表的方式來解決,但是此方法需要保持資料庫連線的事務會話長期存在,因為臨時表是在事務會話結束的時候銷燬的,採用struts的mvc結構如何保持一個會話或事務在使用者作業系統期間不銷燬?資料庫事務會話的建裡是不是在連線資料庫的時候建裡?是不是隻要保持資料庫的連線就可以?

第二:資料的修改問題

在我們的系統中資料的修改是先查詢到一筆記錄,然後在jsp中顯示出來,修改後再提交,可是這樣不能避免多個人同時在修改這條資料;我們可以使用行鎖的辦法來鎖定這條記錄,即select for update的方式來鎖定這條記錄,可是前提是要把提取資料和修改資料作為同一個事務來處理,但是在struts結構裡面現在採用的是把提取資料和修改資料獨立開來了,如何可以做到把提取資料和修改資料作為同一個事務??是不是和臨時表一樣保持一個連線不斷開就可以啦?應該如何做?

Author:Derek

QQ:122168011

msn:fsz521job@hotmail.com

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/300209/viewspace-811240/,如需轉載,請註明出處,否則將追究法律責任。

相關文章