Ich habe d mal eine Grundsatzfrage zum Thema Vaadin. Eine Vaadin-UI ist ja eigentich ein Servlet, d. h. Ein Code, der Serverseitig immer wieder ausgeführt werden kann, wie ein Applet, der aber an eine Session gebunden ist und, da es sich dabei nicht um ein POJO im klassischen Sinne handelt, per se stateless ist (alle „States“, wenn ich das richtig verstanden habe, bekommt ein Servlet ja durch seine Ausführung als Servlet).
Nun habe ich folgendes Problem. Ich habe eine VaadinUI als Chatapplikation geschrieben, und derjenige, der Chattet, erzeugt beim Chatten einen String, den ich als „BroadcastEvent“ vermittels eines EventBusses posten will, sodass die Nachricht eben bevördert wird.
Nun betrifft meine Frage eigentlich das MessageEvent – es handelt sich dabei um ein POJO mit einer statischen ArrayList, die dann die Messages bekommt, und wenn dann das MessageEvent gepostet wird und es sich bei dem Adressaten der Nachricht tatsächlich um den CurrentUser handelt (mit getCurrentUser() kann ich mir ja den CurrentUser der Session ausgeben lassen), dann habe ich vor, die Nachricht in das Chatfenster der UI zu setzen und hernach aus der statischen ArrayList des MessageEvent-POJOS zu löschen (einfach durch Aufruf einer Methode).
Verzeiht bitte, wenn die Frage, die ich nun zu guter Letzt stelle, derart global ist, aber – macht das alles Sinn (aso wie ich das erledigen will)?
Hier der Code fürs POJO:
Nun habe ich folgendes Problem. Ich habe eine VaadinUI als Chatapplikation geschrieben, und derjenige, der Chattet, erzeugt beim Chatten einen String, den ich als „BroadcastEvent“ vermittels eines EventBusses posten will, sodass die Nachricht eben bevördert wird.
Java:
private void write(String towrite){
MessageEvent me = MessageEvent.getInstance();
EventBroadcastEvent ebe = new EventBroadcastEvent();
ebe.setMsg(towrite);
EventBusFactory.getEventBusInstance().post(ebe);
//...
}
}
Nun betrifft meine Frage eigentlich das MessageEvent – es handelt sich dabei um ein POJO mit einer statischen ArrayList, die dann die Messages bekommt, und wenn dann das MessageEvent gepostet wird und es sich bei dem Adressaten der Nachricht tatsächlich um den CurrentUser handelt (mit getCurrentUser() kann ich mir ja den CurrentUser der Session ausgeben lassen), dann habe ich vor, die Nachricht in das Chatfenster der UI zu setzen und hernach aus der statischen ArrayList des MessageEvent-POJOS zu löschen (einfach durch Aufruf einer Methode).
Verzeiht bitte, wenn die Frage, die ich nun zu guter Letzt stelle, derart global ist, aber – macht das alles Sinn (aso wie ich das erledigen will)?
Hier der Code fürs POJO:
Java:
package ….
import java.util.ArrayList;
import com.google.common.eventbus.Subscribe;
import com.vaadin.ui.Notification;
import dispatch.EventBroadcastEvent;
import dispatch.EventBusFactory;
public class MessageEvent {
private static ArrayList<String> mMessage = new ArrayList<String>();
private static final MessageEvent instance;
static {
try {
instance = new MessageEvent();
} catch (Exception e) {
throw new RuntimeException("Darn, an error occurred!", e);
}
}
public static MessageEvent getInstance() {
return instance;
}
private MessageEvent() {
EventBusFactory.getEventBusInstance().register(this);
}
public void setMessage(String msg){
mMessage.add(msg);
}
public ArrayList<String> getMessage(){
return mMessage;
}
@Subscribe
public void readIncomingMessages(EventBroadcastEvent ebe){
setMessage(ebe.getMsg());
}
}