Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] Binding Weld BeanManager to JNDI in servlet.Context // Installing Weld / Seam-Wicket programatically

I am still struggling with $SUBJ.

The problem narrowed down to not being able to bind JNDI to a servlet.Context with context path "/".
All examples show how to work with WebAppContext.
I don't want to use WebAppContext because I don't have a WAR with files, only a servlet class, and Jetty bootstrapped manually.

Inside it works so that the JNDI prefix is context.toString(), thus the whole name is "org.mortbay.jetty.servlet.Context@1a8dfb3{_,null}/__/BeanManager"
which is obviously wrong.

I've tried to put the object to JNDI every way I could think up, even "manually" (see below), but nothing worked. Weld still says,

SEVERE: unavailable
org.jboss.seam.solder.beanManager.BeanManagerUnavailableException: Failed to locate BeanManager using any of these providers: org.jboss.seam.solder.beanManager.DefaultJndiBeanManagerProvider(11), org.jboss.seam.solder.beanManager.ServletContainerJndiBeanManagerProvider(10)
at org.jboss.seam.solder.beanManager.BeanManagerLocator.getBeanManager(BeanManagerLocator.java:91)
at org.jboss.seam.wicket.SeamApplication.internalInit(SeamApplication.java:54)
at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:723)
...

Whole app, as it is now, is here: https://ondrazizka.googlecode.com/svn/trunk/bots/JawaBot/branches/2.0/

Any ideas?
Any examples on how to bind object to Context's JNDI?


Thanks,
Ondra

---------


      Server server = new Server( 8080 );
      Context ctx = new Context( server, "/", Context.NO_SECURITY | Context.SESSIONS );

      // Wicket.
      final ServletHolder wicketSH = new ServletHolder( new MyReloadingWicketServlet() );
      wicketSH.setInitParameter( "applicationClassName", WicketApplication.class.getName() );
      ctx.addServlet( wicketSH, "/*" );

         XmlConfiguration confJettyEnv = new XmlConfiguration( RunInJetty.class.getResourceAsStream("/WEB-INF/jetty-env.xml") );
         confJettyEnv.configure(ctx);
        
        
         javax.naming.Reference ref =
               new javax.naming.Reference(
                  javax.enterprise.inject.spi.BeanManager.class.getName(),
                  //"org.jboss.weld.resources.ManagerObjectFactory",
                  org.jboss.weld.resources.ManagerObjectFactory.class.getName(),
                  null
               );

         //BeanManagerLookup.getBeanManagerJndiName();
         Resource resource = new org.mortbay.jetty.plus.naming.Resource( ctx, "BeanManager", ref );
         EnvEntry envEntry = new org.mortbay.jetty.plus.naming.EnvEntry( ctx, "BeanManager", ref, true );

         InitialContext ic = new InitialContext();
         NameParser parser = ic.getNameParser("");
         //Name prefix = NamingEntryUtil.getNameForScope(scope);
         Name prefix = parser.parse("").add("_");

         //bind the NamingEntry into the context
         Name namingEntryName = NamingEntryUtil.makeNamingEntryName(parser, "BeanManager");
         namingEntryName.addAll(0, prefix);
         String namingEntryNameString = namingEntryName.toString();
         NamingUtil.bind( ic, namingEntryNameString, envEntry );

         //bind the object as well
         Name objectName = parser.parse("BeanManager");
         objectName.addAll(0, prefix);
         String objectNameString = objectName.toString();
         NamingUtil.bind(ic, objectNameString, ref);
         NamingUtil.bind(ic, "BeanManager", ref);
         NamingUtil.bind(ic, "/BeanManager", ref);
         NamingUtil.bind(ic, "env/BeanManager", ref);
         NamingUtil.bind(ic, "/env/BeanManager", ref);
         NamingUtil.bind(ic, "_/BeanManager", ref);
         NamingUtil.bind(ic, "_/env/BeanManager", ref);

         // Add WELD listener by hand.
         ctx.addEventListener( new org.jboss.weld.environment.servlet.Listener() );


Back to the top