So che questa è una vecchia questione, ma penso che una soluzione più moderna è quella di utilizzare Guava's Event Bus (concesso non sono sicuro se funzionerà per GWT, ma sia il titolo e tag non dire GWT).
In realtà ho una RabbitMQ simple message container personalizzata che creerà automaticamente i binding della coda e sui messaggi ricevuti verrà quindi inviata a Guava EventBus. È incredibilmente elegante e si adatta perfettamente.
È possibile utilizzare facilmente il framework DI per registrare gli abbonati. Per Spring, creo BeanPostProcessor che registrerà automaticamente i bean con @Subscribe
.
Di seguito è la molla BeanPostProcessor:
package com.snaphop.spring;
import java.lang.reflect.Method;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
@Component
public class EventBusBeanPostProcessor implements BeanPostProcessor {
private EventBus eventBus;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (isApplicable(bean)) {
eventBus.register(bean);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
protected boolean isApplicable(Object bean) {
for(Method m : bean.getClass().getMethods()) {
if (m.isAnnotationPresent(Subscribe.class))
return true;
}
return false;
}
@Autowired
public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
}
}
Sono sicuro che è banale per fare qualcosa di simile in Guice.
fonte
2012-08-16 14:42:27
Puoi guardare qui https://github.com/javaplugs/minibus è un bus di eventi estremamente leggero e semplice. – rumatoest