簡體   English   中英

EJB-將數據發送到遠程

[英]EJB - Send Data to remote

我想在兩個應用程序JEE6 / JSF2.0之間交換數據,我正在尋找最佳解決方案。 我想到了以下解決方案:

  • 通過使用JSON文件。
  • 通過使用XML文件。
  • 通過使用GSON文件。
  • 通過使用遠程接口(EJB 3.0)。

對您來說,最佳的解決方案是什么?

編輯:這兩個應用程序將始終在同一網絡上運行(但不能在同一JVM上)

我想提供一種替代David答案的方法,因為我認為RMI有一些缺點,他沒有充分利用。

  1. 這是Java特定的技術。 如果需要引入第三台服務器,例如它是Microsoft Reporting Services服務器,則它不能使用相同的語言進行通話。

  2. RMI是一種過時的技術,在CV上看起來並不是特別好。 Web服務是未來。 有經驗的RMI開發人員比有經驗的Web服務開發人員更為罕見。

  3. 繁瑣而沉重的框架

我認為更好的解決方案是使用基於SOAP XML的Web服務。 這種方法有一些優點:

  1. 幾乎在任何開發框架中都被普遍接受。 無論采用哪種技術,幾乎所有人都具有與Web服務交互的有用庫。

  2. Java對將對象序列化為XML有很好的支持。 這意味着可以將對象快速序列化為SOAP XML請求,發送給其他服務器,然后由其他應用程序服務器反序列化為Java對象進行處理。

  3. 服務層可以像RMI一樣為您提供兩個應用程序之間的解耦接口。

希望您重新考慮在應用程序中使用基於SOAP XML的Web服務。

正如您自己所說的,有兩種選擇。

使用RMI連接到EJB或使用Web服務並通過JSON / XML等進行通信...

根據我的經驗,如果您的應用程序位於同一網絡上,則RMI可能會很有利,否則,您可能會遇到防火牆等問題,並被迫使用HTTPS隧道傳輸RMI ...這幾乎使RMI調用了網絡服務調用。

如果您使用的是兩台不同的計算機,那么Web服務就不錯了,因為它們不會給防火牆造成太多麻煩。 同樣,由於他們使用HTTP協議,因此您不必擔心正在傳輸的數據。

這些示例有些籠統,但應該可以使您有所了解。

GSON vs XML vs JSON是一個完全不同的主題... Non優於其他,而且人眼都可以輕松閱讀所有內容。

更新從我了解的內容來看,您不必擔心防火牆,因此,我建議您使用RMI。 通常,它可以使代碼更簡潔,性能也更好。

既然我已經看到了兩者的實際應用,那么我可以在EJB和WebServices這兩種技術之間進行比較。 我可以確認EJB效率更高,支持事務(包括分布式事務,如果需要的話),異常處理和開箱即用的二進制流。 在性能方面,EJB的速度可能比SOAP高出5倍,而REST大約是SOAP的3倍。

但是,EJB不是集成技術。 實際上,它從未想過這樣做。 EJB的最大缺陷是它與Java平台非常耦合。 因此,兩個端點都必須用Java編寫並且應使用相同的Java EE版本。

另一個問題是EJB本身不是協議,因此來自兩個容器/供應商的實現可能有所不同。 如果需要從Oracle WebLogic服務器上的JBoss AS訪問遠程EJB,則必須隨身攜帶JBoss EJB客戶端實現。

與EJB集成相關的另一個大問題是缺乏數據交換格式。 由於它使用Java序列化對象進行通信,因此數據類型必須在兩端共享。 如果您在分類為應用程序異常的服務器上創建新的異常類型,則使用此服務的客戶端觸發該異常時,其代碼將中斷。 請注意,在這種情況下,不會違反遠程API,但是引入了另一個未知類型。

而且,當然,通過僅依賴於類類型作為交換格式,就為程序員提供了做非常愚蠢的事情的機會。 如果您在使用EJB作為集成技術(使用不同版本的Java EE)的大型項目中擁有許多不同的團隊,請做好充分的准備。 我似乎是一個程序員,包括在客戶端上的JPA實體,該實體使用命名查詢,正在訪問的表,其列等進行注釋,實質上是將所有數據庫布局分配給了服務使用者。 但情況可能更糟。 我似乎已經在程序員返回屬於依賴項的數據結構,即Eclipselink 1.0。 但是,如果您從JBoss服務器訪問它,則Eclipselink也是JPA實現技術,它與JBoss的休眠狀態沖突。 因此,現在您必須在JBoss APP類路徑中包含Eclipselink jar,並配置該容器以不加載與JPA相關的軟件包,否則將完全破壞您的應用程序。 即使這樣,它也可以比以前得到WORSE:需要連接的其他一些服務也有使用相同數據結構的好主意,但是從Eclipselink 1.1.1開始,它具有不同的實現,但是具有相同的類簽名。 現在您的處境非常糟糕。

最重要的是:永遠不要將EJB用作集成技術。 使用基於合同優先的方法的SOAP,在該方法中,您可以為應用程序定義規范的數據模型,將Java數據結構映射為XML交換格式,該格式可以由任何客戶端使用,無論是以任何語言編寫還是使用不同的堆棧編寫。 或使用HATEOAS原理使用REST實現基於資源的資源。 這些天來,我似乎幾乎根本就沒有使用EJB的理由,因為CDI現在已經上市,它支持EJB所具有的許多功能,並且不包括任何與RPC相關的技術。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM