2011-08-03 38 views
0

讓我exaplain你完整的情況目前我在堅持。JNDI在.net/PHP/IPhone

我們正在開發GWT和Hibernate非常複雜的應用程序,我們正在試圖主機客戶端和服務器端的代碼由於客戶的要求在不同的服務器上。現在,我可以使用JNDI來實現這一目標。

這裏有棘手的部分,客戶端需要在不同的平臺上具有該應用程序,數據庫將是相同的,方法將是相同的,可以說我們的應用程序的iPhone/.Net版本。我們不想再次生成Server代碼,因爲它對所有人都是一樣的。

我已經嘗試了我的服務器代碼頂部的WebServices包裝,但由於體系結構和類依賴項的複雜性,我無法這樣做。例如,讓我們考慮下面的代碼。

​​

文檔類有用戶列表,訪問級別列表和很多其他類的列表,其他類有更多的列表。一些重要的服務器方法將Class(Document或其他)作爲輸入,並返回其他一些輸出類。我們不應該在WebServices中使用複雜的體系結構。

所以,我需要堅持使用JNDI。現在,我不知道如何訪問任何其他應用程序的JNDI調用?

請建議克服這種情況的方法。我願意接受技術上的改變,這意味着JNDI/WebServices或任何其他可以爲我提供良好服務的技術。

感謝你,

問候,

回答

1

我從未見過用作用於請求/響應的進程間通信機制JNDI。我不相信這將是一個有效的攻擊線。

你相信當有效載荷很複雜時,Web服務是不合適的。我不同意,我看到許多成功的項目使用相當大的有效載荷,並且有許多嵌套類。瑣碎的例子:客戶訂單行與產品與...等等。

明顯需要保持有效載荷的尺寸小,存在序列化和網絡成本,大的物體會更昂貴。但最好有一個大的請求比一個小的很多。一個「繁忙」的界面在網絡上表現不佳。

我懷疑你可能會遇到的一個問題是某些服務器端類不是純數據,它們是指只在服務器上有意義的類,你不希望這些類在你的客戶端。

我這種情況下,你需要建立一個「適配器」層。這是一項沉悶的工作,但無論使用哪種進程間通信技術,您都需要這樣做。您需要將數據傳輸對象(DTO)稱爲數據傳輸對象(DTO) - 它們表示客戶端可以理解的有效負載,僅使用對客戶端合理的類,以及服務器可以使用和創建的類。

讓我們假設你使用技術的XXX(JNDI,Web服務,直接套接字調用,JMS)

Client --- sends Document DTO --XXX---> Adapter transform DTO to server's Document 

,同樣在背面。我的觀點是,無論選擇什麼XXX,都會遇到同樣的問題,您需要客戶端使用「精簡」對象來顯示服務器的任何實現細節。

適配器負責創建和理解DTO。

我發現使用JAX/RS使用REST風格的Web服務非常簡單,一旦您擁有一組DTO,創建Web服務需要幾分鐘的時間。

+0

我同意你指出WebServices,但其複雜的架構在這裏,我們無法創建400到500個班級的每個班級的DTO。我們已經使用JNDI實現了不同服務器之間的通信並且它的工作正常,所以我只是想知道如果我能夠訪問.net/php中的jndi,我的工作將會更容易.... –

+0

迷人...您是否使用JNDI作爲一個「公告板」?如果對象在所有服務器中都有意義,這肯定會起作用。我不清楚這是如何在更嚴格的客戶環境中工作的。無論如何,JNDI和許多其他Java API肯定可以通過JNI從C代碼訪問。我建議看一下像CodeMesh這樣的產品:http://codemesh.com/in_process.html – djna