package org.sdif4j.cdi;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* CDI InjectContext implementation
*
* @author Sergey Chernov
*/
@Singleton
@javax.enterprise.inject.Default
public class CdiInjectContext extends AbstractCdiInjectContext {
private final BeanManager beanManager;
private final CreationalContext creationalContext;
@Inject
protected CdiInjectContext(BeanManager beanManager) {
this.beanManager = beanManager;
this.creationalContext = beanManager.createCreationalContext(null);
}
@Override
protected BeanManager getBeanManager() throws RuntimeException {
return beanManager;
}
@Override
protected CreationalContext getCreationalContext() {
return creationalContext;
}
public static BeanManager lookupBeanManager() {
final InitialContext initialContext;
try {
initialContext = new InitialContext();
} catch (NamingException e) {
throw new RuntimeException(e);
}
try {
// Standard
return (BeanManager) initialContext.lookup("java:comp/BeanManager");
} catch (NamingException e) {
try {
// Servlet
return (BeanManager) initialContext.lookup("java:comp/env/BeanManager");
} catch (NamingException e1) {
try {
// Workaround for WELDINT-19
return (BeanManager) initialContext.lookup("java:app/BeanManager");
} catch (NamingException e2) {
try {
// JBoss
return (BeanManager) initialContext.lookup("BeanManager");
} catch (NamingException e3) {
throw new RuntimeException("Failed to lookup BeanManager");
}
}
}
}
}
}