package org.jboss.errai.cdi.server; import org.jboss.errai.bus.client.api.Message; import org.jboss.errai.bus.client.api.MessageCallback; import org.jboss.errai.bus.client.api.SubscribeListener; import org.jboss.errai.bus.client.framework.MessageBus; import org.jboss.errai.bus.client.framework.SubscriptionEvent; import org.jboss.errai.cdi.client.CDIProtocol; import org.jboss.errai.cdi.server.events.EventObserverMethod; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Reception; import javax.enterprise.event.TransactionPhase; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.ObserverMethod; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.Set; /** * @author: Filip Rogaczewski */ @ApplicationScoped public class EventSubscriptionListener implements SubscribeListener { private static final Logger log = LoggerFactory.getLogger(EventSubscriptionListener.class); private MessageBus bus; private AfterBeanDiscovery abd; public EventSubscriptionListener(AfterBeanDiscovery abd, MessageBus bus) { this.abd = abd; this.bus = bus; } public void onSubscribe(SubscriptionEvent event) { try { if (event.getSubject().contains("cdi.event:") && !event.getSubject().equals(EventDispatcher.NAME)) { final String className = event.getSubject().substring("cdi.event:".length()); abd.addObserverMethod(new EventObserverMethod(this.getClass().getClassLoader().loadClass(className), bus)); } } catch (Exception e) { throw new RuntimeException(e); } } }