package org.apache.openwebbeans.environment.osgi; import java.util.Collection; import javax.enterprise.event.Event; import javax.enterprise.inject.Instance; import javax.enterprise.inject.spi.BeanManager; import org.apache.openwebbeans.environment.osgi.integration.OWB; import org.osgi.cdi.api.extension.events.InterBundleEvent; import org.osgi.cdi.api.integration.CDIContainer; import org.osgi.cdi.api.integration.CDIContainers; import org.osgi.cdi.impl.extension.CDIOSGiExtension; import org.osgi.cdi.impl.extension.ExtensionActivator.SentAnnotation; import org.osgi.cdi.impl.extension.ExtensionActivator.SpecificationAnnotation; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceRegistration; /** * * @author Mathieu ANCELIN - SERLI (mathieu.ancelin@serli.com) */ public class OWBCDIContainer implements CDIContainer { private final Bundle bundle; private OWB container; private Collection<ServiceRegistration> registrations; public OWBCDIContainer(Bundle bundle) { this.bundle = bundle; container = new OWB(bundle); } @Override public void setRegistrations(Collection<ServiceRegistration> registrations) { this.registrations = registrations; } @Override public Collection<ServiceRegistration> getRegistrations() { return registrations; } @Override public Bundle getBundle() { return bundle; } @Override public boolean shutdown() { return container.shutdown(); } @Override public void fire(InterBundleEvent event) { Long set = CDIOSGiExtension.currentBundle.get(); CDIOSGiExtension.currentBundle.set(bundle.getBundleId()); container.getEvent().select(InterBundleEvent.class, new SpecificationAnnotation(event.type()), new SentAnnotation()).fire(event); if (set != null) { CDIOSGiExtension.currentBundle.set(set); } else { CDIOSGiExtension.currentBundle.remove(); } } @Override public boolean initialize() { return container.initialize(); } @Override public boolean isStarted() { return container.isStarted(); } @Override public Event getEvent() { return container.getInstance().select(Event.class).get(); } @Override public BeanManager getBeanManager() { return container.getBeanManager(); } @Override public Instance<Object> getInstance() { return container.getInstance(); } @Override public Collection<String> getBeanClasses() { return container.getBeanClasses(); } }