Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GWT OSGi中管理不同的对象_Gwt_Osgi - Fatal编程技术网

在GWT OSGi中管理不同的对象

在GWT OSGi中管理不同的对象,gwt,osgi,Gwt,Osgi,我正在使用不同的捆绑包将GWT应用程序集成到OSGi环境中。老实说,我不擅长图形用户界面和GWT开发,所以,也许我正在尝试做任何不可能的事情。在OSGi环境中,我使用事件通信过程。通过这种方式,GWT项目向基于Hibernate的数据库通信器包发送事件。然后,数据库连接器响应另一个事件,其属性包含与对象列表相关的事件,如下所示: List<KpiDesc> lKPIs = (List<KpiDesc>)event.getProperty("KPIlist"); List

我正在使用不同的捆绑包将GWT应用程序集成到OSGi环境中。老实说,我不擅长图形用户界面和GWT开发,所以,也许我正在尝试做任何不可能的事情。在OSGi环境中,我使用事件通信过程。通过这种方式,GWT项目向基于Hibernate的数据库通信器包发送事件。然后,数据库连接器响应另一个事件,其属性包含与对象列表相关的事件,如下所示:

List<KpiDesc> lKPIs = (List<KpiDesc>)event.getProperty("KPIlist");
List lKPIs=(List)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()));
}
List lKPIs2=new ArrayList();
对于(int i=0;i
然而,在创建新对象(调用构造函数)时,代码在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的新对象


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

您是如何将对象从服务器返回到客户端的?您能发布它吗?好的,我创建了一个HashMap,其中键是我在内部使用的参数和前面提到的列表。这是客户端异步调用中的返回类型。我的意思是,onSuccess方法返回对象与此类似。对不起,我不明白您的意思!如果您提到内部GWT对象,则这些对象位于“共享”包中。或者你的意思是在“数据库包”中。在这两个项目中,对象都是复制的,我想要的是:1-使用“DatabaseBundle”中的对象,或2-将其转换为一个内部新对象现在我完全困惑了。我知道您有内部类,这些类不是由DataBaseBundle导出的,还有共享类是导出的。在这种情况下,在DatabaseBundle中执行从内部类到共享类的映射是很自然的,因为只有这个bundde可以访问内部类和共享类。如果我造成混淆,请原谅我的错误解释:)好的,这个想法是DB bundle使用Hibernate,它检索“Hibernate”列表对象转换为OSGi事件,该事件由GUI基于GWT接收。我的问题是如何利用这些物体,或者至少是如何投射它们。非常感谢您,如果您只想访问持久性实体类,然后导出包中定义它们的相关包,并在需要它们的地方导入包。在hibernate的情况下,您必须确保集合是预取的,因为当您从UI使用对象时,您将在hibernate会话之外访问它们。但是,如果我通过清单导入/导出这些包,我将无法编译GWT项目,因为它需要继承模块。