在 GWT-OSGi 中管理不同的对象

Managing different objects in GWT-OSGi

我正在将 GWT 应用程序集成到具有不同包的 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 中委托并没有响应。你知道我如何管理不同的对象吗?

提前致谢

您没有提到在哪里创建新的共享对象。您应该在可以访问内部 类 的持久层中创建它们。然后,您应该使用共享 类 发送事件。这样它应该可以工作。

最后,我设法解决了这个问题。分为两部分:

  • 编译模式

首先,为了编译,我必须在 java 类所在的包中创建文件 .gwt.xml。该文件看起来像

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

然后,在 GWT 项目的 .gwt.xml 文件中,我添加了以下行:

<inherits name='package.DWHC'/>

最后但同样重要的是,我将项目与 Java 类 一起用于 GWT 项目的构建路径中作为项目参考。

  • 运行模式

通过上述过程,我可以编译项目,然后在服务器端使用 KpiDesc 对象。但是,它在客户端不起作用。因此,从操作的角度来看,我不得不在GWT项目的共享包中创建一个类似的对象(名称不同),并在服务器端将原始对象从Hibernate映射到GWT的新对象。

我希望这也能帮助其他遇到同样问题的人。