在GWT OSGi中管理不同的对象
我正在使用不同的捆绑包将GWT应用程序集成到OSGi环境中。老实说,我不擅长图形用户界面和GWT开发,所以,也许我正在尝试做任何不可能的事情。在OSGi环境中,我使用事件通信过程。通过这种方式,GWT项目向基于Hibernate的数据库通信器包发送事件。然后,数据库连接器响应另一个事件,其属性包含与对象列表相关的事件,如下所示:在GWT OSGi中管理不同的对象,gwt,osgi,Gwt,Osgi,我正在使用不同的捆绑包将GWT应用程序集成到OSGi环境中。老实说,我不擅长图形用户界面和GWT开发,所以,也许我正在尝试做任何不可能的事情。在OSGi环境中,我使用事件通信过程。通过这种方式,GWT项目向基于Hibernate的数据库通信器包发送事件。然后,数据库连接器响应另一个事件,其属性包含与对象列表相关的事件,如下所示: List<KpiDesc> lKPIs = (List<KpiDesc>)event.getProperty("KPIlist"); List
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中进行委托,并且没有响应。你知道我如何管理不同的对象吗
事先非常感谢您没有提到在何处创建新的共享对象。您应该在持久性层中创建它们,在那里您可以访问内部类。然后,您应该将事件与共享类一起发送。这样应该可以工作。最后,我可以设法解决这个问题。它分为两部分:
- 编译模式
<module>
<source path="">
<include name="**/KpiDesc.java"/>
</source>
</module>
然后,在gwt项目的.gwt.xml文件中,我添加了以下行:
<inherits name='package.DWHC'/>
最后但并非最不重要的一点是,我将包含Java类的项目作为项目参考纳入GWT项目的构建路径中
- 运行方式
我希望这也能帮助其他尝试同样问题的人。您是如何将对象从服务器返回到客户端的?您能发布它吗?好的,我创建了一个HashMap,其中键是我在内部使用的参数和前面提到的列表。这是客户端异步调用中的返回类型。我的意思是,onSuccess方法返回对象与此类似。对不起,我不明白您的意思!如果您提到内部GWT对象,则这些对象位于“共享”包中。或者你的意思是在“数据库包”中。在这两个项目中,对象都是复制的,我想要的是:1-使用“DatabaseBundle”中的对象,或2-将其转换为一个内部新对象现在我完全困惑了。我知道您有内部类,这些类不是由DataBaseBundle导出的,还有共享类是导出的。在这种情况下,在DatabaseBundle中执行从内部类到共享类的映射是很自然的,因为只有这个bundde可以访问内部类和共享类。如果我造成混淆,请原谅我的错误解释:)好的,这个想法是DB bundle使用Hibernate,它检索“Hibernate”列表对象转换为OSGi事件,该事件由GUI基于GWT接收。我的问题是如何利用这些物体,或者至少是如何投射它们。非常感谢您,如果您只想访问持久性实体类,然后导出包中定义它们的相关包,并在需要它们的地方导入包。在hibernate的情况下,您必须确保集合是预取的,因为当您从UI使用对象时,您将在hibernate会话之外访问它们。但是,如果我通过清单导入/导出这些包,我将无法编译GWT项目,因为它需要继承模块。