2015-04-22 63 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事件。我的问题是如何使用这些对象,或者至少是如何施放它们。非常感谢你 –

相关问题