从不同的服务提供gwteventservice的数据

时间:2012-09-06 16:25:02

标签: web-services gwt comet server-push gwt-eventservice

我正在尝试使用gwteventservice将数据从我的服务推送到浏览器,但是我无法通过其他服务从 MyServiceImpl.java 执行此操作。 这是一个情节:我有服务 DifferentService.java 从客户端读取数据。然后我有 MyServiceImpl.java 类,它代表 MyService.java (clasic gwt项目结构)的服务器端。最后我有类 CallEvent.java ,它使用 addEvent 方法将数据发送到监听器(gwteventservice stuff)。当我在 MyServiceImpl.java 中实例化 CallEvent 类并调用正确的方法( addEvent )时,会成功将消息传递给侦听器。当我从 DifferentService.java 类调用相同的代码时,没有任何事情发生(没有消息传递给侦听器)。 我认为这是一种经典情况,需要使用gwteventservice将数据从某个数据提供者发送到客户端。 你能帮我找个问题吗?您在这种情况下使用哪种解决方案或方法? 以下是用于数据传递的代码片段。

MsgEvent.java(代表携带数据的消息 - gwteventstuff)

public class MsgEvent implements Event {

    public static final Domain SERVER_MESSAGE_DOMAIN = DomainFactory.getDomain("my_domain");
    public String message;

    public MsgEvent(){}

    public MsgEvent(String message) {
            this.setMessage(message);
    }

    public String getMessage() {
            return message;
    }

    public void setMessage(String message) {
            this.message = message;
    }
}

CallEvent.java(gwteventstuff)

public class CallEvent extends RemoteEventServiceServlet{
    public void SendData(String data){
           //create the event
           Event theEvent = new MsgEvent("DagaMsg");
           //add the event, so clients can receive it
           addEvent(MsgEvent.SERVER_MESSAGE_DOMAIN, theEvent);
}
}

DifferentService.java

 public class DifferentService{
 ...
 //Reading string data from client
 CallEvent ce = new CallEvent();
 ce.SendData(stringData);        //this code delivers nothing to a listener
 ...
 }

MyServiceImpl.java(gwt stuff)

 public class MyServiceImpl extends RemoteEventServiceServlet implements MyService {
     public void sendMessage(String message) {
          CallEvent ce = new CallEvent();
          ce.SendData("Data");     //this code deliver message succesfully to a listener
     }
 }

web.xml(gwt和gwteventservice stuff)

<web-app>
    <!-- Default page to serve -->
    <welcome-file-list>
         <welcome-file>My.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>MyService</servlet-name>
        <servlet-class>cz.pohanka.my.server.MyServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
         <servlet-name>MyService</servlet-name>
         <url-pattern>/cz.pohanka.my.My/MyService</url-pattern>
    </servlet-mapping>
    <servlet> 
         <servlet-name>EventService</servlet-name> 
         <servlet-class>de.novanic.eventservice.service.EventServiceImpl</servlet-class> 
    </servlet>
    <servlet-mapping>   
         <servlet-name>EventService</servlet-name> 
         <url-pattern>/cz.pohanka.my.My/gwteventservice</url-pattern> 
    </servlet-mapping>
 </web-app>

我希望我把一切都包括在内。 我认为问题可能在web.xml中。 你怎么看。 谢谢。

的Pavel

1 个答案:

答案 0 :(得分:0)

我知道这个问题是几个月前被问到的,但也许它可以帮助别人......

DifferentService中,您无法使用new CallEvent()创建用于发送活动的servlet ...

相反,请使用以下内容:

EventExecutorServiceFactory pushServiceFactory = EventExecutorServiceFactory.getInstance();
EventExecutorService pushService = pushServiceFactory.getEventExecutorService( /* param */);
pushService.addEvent(...);

param替换为HttpServletRequest或客户端ID。