2015-04-22 68 views
0

我將GWT應用程序集成到具有不同bundle的OSGi環境中。說實話,我並不是圖形用戶界面和GWT開發方面的專家,所以,也許我正在嘗試做任何不可能的事情。在OSGi環境中,我正在使用事件通信過程。通過這種方式,GWT項目將一個事件發送到基於Hibernate的數據庫通信器包。然後,另一個事件,其屬性包含一個如下涉及對象的列表數據庫連接器的響應:管理GWT-OSGi中的不同對象

List<KpiDesc> lKPIs = (List<KpiDesc>)event.getProperty("KPIlist"); 

此列表中包含的對象,其類型爲com.cartif.hibernatemappings.KpiDesc。但是,這個包是數據庫連接器的內部組件,如果我嘗試在GWT的客戶端使用它,則會出現錯誤。試圖解決它,我已經在GWT項目的共享包中複製了相同的對象,以避免編譯錯誤,我想將一個對象投射到另一個對象。對於這樣prupose的代碼是下一個:

List<com.cartif.gui.optimization.shared.KpiDesc> lKPIs2 = new ArrayList<com.cartif.gui.optimization.shared.KpiDesc>(); 
for(int i = 0; i < lKPIs.size(); i++){ 
    lKPIs2.add(new KpiDesc(lKPIs.get(i).getKpiId(), lKPIs.get(i).getName(), lKPIs.get(i).getDescription(),lKPIs.get(i).getDefinition(), lKPIs.get(i).getBuildingName())); 
} 

然而,在創建新對象(調用構造函數),在eventmanager進行代碼代表和沒有響應。你知道我怎麼能管理不同的物體?

非常感謝

+0

如何從服務器返回對象到客戶端?你可以發佈它 –

+0

嗯,我創建了一個HashMap ,其中的鍵是我在內部使用的參數和上述列表。這是來自客戶端的異步調用中的返回類型。我的意思是,onSuccess方法返回對象與此類似。 –

回答

0

最後,我可以設法解決這個問題。它分爲兩個部分:

  • 編譯模式

首先,編譯,我不得不在java的clases是包內創建文件.gwt.xml。該文件看起來像

<module> 
    <source path=""> 
     <include name="**/KpiDesc.java"/> 
    </source> 
</module> 

然後,在GWT項目的.gwt.xml文件,添加以下行:

<inherits name='package.DWHC'/> 

最後但並非最不重要的,我包含在Java項目類將用作GWT項目的構建路徑作爲項目引用。

  • 操作模式

:在上述過程中,我可以編譯項目,然後,利用KpiDesc對象在服務器端。但是,它在客戶端不起作用。因此,從操作角度來看,我不得不在GWT項目的共享包(名稱不同)中創建一個類似的對象,並在服務器端將原始對象從Hibernate映射到GWT的新對象。

我希望這也可以幫助其他人嘗試相同的麻煩。

0

您沒有提到您創建新共享對象的位置。您應該在可以訪問內部類的持久層中創建它們。然後您應該使用共享類發送事件。這樣它應該工作。

+0

對不起,我不瞭解你!如果您提到內部GWT對象,則這些對象位於「共享」包中。或者你的意思是在「DatabaseBundle」中。在這兩個項目中,對象都被複制,我想要的是:1 - 使用「DatabaseBundle」中的對象或2 - 將其翻譯成內部新對象 –

+0

現在我完全困惑了。我知道你有內部類不會被導出的DataBaseBundle和共享類導出。在這種情況下,從databsebundle中的內部類到共享類的映射是非常自然的,因爲只有這個bundles才能訪問內部類以及共享類。 –

+0

對不起,我的錯誤解釋是否導致了混淆:)好吧,這個想法是DB-bundle使用Hibernate,它將檢索一個「Hibernate」對象列表爲基於GWT的GUI接收的OSGi事件。我的問題是如何使用這些對象,或者至少是如何施放它們。非常感謝你 –

相關問題