JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java Certification  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 準備SCJD的一些心得 [精華]
systempanic





發文: 216
積分: 4
於 2004-07-27 10:21 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
聲明: 以下只是個人心得經驗,僅供參考,不一定是唯一方法.

本來版上已經許多人考過SCJD,應該輪不到我出來講,但我正在應考中,印象較深,而且所述若有錯誤,已考過SCJD的先進也可幫忙指正,讓我能即時修正 Smile

1.跟SCJD認證相關的書較為大家推薦的是Mehran Habibi, et al所寫的書,個人也是參考這本書,但是光看這本書可能還是會有一大堆的疑問,最重要的解答來源在www.javaranch.com,在這裡可以找到很多有用的"提示".

2.SCJD的題型大致上有四種左右,而每一種又有版本上的小差異(主要是interface的不同),
但是所強調的重點都是類似,亦即: Threading/Locking, RMI/Socket Networking, SWING GUI, MVC Design Pattern.

3.我拿到的題目是UrlyBird 1.3.1,是關於旅館房間訂位問題,題目要求你必須使用原來舊系統的資料庫檔案,然後給你一個DBMain interface,要求你寫Data.java而且必須implements DBMain

4.我第一個碰到的問題是,Habibi書上寫的是使用serialization object來代表data record,每一個record即是一個檔案,但在SCJD試題中你必須使用一個現有的資料檔. 所以我就參考ranch上大部分人的做法,即使用RandomAccessFile(RAF)來讀寫檔案. 檔案格式是前面一段為meta data,後面為一筆接一筆固定長度的資料.

5.所以我就在Data.java中把DBMain.java所定義的所有method,利用RAF給實作出來,但這裡我定義一個Room JavaBean來holding data record的每個欄位. 另外定義一個Hashtable RoomCol來存放所有沒有被delete的Room javabean. 另外定義一個HashSet存放資料檔中被mark為delete的資料編號(record number),因為試題要求必須重複利用被delete的資料空間.

6.我使用ant+junit來幫助我不斷作test & refactoring,並利用java.util.logging package來紀錄輔助debug (SCJD要求不能在提交的程式中使用3rd party library,所以不能使用log4j)

7. 再來是重頭戲threading and locking, 我的題目只需使用server-side lock (沒有client cookie), 但是參考ranch上的討論後發現有兩派做法,一派是把Data實作成singleton,亦即每一個來request的client都給同一個Data instance; 另一派做法是每一個來request的client都給不同的Data instance. 使用singleton的好處是所有client都共用同一個RAF instance,但performance會比較差;使用multiple Data instance的話,也是共用同一個RAF instance,但是必須對RAF synchronized (file level locking). (我使用multiple Data instances,若使用Data Singleton的話,可能在DataAdapter需要對Data object作synchronized)

8. 在我的Data.java中有四個靜態成員(class variable),一個是DataSchema (singleton),一個是lockedRecord Vector,一個是bookings Hashtable,一個是reusableRecNos HashSet; 在Data.java中我利用static block來作一次性初始化; 在DataSchema中存有RAF reference,和一些db metadata info.; lockedRecord是在作logical record locking時用來存放鎖定的record number,這個跟Habibi書上講的是一樣的用法; 在update/delete/create這些方法中,我自訂鎖定順序來鎖定RAF,bookings,reusableRecNos等物件,以避免dead lock.

9.我另定義一個Wrapper for Data object,即DataAdapter,在DataAdapter中使用data.lock/db operation(delete/update/create)/data.unlock順序,但在read/find方法則不使用lock/unlock,即允許dirty read,但可大幅提升performance. 另外在DataAdapter中的方法回傳值/傳入參數,改成Booking Object或是Collection,以符合OO設計(在Data.java中是int[]/String[])

10.完成DataAdapter之後必須用力測試,可spawn一堆thread然後對同一record number作booking/delete動作,觀察log資訊看看是否符合預期

11.網路方面可選擇Socket或RMI,我個人當然選擇較簡單的RMI啦,大致上follow Habibi的書上應可完成,但若是選擇使用multiple Data instances的話可能需要寫一個ConnectionFactory,把這一個ConnectionFactory object bind到rmi registry,然後每一個client request進來時都產生一個新的DataAdapter object給client. (註: DataAdapter和Data的關係是1:1)

12.記得RMI client自RMI server得到的是object interface stubs,不是 implementation stubs, 弄錯了會有ClassCastException.

13. 由於RMI server thread pooling機制有可能會使用同一個thread來服務不同的client,所以在unlock方法中可能需要使用client id來判斷該client是否是之前鎖定同一recNo的client (唉,這是我剛在ranch上發現我沒注意到的....),另外可能還要考慮萬一client當機或網路斷線時如何release locked recNo. 在ranch上有一長篇文章討論(題目是:Single table / Simple Locking - WeakHashMap vs WeakReferences),我打算這兩天就利用這方法來改進我的locking mechanism (done)

14. 再來剩下GUI部分,個人覺得這部分是最簡單的,大致上follow Habibit書上的做法使用MVC pattern,View方面用JTable+AbstractTableModel, Controller負責delegate UI action和Model<->TableModel Conversion,Model則由RMI remote object取得.....

--The End


systempanic edited on 2004-09-18 10:42
reply to postreply to post
NaN
話題樹型展開
人氣 標題 作者 字數 發文時間
22701 [精華] 準備SCJD的一些心得 systempanic 3148 2004-07-27 10:21
17844 Re:準備SCJD的一些心得 gitaman 80 2004-08-04 10:07
18541 Re:準備SCJD的一些心得 systempanic 400 2004-08-04 12:52
16262 Re:準備SCJD的一些心得 gitaman 373 2005-01-04 09:31
15991 Re:準備SCJD的一些心得 systempanic 489 2005-01-04 12:36
15995 Re:準備SCJD的一些心得 gitaman 244 2005-01-04 17:41
15852 Re:準備SCJD的一些心得 systempanic 571 2005-01-04 20:05
15829 Re:準備SCJD的一些心得 gitaman 15 2005-01-05 08:38
5625 Re:準備SCJD的一些心得 LKK388 22 2011-09-09 20:07
6170 Re:準備SCJD的一些心得 ha9016559 246 2011-11-30 00:06
17163 Re:準備SCJD的一些心得 RogerY2k 70 2004-09-16 08:46
16960 Re:準備SCJD的一些心得 EdwardC 915 2004-09-16 15:03
16627 Re:準備SCJD的一些心得 systempanic 611 2004-09-18 12:22
16653 Re:準備SCJD的一些心得 systempanic 493 2004-09-18 10:36
16761 Re:準備SCJD的一些心得 dtaun 33 2004-09-18 21:06
16749 Re:準備SCJD的一些心得 EdwardC 1460 2004-09-18 22:43
16739 Re:準備SCJD的一些心得 systempanic 803 2004-09-18 23:00
16603 Re:準備SCJD的一些心得 gitaman 341 2004-09-20 10:07
16916 Re:準備SCJD的一些心得 systempanic 989 2004-09-20 10:44
13995 Re:準備SCJD的一些心得 cvc 28 2006-08-20 15:12
15709 Re:準備SCJD的一些心得 systempanic 84 2006-10-21 12:27
18797 Re:準備SCJD的一些心得 anc 75 2004-10-13 01:54
16111 Re:準備SCJD的一些心得 systempanic 5102 2004-12-29 23:00
16507 Re:準備SCJD的一些心得 btsai 112 2005-01-01 12:35
» JWorld@TW »  Java Certification

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8