尝试将GWT集成到OSGi包中

时间:2011-05-15 19:35:05

标签: java gwt osgi gwt-rpc equinox

我正在尝试将GWT与OSGi(Equinox)集成,以便为我的模块化系统的其余部分提供基于Web的UI。到目前为止,我已经设法将GWT servlet嵌入到OSGi模块中。

我正在使用Eclipse GWT插件生成的GWT示例代码项目,该插件由3个包组成:客户端,服务器和共享。服务器包中的类(ui.server.GreetingServiceImpl)实现客户端包(ui.client.GreetingService)中的接口,并且它们都在同一个包中。

当我尝试从客户端网页进行远程过程调用时,我收到错误:

IncompatibleRemoteServiceException: Could not locate requested interface 'ui.client.GreetingService' in default classloader

我认为类加载器找不到类,但我不知道如何解决这个问题。我可以通过要求或导入类来访问其他包中的类,但不能访问与实现类在同一个包中的接口。有人能指出我正确的方向吗?我一直在谷歌搜索几个小时。

2 个答案:

答案 0 :(得分:2)

需要在GreetingServiceImpl上覆盖来自HttpServlet的方法'service':

@Override 
protected void service(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 
    // Cache the current thread 
    Thread currentThread = Thread.currentThread(); 
    // We are going to swap the class loader 
    ClassLoader oldContextClassLoader = 
    currentThread.getContextClassLoader(); 
    currentThread.setContextClassLoader(this.getClass().getClassLoader()); 
    super.service(req, resp); 
    currentThread.setContextClassLoader(oldContextClassLoader); 
} 

因此,该应用程序在Equinox上运行!!

答案 1 :(得分:0)

IncompatibleRemoteServiceException意味着来自GUI的RPC调用未找到@RemoteService批注指定的接口。

您可以使用源代码发布项目吗?

BTW你也可以看看这个项目: http://code.google.com/p/gwt-in-osgi/