[
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() );