我正在将GWT应用程序集成到具有不同bundle的OSGi环境中。说实话,我不是图形用户界面和GWT开发的专家,所以,也许我正在尝试做任何不可能的事情。在OSGi环境中,我正在使用事件通信过程。通过这种方式,GWT项目基于Hibernate将事件发送到数据库通信器包。然后,数据库连接器响应另一个事件,其属性包含一个与对象列表相关的事件,如下所示:
List<KpiDesc> lKPIs = (List<KpiDesc>)event.getProperty("KPIlist");
此列表包含类型为com.cartif.hibernatemappings.KpiDesc的对象。但是,这个包是数据库连接器的内部,如果我尝试在GWT的客户端使用它,我会收到错误。试图解决它,我已经在GWT项目的共享包中复制了相同的对象,以避免编译错误,我想将一个对象转换为另一个。下面是代码:
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)
您没有提到创建新共享对象的位置。您应该在可以访问内部类的持久层中创建它们。然后,您应该使用共享类发送事件。这样它应该可以工作。
答案 1 :(得分: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的新对象。
我希望这也可以帮助那些尝试同样麻烦的人。