# Frage wegen guava-Eventbus.



## Shams (31. Mrz 2015)

Ich habe mal eine Frage zu dem guava - Eventbus, interessanterweise kann ich keine Methoden in Vaadinkomponenten (d. h. Vaadinservlets) als Subscriber definieren. Zunächst habe ich hier eine Klasse, also meine Vaadinkomponente.  


```
package com.tsher;

import java.util.ArrayList;

import com.google.common.eventbus.EventBus;
import com.google.gwt.thirdparty.guava.common.eventbus.Subscribe;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.Button.ClickEvent;

import daacc.LgnAccDAOImpl;
import dispatch.EventLogOnEvent;

/**
 * @author sleipnir
 *
 */
public class ChatView extends CustomComponent implements View{
	
	private static final long serialVersionUID = 1L;

	public static final String NAME = "chatview";

	 
	private Button lgoutaction;
	//private MyCommunication;
	private MyOnlineStat onlineStat;
	private MyBuddies theBuddies;

	private ArrayList<String> buddies;
	
	/**
	 * Konstruktor
	 */
	public ChatView() {
		onlineStat = new MyOnlineStat();
		theBuddies = new MyBuddies(createBuddyList());
		createTools();
		setCompositionRoot(createChatLayout());
        
    }
	

/**
 * Die Buddyliste wird geladen.	
 */
private ArrayList<String> createBuddyList(){

	buddies = new ArrayList<String>();
	buddies.add("testuser2");
	
	return buddies;
	
}
	
	
/**
 * Es werden die nötogen Datenstruktiren initialisiert.
 */
private void createTools(){
	
	
	 
	//Logoutbutton
    lgoutaction = new Button("logout");
    lgoutaction.setWidth(180, Unit.PIXELS);
    lgoutaction.addClickListener(new Button.ClickListener() {	    
		private static final long serialVersionUID = 1L;

		public void buttonClick(ClickEvent event) {
			
			String username = (String) UI.getCurrent().getSession().getAttribute("currentUser");
			onlineStat.init((String) UI.getCurrent().getSession().getAttribute("currentUser"), false,theBuddies.getBuddies());
		 
			
	   	     }
		});
    
}

 
	
@SuppressWarnings({ "deprecation", "unchecked" })
private GridLayout createChatLayout(){
	
	final GridLayout gridlayout = new GridLayout(3, 3);
	gridlayout.addStyleName(ThemeStyle.Chatgridlayout);
	gridlayout.setMargin(true);
	gridlayout.addComponent(lgoutaction,0,0);
	
	
	return gridlayout;
}



@Subscribe
public void addLogOnChangedEvent(EventLogOnEvent event){
    //Wenn in den Buddies, die das Event mit sich führt, ich ein Buddy bin, dann muss ich dementsprechend 
	//meine BuddyTabelle oder zumindest den User, der auch im Event steckt, neu laden.  
	System.out.println("arg0");	
}

 

	@Override
	public void enter(ViewChangeEvent event) {
		
		String username = (String) UI.getCurrent().getSession().getAttribute("currentUser");
		onlineStat.init((String) UI.getCurrent().getSession().getAttribute("currentUser"), true,theBuddies.getBuddies());
	    
 		
	}
 
}
```

In der enter-Methode meiner Vaadinkomponente wird die init-Methode der MyOnlineStat-Klasse aufgerufen, und der dort befindliche Eventbus funktioniert wunderbar. Derselbe Eventbus, also der in der MyOnlineStat-Klasse ist, hat aber auch in der ChatView-Klasse einen Subscriber (siehe Zeile 103), und der geht nicht, was ich mit dem Debugger auch schon getestet habe – nur habe ich absolut keine Ahnung, woran das liegen könnte. Hier noch die andere Klasse, also die mit dem Eventbus:


```
package com.tsher;

import java.util.ArrayList;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.vaadin.ui.UI;

import daacc.LgnAccDAOImpl;
import dispatch.EventLogOnEvent;

public class MyOnlineStat {


@Subscribe
public void addLogOnEvent(EventLogOnEvent event){
	
	LgnAccDAOImpl lgn = new LgnAccDAOImpl();
	
	lgn.setOnlineStat(event.getUsername(),event.getStat()); 
	
}
	
public void init(String name,boolean on,ArrayList<String> buddies){

	EventBus eventBus = new EventBus();
	eventBus.register(this);
	
	EventLogOnEvent event = new EventLogOnEvent();
	event.setUserName(name);
	event.setUsersBuddies(buddies);
	event.setStat(on);
	eventBus.post(event);

}


}
```


----------

