| // ======================================================================== |
| // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. |
| // ======================================================================== |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| |
| [[framework-weld]] |
| === Weld |
| |
| http://seamframework.org/Weld[Weld] can be used to add support for CDI (Contexts and Dependency Injection) to Servlets, Listeners and Filters. |
| It is easily configured with Jetty 9. |
| |
| [[weld-setup-distro]] |
| ==== Weld Setup |
| |
| The easiest way to configure weld is within the jetty distribution itself: |
| |
| 1. Enable the startup link:#startup-modules[module] called "cdi". |
| 2. Ensure your `WEB-INF/web.xml` contains the following: |
| + |
| [source, xml, subs="{sub-order}"] |
| ---- |
| <listener> |
| <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> |
| </listener> |
| |
| <resource-env-ref> |
| <description>Object factory for the CDI Bean Manager</description> |
| <resource-env-ref-name>BeanManager</resource-env-ref-name> |
| <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> |
| </resource-env-ref> |
| ---- |
| |
| That should be it so when you start up your jetty distribution with the webapp you should see output similar to the following (providing your logging is the default configuration): |
| |
| [source, screen, subs="{sub-order}"] |
| .... |
| 2015-06-18 12:13:54.924:INFO::main: Logging initialized @485ms |
| 2015-06-18 12:13:55.231:INFO:oejs.Server:main: jetty-9.3.1-SNAPSHOT |
| 2015-06-18 12:13:55.264:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///tmp/cdi-demo/webapps/] at interval 1 |
| 2015-06-18 12:13:55.607:WARN:oeja.AnnotationConfiguration:main: ServletContainerInitializers: detected. Class hierarchy: empty |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.environment.servlet.EnhancedListener onStartup |
| INFO: WELD-ENV-001008: Initialize Weld using ServletContainerInitializer |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.bootstrap.WeldStartup <clinit> |
| INFO: WELD-000900: 2.2.9 (Final) |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.environment.servlet.deployment.WebAppBeanArchiveScanner scan |
| WARN: WELD-ENV-001004: Found both WEB-INF/beans.xml and WEB-INF/classes/META-INF/beans.xml. It's not portable to use both locations at the same time. Weld is going to use file:/tmp/jetty-0.0.0.0-8080-cdi-webapp.war-_cdi-webapp-any-8161614308407422636.dir/webapp/WEB-INF/beans.xml. |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.bootstrap.WeldStartup startContainer |
| INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit> |
| WARN: WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled |
| Jun 18, 2015 12:13:55 PM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit> |
| WARN: WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled |
| Jun 18, 2015 12:13:56 PM org.jboss.weld.bootstrap.MissingDependenciesRegistry handleResourceLoadingException |
| Jun 18, 2015 12:13:56 PM org.jboss.weld.environment.servlet.WeldServletLifecycle findContainer |
| INFO: WELD-ENV-001002: Container detection skipped - custom container class loaded: org.jboss.weld.environment.jetty.JettyContainer. |
| Jun 18, 2015 12:13:56 PM org.jboss.weld.environment.jetty.JettyContainer initialize |
| INFO: WELD-ENV-001200: Jetty 7.2+ detected, CDI injection will be available in Servlets and Filters. Injection into Listeners should work on Jetty 9.1.1 and newer. |
| Jun 18, 2015 12:13:56 PM org.jboss.weld.environment.servlet.Listener contextInitialized |
| INFO: WELD-ENV-001006: org.jboss.weld.environment.servlet.EnhancedListener used for ServletContext notifications |
| Jun 18, 2015 12:13:56 PM org.jboss.weld.environment.servlet.EnhancedListener contextInitialized |
| INFO: WELD-ENV-001009: org.jboss.weld.environment.servlet.Listener used for ServletRequest and HttpSession notifications |
| 2015-06-18 12:13:56.535:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@6574b225{/cdi-webapp,file:///tmp/jetty-0.0.0.0-8080-cdi-webapp.war-_cdi-webapp-any-8161614308407422636.dir/webapp/,AVAILABLE}{/cdi-webapp.war} |
| 2015-06-18 12:13:56.554:INFO:oejs.ServerConnector:main: Started ServerConnector@7112f81c{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} |
| 2015-06-18 12:13:56.587:INFO:oejus.SslContextFactory:main: x509={jetty.eclipse.org=jetty} wild={} alias=null for SslContextFactory@3214ee6(file:///tmp/cdi-demo/etc/keystore,file:///tmp/cdi-demo/etc/keystore) |
| 2015-06-18 12:13:56.821:INFO:oejs.ServerConnector:main: Started ServerConnector@69176a9b{SSL,[ssl, http/1.1]}{0.0.0.0:8443} |
| 2015-06-18 12:13:56.822:INFO:oejs.Server:main: Started @2383ms |
| |
| .... |
| |
| For use with the jetty-maven-plugin, the best idea is to make the org.jboss.weld.servlet:weld-servlet artifact a _plugin_ dependency (__not__ a webapp dependency), then follow step 2 above. |