2011-04-23 60 views
1

我是Java的新手,並且正在使用公共交通Java應用程序作爲第一個小型項目。確保相同的對象不是從Java中的XML API加載兩次

我通過XML API負載在從服務器傳輸的數據(使用XML DOM API)。所以,當你調用BusStop(int id)的構造函數時,構造函數根據提供的id從服務器加載有關該Stop的信息。所以,我想知道一些事情:我如何確保我不使用相同的id實例化兩個BusStop對象(我只想爲每個BusStop使用一個對象)?

也沒有人有關於如何加載對象的建議,所以我不需要每次運行應用程序時都加載整個數據庫,只需要BusStop以及相應的到達和BusTrips對象即可停止?我已經做了C++和MVC PHP編程以前,但還沒有經歷過裝載大量物品的圓形對象引用等

謝謝!

回答

1

我不會在構造函數中啓動下載/反序列化過程。我會爲每個實體類型編寫一個管理器類,並使用一種方法根據ID爲給定實體獲取Java對象。使用密鑰類型爲HashMap的實體標識和值類型作爲該對象的Java類。經理將是一個使用你的首選模式的單身人士(爲簡單起見,我可能會使用靜態成員)。

的獲取方法應該做的第一件事情是查地圖,看它是否包含給定ID的條目。如果它已經獲取並構建這個對象,則返回它。如果沒有,從遠程服務中獲取實體,適當地反序列化對象,使用指定的ID將它加載到HashMap中,並返回它。

關於到其他對象的引用,我建議你代表那些作爲ID。在你的Java對象,而不是將它們存儲爲Java對象的引用,並在同一時間作爲參考對象反序列化它們。應用程序可以通過相關經理懶惰地實例化這些對象。這通過循環引用減少了問題。

如果數據量可能超過您JVM可用的RAM你需要定期考慮從地圖上刪除舊對象恢復內存(信心,他們將被要求重新加載時)。

+0

非常有用的答案的人對Java!非常感謝:D – Russell 2011-04-23 21:43:53

+0

很高興提供幫助。祝您的程序好運。 – 2011-04-23 22:28:21

0

對於要每個給定的ID只有一次加載,使用某種類型的工廠設計模式的類。在內部,你可能想要在地圖中存儲id到實例的映射。在實際從服務器獲取數據之前,首先在該地圖上查看是否已經爲此ID加載了一個類。如果不是,那麼繼續提取並更新地圖。

1

對於此應用程序,我將使用以下Java EE技術:JAX-RS,JPA和JAXB。幾乎所有Java應用程序服務器都會包含這些技術(即GlassFish)。

JPA - Java持久性API

提供了從數據庫轉換你的對象/的簡單方法。通過註釋,您可以將關係標記爲懶惰,以防止讀取整個數據庫。也通過使用緩存數據庫訪問和對象創建減少。

JAXB - Java體系XML綁定

提供從XML轉換的對象/的簡單方法。一個實現包含在Java SE 6

JAX-RS - Java API來RESTful服務

提供一個簡單的API(通過HTTP),用於與XML的交互。

你可以看看我貼到我的博客爲例:

+0

這看起來有點矯枉過正,因爲我現在正在努力工作,但是謝謝你的出色答案!我相信它對未來和其他人都有用。 – Russell 2011-04-23 21:31:53

+0

@Russell - 聽起來好像過火了,但實際上它只是幾個課程中的一些註釋。 – 2011-04-23 22:55:55

相關問題