最終,你在這個例子裡見到了Cabin實體的創建過程。我們使用Java的new()操作符為Cabin bean class的一個實例分配內存。這裡沒有什麼玄妙之處:客戶端在本地為Cabin bean實例初始化成員屬性。Cabin實體的id、name、deckLevel、shipId和bedCount設置如下:
Cabin cabin_1 = new Cabin( );
Cabin_1.setId(1);
cabin_1.setName("Master Suite");
cabin_1.setDeckLevel(1);
cabin_1.setShipId(1);
cabin_1.setBedCount(3);
當在客戶端為Cabin實體分配內存時,它並沒有被存入數據庫。你必須將實例傳給TravelAgent EJB,當EntityManager.persist()方法被調用時,實體就被存入數據庫了。
圖4-3展示了我們創建的關系數據庫表在上述代碼執行完畢後的情況。表中應該包含一行記錄。
圖4-3:帶有一行船艙記錄的CABIN表
客戶端通過將主鍵傳給TravelAgentRemote的findCabin()方法來定位Cabin entity bean。正如你先前所見的,為了從數據庫中查找bean,該session bean與EntityManager服務進行交互。TravelAgent傳回一個帶主鍵的Cabin實例。這是有可能的,因為我們定義了Cabin bean class來實現java.io.Serializable接口,這允許我們對Cabin bean實例進行列集(marshaled),並通過網絡將其傳回客戶端。現在,我們可以在本地查詢Cabin bean實例,獲取Cabin實體的name、deckLevel、shipId及bedCount。
Cabin cabin_2 = dao.findCabin(1);
System.out.println(cabin_2.getName( ));
System.out.println(cabin_2.getDeckLevel( ));
System.out.println(cabin_2.getShipId( ));
System.out.println(cabin_2.getBedCount( ));
我們已經為建立和運行客戶端應用程序做好了准備。編譯客戶端應用代碼,並將Cabin實體部署到容器系統中,然後運行客戶端應用。輸出應當如下所示。
Master Suite
1
1
3
恭喜你!你已經建立並運行了第一個stateless session bean和entity bean。當然,客戶端應用程序並未做很多事情,但這是學習如何實現EJB和實體的一個良好開始。