Hi Morten,
It looks like the JNDI set in your environment is bust. It is not a  
bug in Jersey.
The JNDI API is part of SE 5 and if one looks up an object for a name,  
but the object does not exist then JNDI should throw a  
NamingException. This is why it works fine for me on SE (see the code  
at the end of the email).
The reason why JCDIComponentProviderFactory should be refactored is to  
remove a dependency on the javax.annotations API which would not be  
required in SE environments. It does not use JNDI,  
JCDIComponentProviderFactoryInitializer that creates it uses JNDI and  
if JNDI is behaving correctly the latter should fail gracefully if  
BeanManager cannot be looked up (as should be the case for  
ManagedBeanComponentProviderFactoryInitilizer).
Paul.
public final class ManagedBeanComponentProviderFactoryInitilizer {
     private static final Logger LOGGER = Logger.getLogger(
              
ManagedBeanComponentProviderFactoryInitilizer.class.getName());
     public static void initialize(ResourceConfig rc) {
         try {
             InitialContext ic =  
InitialContextHelper.getInitialContext();
             if (ic == null) {
                 return;
             }
             Object injectionMgr = ic.
                      
lookup("com.sun.enterprise.container.common.spi.util.InjectionManager");
             // Some implementations of InitialContext return null  
instead of
             // throwing NamingException if there is no Object  
associated with
             // the name
             if (injectionMgr == null) {
                 LOGGER.config("The managed beans injection manager  
API is not available. JAX-RS managed beans support is disabled.");
                 return;
             }
             Method createManagedObjectMethod = injectionMgr.getClass().
                     getMethod("createManagedObject",  
java.lang.Class.class);
             Method destroyManagedObjectMethod =  
injectionMgr.getClass().
                     getMethod("destroyManagedObject",  
java.lang.Object.class);
             rc.getSingletons().add(new  
ManagedBeanComponentProviderFactory(
                     injectionMgr, createManagedObjectMethod,  
destroyManagedObjectMethod));
         } catch (NamingException ex) {
             LOGGER.log(Level.CONFIG, "The managed beans injection  
manager API is not available. JAX-RS managed beans support is  
disabled.", ex);
         } catch (NoSuchMethodException ex) {
             LOGGER.log(Level.SEVERE, "The managed beans injection  
manager API does not conform to what is expected. JAX-RS managed beans  
support is disabled.", ex);
         } catch (SecurityException ex) {
             LOGGER.log(Level.SEVERE, "Security issue when configuring  
to use the managed beans injection manager API. JAX-RS managed beans  
support is disabled.", ex);
         } catch (LinkageError ex) {
             LOGGER.log(Level.SEVERE, "Linkage error when configuring  
to use the managed beans injection manager API. JAX-RS managed beans  
support is disabled.", ex);
         }
     }
}
On May 2, 2010, at 1:32 AM, Morten wrote:
> Hi Poul,
>
> I got around to try adapt your example for my app. Unfortunately, it  
> does not seem to work inside my app. The problem seems that it  
> assumes JNDI is present as seen in the stacktrace below... So I  
> guess the JCDIComponentProviderFactory class needs to be refactored  
> as you mentioned to remove all JEE references (i.e. so it works  
> without the EE annotations API and without JNDI). I already created  
> a bug report for the problem last week which I guess we can just add  
> to ?
>
> P.S: Not sure why you don't get this error. Maybe I have diff stuff  
> in my classpath because my app is hybrid JEE and JSEE depending on  
> how or run it ?
>
> ERROR:
> java.lang.NullPointerException
> 	at  
> com 
> .sun 
> .enterprise 
> .naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
> 	at  
> com 
> .sun 
> .enterprise.naming.impl.SerialContext.getProvider(SerialContext.java: 
> 271)
> 	at  
> com 
> .sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java: 
> 430)
> 	at javax.naming.InitialContext.lookup(InitialContext.java:392)
> 	at  
> com 
> .sun 
> .jersey 
> .server 
> .impl 
> .managedbeans 
> .ManagedBeanComponentProviderFactoryInitilizer 
> .initialize(ManagedBeanComponentProviderFactoryInitilizer.java:56)
> 	at  
> com 
> .sun 
> .jersey 
> .spi.container.servlet.WebComponent.configure(WebComponent.java:492)
> 	at com.sun.jersey.spi.container.servlet.ServletContainer 
> $InternalWebComponent.configure(ServletContainer.java:246)
> 	at  
> com 
> .sun 
> .jersey.spi.container.servlet.WebComponent.load(WebComponent.java:520)
> 	at  
> com 
> .sun 
> .jersey.spi.container.servlet.WebComponent.init(WebComponent.java:199)
> 	at  
> com 
> .sun 
> .jersey 
> .spi.container.servlet.ServletContainer.init(ServletContainer.java: 
> 308)
> 	at  
> com 
> .sun 
> .jersey 
> .spi.container.servlet.ServletContainer.init(ServletContainer.java: 
> 471)
> 	at javax.servlet.GenericServlet.init(GenericServlet.java:242)
> 	at  
> com 
> .sun 
> .grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java: 
> 428)
> 	at  
> com 
> .sun 
> .grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java: 
> 367)
> 	at  
> com 
> .sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java: 
> 324)
> 	at  
> com 
> .sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java: 
> 166)
> 	at  
> com 
> .sun 
> .grizzly 
> .tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:180)
> 	at  
> com 
> .sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java: 
> 166)
> 	at  
> com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java: 
> 791)
> 	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java: 
> 693)
> 	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
> 	at  
> com 
> .sun 
> .grizzly 
> .http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
> 	at  
> com 
> .sun 
> .grizzly 
> .DefaultProtocolChain 
> .executeProtocolFilter(DefaultProtocolChain.java:135)
> 	at  
> com 
> .sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java: 
> 102)
> 	at  
> com 
> .sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java: 
> 88)
> 	at  
> com 
> .sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
> 	at  
> com 
> .sun 
> .grizzly 
> .ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
> 	at  
> com 
> .sun 
> .grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
> 	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
> 	at com.sun.grizzly.util.AbstractThreadPool 
> $Worker.doWork(AbstractThreadPool.java:330)
> 	at com.sun.grizzly.util.AbstractThreadPool 
> $Worker.run(AbstractThreadPool.java:309)
> 	at java.lang.Thread.run(Thread.java:637)
>
> --- Den tirs 27/4/10 skrev Paul Sandoz <Paul.Sandoz_at_Sun.COM>: