There are two ways to use Apache OpenWebBeans with Jetty 9. You can:
-
Exclude the Apache OpenWebBeans implementation from your
.warfile, this is known as a skinny.war -
Include the Apache OpenWebBeans implementation in your
.warfile, this is known as a fat.war
Bundle the Apache OpenWebBeans .jar files in your WEB-INF/lib.
Add (or augment your existing) WEB-INF/jetty-web.xml:
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.util.Decorator</Arg>
</Call>
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.util.DecoratedObjectFactory</Arg>
</Call>
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.server.handler.ContextHandler</Arg>
</Call>
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.servlet.ServletContextHandler$Context</Arg>
</Call>
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.servlet.ServletContextHandler</Arg>
</Call>
<Call name="prependServerClass">
<Arg>-org.eclipse.jetty.webapp.WebAppContext</Arg>
</Call>
<Get id="wal" name="classLoader"/>
<Get id="objf" name="objectFactory">
<Call name="addDecorator">
<Arg>
<New class="org.apache.webbeans.web.jetty9.JettyDecorator">
<Arg><Ref refid="wal"/></Arg>
</New>
</Arg>
</Call>
</Get>
</Configure>Add the listener to your WEB-INF/web.xml:
<web-app id="owb-it" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
<listener>
<listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
</listener>
...
</web-app>The resulting .war will run on vanilla Jetty
In this case you exclude the Apache OpenWebBeans .jar files from your WEB-INF/lib and do nothing with deploytment descriptors or adding listeners.
You will need to configure your target Jetty to activate Apache OpenWebBeans. This depends on your target Jetty.
|
Note
|
A regression in Jetty 9.4.13 (#3597) means that skinny .war deployments will not be able to persist session scoped context.
This regression was fixed in Jetty 9.4.18.
The recommendation is to use fat .war deployments if you need to use a version of Jetty with this regression.
|
Should just be a case of adding the module to your Jetty Home and then activating it.
export JETTY_BASE=...
export JETTY_HOME=...
# Add the module to your Jetty Home
cd "${JETTY_HOME}"
curl -O https://repo1.maven.org/maven2/org/apache/openwebbeans/openwebbeans-jetty9/2.0.11/openwebbeans-jetty9-2.0.11-config.jar
unzip openwebbeans-jetty9-2.0.11-config.jar
rm openwebbeans-jetty9-2.0.11-config.jar
cd "${JETTY_BASE}"
# Add the module to your Jetty Base
java -jar "${JETTY_HOME}/start.jar" --add-to-start=apache-owb apache-owb.version=2.0.11
ALERT: There are enabled module(s) with licenses.
The following 1 module(s):
+ contains software not provided by the Eclipse Foundation!
+ contains software not covered by the Eclipse Public License!
+ has not been audited for compliance with its license
Module: apache-owb
+ Apache OpenWebBeans is an open source project hosted by the Apache Software Foundation and released under the Apache 2.0 license.
+ https://openwebbeans.apache.org/
+ http://www.apache.org/licenses/LICENSE-2.0.html
Proceed (y/N)? y
INFO : apache-owb initialized in ${jetty.base}/start.ini
MKDIR : ${jetty.base}/lib/apache-owb
COPY : .../.m2/repository/org/apache/openwebbeans/openwebbeans-spi/2.0.11/openwebbeans-spi-2.0.11.jar to ${jetty.base}/lib/apache-owb/openwebbeans-spi-2.0.11.jar
COPY : .../.m2/repository/org/apache/openwebbeans/openwebbeans-impl/2.0.11/openwebbeans-impl-2.0.11.jar to ${jetty.base}/lib/apache-owb/openwebbeans-impl-2.0.11.jar
COPY : .../.m2/repository/org/apache/openwebbeans/openwebbeans-web/2.0.11/openwebbeans-web-2.0.11.jar to ${jetty.base}/lib/apache-owb/openwebbeans-web-2.0.11.jar
COPY : .../.m2/repository/org/apache/openwebbeans/openwebbeans-el22/2.0.11/openwebbeans-el22-2.0.11.jar to ${jetty.base}/lib/apache-owb/openwebbeans-el22-2.0.11.jar
COPY : .../.m2/repository/org/apache/openwebbeans/openwebbeans-jetty9/2.0.11/openwebbeans-jetty9-2.0.11.jar to ${jetty.base}/lib/apache-owb/openwebbeans-jetty9-2.0.11.jar
COPY : .../.m2/repository/org/apache/geronimo/specs/geronimo-jcdi_2.0_spec/1.0/geronimo-jcdi_2.0_spec-1.0.jar to ${jetty.base}/lib/apache-owb/geronimo-jcdi_2.0_spec-1.0.jar
COPY : .../.m2/repository/org/apache/geronimo/specs/geronimo-atinject_1.0_spec/1.0/geronimo-atinject_1.0_spec-1.0.jar to ${jetty.base}/lib/apache-owb/geronimo-atinject_1.0_spec-1.0.jar
COPY : .../.m2/repository/org/apache/geronimo/specs/geronimo-interceptor_1.2_spec/1.0/geronimo-interceptor_1.2_spec-1.0.jar to ${jetty.base}/lib/apache-owb/geronimo-interceptor_1.2_spec-1.0.jar
COPY : .../.m2/repository/org/apache/xbean/xbean-finder-shaded/4.17/xbean-finder-shaded-4.13.jar to ${jetty.base}/lib/apache-owb/xbean-finder-shaded-4.13.jar
COPY : .../.m2/repository/org/apache/xbean/xbean-asm9-shaded/4.17/xbean-asm9-shaded-4.13.jar to ${jetty.base}/lib/apache-owb/xbean-asm9-shaded-4.13.jar
INFO : Base directory was modifiedJust add the org.apache.webbeans.web.jetty9.OwbConfiguration to your context’s configuration classes e.g.
Server jetty;
WebAppContext ctx;
...
Configuration.ClassList classList = Configuration.ClassList.serverDefault(jetty);
classList.addBefore(
"org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration",
"org.apache.webbeans.web.jetty9.OwbConfiguration"
);
ctx.setConfigurationClasses(classList);|
Note
|
The following only applies if if you are using a skinny .war
|
Add the dependencies to your jetty-maven-plugin definnition and add the org.apache.webbeans.web.jetty9.OwbConfiguration to your context’s configuration classes.
|
Note
|
This will require you to specify all the configuration classes |
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
...
<dependencies>
...
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-spi</artifactId>
<version>${openwebbeans.version}/version>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-impl</artifactId>
<version>${openwebbeans.version}/version>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-web</artifactId>
<version>${openwebbeans.version}/version>
</dependency>
<dependency>
<groupId>org.apache.openwebbeans</groupId>
<artifactId>openwebbeans-jetty9</artifactId>
<version>${openwebbeans.version}/version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jcdi_2.0_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-atinject_1.0_spec</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-interceptor_1.2_spec</artifactId>
<version>1.0</version>
</dependency>
...
</dependencies>
...
<configuration>
...
<webApp>
...
<configurationClasses>
<configurationClass>org.eclipse.jetty.maven.plugin.MavenWebInfConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.webapp.WebXmlConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.webapp.MetaInfConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.webapp.FragmentConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.plus.webapp.EnvConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.plus.webapp.PlusConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.annotations.AnnotationConfiguration</configurationClass>
<configurationClass>org.apache.webbeans.web.jetty9.OwbConfiguration</configurationClass>
<configurationClass>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</configurationClass>
</configurationClasses>
...
</webApp>
...
</configuration>
</plugin>