【问题标题】:Managing different objects in GWT-OSGi在 GWT-OSGi 中管理不同的对象
【发布时间】:2015-04-22 06:02:42
【问题描述】:

我正在将 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 中委托并且没有响应。你知道我可以如何管理不同的对象吗?

提前非常感谢

【问题讨论】:

  • 你是如何将对象从服务器返回给客户端的?你能发布它
  • 好吧,我创建了一个 HashMap,其中的键是我在内部使用的参数和前面提到的 List。这是来自客户端的异步调用中的返回类型。我的意思是,onSuccess 方法的返回对象与此类似。

标签: gwt osgi


【解决方案1】:

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

【讨论】:

  • 对不起,我听不懂你!如果您提到内部 GWT 对象,这些对象都在“共享”包中。或者你的意思是在“DatabaseBundle”中。在这两个项目中,对象都被复制,我想要的是:1 - 使用“DatabaseBundle”中的对象或 2 - 将其转换为内部新对象
  • 现在我完全糊涂了。我知道您有 DataBaseBundle 未导出的内部类和导出的共享类。在这种情况下,将内部类映射到数据库包中的共享类是很自然的,因为只有这个捆绑包可以访问内部类和共享类。
  • 抱歉,如果我造成了混乱,请原谅我的错误解释 :) 好吧,这个想法是 DB-bundle 使用 Hibernate,并将“Hibernate”对象列表检索到 OSGi 事件中,该事件由基于 GWT 的图形用户界面。我的问题是如何使用这些对象,或者至少如何投射它们。非常感谢
  • 如果您只是想访问持久性实体类,则在定义它们的包中导出相关包,然后在需要它们的地方导入包。在休眠的情况下,您必须确保预先获取集合,因为当您使用 UI 中的对象时,您将在休眠会话之外访问它们。
  • 但是,如果我通过清单的方式导入/导出这些包,我无法编译 GWT 项目,因为它需要继承一个模块。
【解决方案2】:

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

  • 编译模式

首先,为了编译,我必须在 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 的新对象。

我希望这也可以帮助其他尝试同样麻烦的人。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多