# Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin)



## Shams (22. Dez 2014)

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.  


```
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:


```
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());
		
	}

	
	
	
}
```


----------



## kaoZ (22. Dez 2014)

Warum eine Statische Liste ? Warum nicht eine Liste für jede aufgebaute Session / jeden User ?



> 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).




Gibt es denn dabei irgendwelche Probleme oder ist die Frage einfach nur ob das so Sinn macht ?


Zudem wäre ich mit sowas hier vorsichtiger :



> public ArrayList<String> getMessage(){
> 
> return mMessage;
> 
> }



lass lieber eine Kopie oder ein element der Liste zurückgeben anstelle der eigentlichen Liste, zwecks der Kapselung.


----------



## Shams (22. Dez 2014)

Danke! Nun ja, das war eigentlich nur eine Verständnisfrage, ob das Sinn macht.


----------

