Why the hell does Weld need javax.el.ExpressionFactory?
WARNING: failed org.mortbay.jetty.servlet.Context@2f8b5a{/,null}: java.lang.NoClassDefFoundError: javax/el/ExpressionFactory
13.4.2011 3:38:21 org.mortbay.log.Slf4jLog warn
SEVERE: Error starting handlers
java.lang.NoClassDefFoundError: javax/el/ExpressionFactory
at org.jboss.weld.bootstrap.WeldBootstrap.startContainer(WeldBootstrap.java:277)
at org.jboss.weld.environment.servlet.Listener.contextInitialized(Listener.java:174)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:549)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.jboss.jawabot.web.RunInJetty.run(RunInJetty.java:193)
at org.jboss.jawabot.mod.web.WebModuleHook.initModule(WebModuleHook.java:18)
at org.jboss.jawabot.JawaBotApp.initAndStartModules(JawaBotApp.java:106)
at org.jboss.jawabot.JawaBotApp.main(JawaBotApp.java:53)
Caused by: java.lang.ClassNotFoundException: javax.el.ExpressionFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 13 more
Solution:
<dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>2.2</version> </dependency>
WARNING: failed org.mortbay.jetty.servlet.Context@165c7f6{/,null}: java.lang.NoClassDefFoundError: javax/servlet/jsp/JspFactory
13.4.2011 3:50:49 org.mortbay.log.Slf4jLog warn
SEVERE: Error starting handlers
java.lang.NoClassDefFoundError: javax/servlet/jsp/JspFactory
at org.jboss.weld.environment.servlet.Listener.contextInitialized(Listener.java:254)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:549)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.jboss.jawabot.web.RunInJetty.run(RunInJetty.java:193)
at org.jboss.jawabot.mod.web.WebModuleHook.initModule(WebModuleHook.java:18)
at org.jboss.jawabot.JawaBotApp.initAndStartModules(JawaBotApp.java:106)
at org.jboss.jawabot.JawaBotApp.main(JawaBotApp.java:53)
Caused by: java.lang.ClassNotFoundException: javax.servlet.jsp.JspFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 12 more
Solution:
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency>
Good. That moved us to a point when Weld is happy. However, Seam Solder still can't find it's toys in JNDI:
13.4.2011 3:54:16 org.jboss.weld.bootstrap.WeldBootstrap <clinit>
INFO: WELD-000900 1.1.0 (Final)
13.4.2011 3:54:16 org.mortbay.log.Slf4jLog info
INFO: jetty-6.1.26
13.4.2011 3:54:16 org.jboss.weld.bootstrap.WeldBootstrap startContainer
INFO: WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
03:54:16.541 INFO [main] org.jboss.seam.solder.Version Seam Solder 3.0.0.Final (build id: 3.0.0.Final)
13.4.2011 3:54:16 org.jboss.weld.environment.servlet.Listener contextInitialized
INFO: Jetty detected, JSR-299 injection will be available in Servlets and Filters. Injection into Listeners is not supported.
03:54:16.812 INFO [main] org.jboss.seam.solder.core.CoreExtension Preventing class org.jboss.seam.solder.core.VersionLoggerUtil from being installed as bean due to @Veto annotation
03:54:16.986 INFO [main] org.jboss.seam.solder.core.CoreExtension Preventing class org.jboss.seam.solder.resourceLoader.ResourceProvider from being installed as bean due to @Veto annotation
13.4.2011 3:54:17 org.jboss.interceptor.util.InterceptionTypeRegistry <clinit>
WARNING: Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled
13.4.2011 3:54:17 org.jboss.interceptor.util.InterceptionTypeRegistry <clinit>
WARNING: Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled
03:54:17.161 DEBUG [main] org.jboss.seam.solder.bean.defaultbean.DefaultBeanExtension Installing default managed bean Default Bean with types [class javax.el.VariableMapper, class java.lang.Object] and qualifiers [@org.jboss.seam.solder.el.Mapper()]
03:54:17.161 DEBUG [main] org.jboss.seam.solder.bean.defaultbean.DefaultBeanExtension Installing default managed bean Default Bean with types [class javax.el.FunctionMapper, class java.lang.Object] and qualifiers [@org.jboss.seam.solder.el.Mapper()]
13.4.2011 3:54:17 org.mortbay.log.Slf4jLog warn
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)
at org.apache.wicket.protocol.http.ReloadingWicketFilter.init(ReloadingWicketFilter.java:175)
at org.apache.wicket.protocol.http.WicketServlet.init(WicketServlet.java:219)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:736)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.jboss.jawabot.web.RunInJetty.run(RunInJetty.java:193)
at org.jboss.jawabot.mod.web.WebModuleHook.initModule(WebModuleHook.java:18)
at org.jboss.jawabot.JawaBotApp.initAndStartModules(JawaBotApp.java:106)
at org.jboss.jawabot.JawaBotApp.main(JawaBotApp.java:53)
JNDI does not work because when attaching the BeanManager to servlet.Context, inside it works so that the JNDI prefix is context.toString(), thus the whole name is „org.mortbay.jetty.servlet.Context@1a8dfb3{_,null}/__/BeanManager“