2012-01-20 15 views
20

Nel gwt-user.jar ci sono 2 interfacce EventBus e impianti SimpleEventBus.Quale GWT EventBus dovrei usare?

com.google.gwt.event.shared.EventBus e com.google.web.bindery.event.shared.EventBus Mi riferirò a questi come "gwt.event" e "web.bindery".

Guardando il JavaDocs e il codice sorgente posso vedere che gwt.event racchiude solo quello web.bindery. Tuttavia, l'implementazione gwt.event nasconde anche un certo numero di metodi deprecati

Quindi quale implementazione dovrei usare? (Sono su GWT 2.4)

+1

Ho lo stesso dilemma. Forse, molti altri lo fanno. Ignoro l'advisory deprecato e uso il vecchio pacchetto, perché Google ha creato un casino là fuori. –

risposta

19

In genere è necessario utilizzare quello in com.google.web.bindery. L'unica versione era in com.google.gwt.event, ma quando RequestFactory e AutoBeans venivano spostati fuori da GWT stesso e in com.google.web.bindery in modo che potessero funzionare in client non GWT.

Se si utilizza la versione com.google.web.bindery nei relatori e simili, sarà più semplice utilizzarla al di fuori delle app GWT, nel caso sia necessario. Inoltre, non riceverai avvisi di deprecazione quando passerai quell'istanza a PlaceController e ad altre classi che utilizzano EventBus.

+0

Ah! I client non GWT hanno molto senso. – checketts

+3

Se si utilizzano Attività e Luoghi, Attività nel metodo di avvio richiede un com.google.gwt.event.shared.EventBus –

0

Per rendere la scelta ancora più complessa. Sto usando guava nella mia applicazione GWT e i ragazzi di google hanno aggiunto un altro EventBus lì (anche meno funzionalità completa).

Forse quei ragazzi devono sedersi insieme e definire UNA implementazione per dominarli tutti?

Ovviamente vorrei evitare tutte le dipendenze su GWT per il codice che non è strettamente utilizzato nel codice GWT, quindi quello Guava mi è sembrato interessante.

4

So che questa domanda ha già una risposta, ma potrebbe valerne la pena aggiungendo quanto segue. Come ho già detto nel mio commento sopra, Activity ha ancora bisogno della classe com.google.gwt.event.shared.EventBus. Per evitare avvertimenti ritirate, ho fatto la seguente (io uso GIN):

public class GinClientModule extends AbstractGinModule { 

    @Override 
    protected void configure() { 
     bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class); 
     ... 
    } 

    @Provides 
    @Singleton 
    public com.google.gwt.event.shared.EventBus adjustEventBus(
      EventBus busBindery) { 
     return (com.google.gwt.event.shared.EventBus) busBindery; 
    } 

... 

In questo modo, sarete sempre utilizzando l'oggetto della "nuova" versione di bus evento nel pacchetto bindery.