Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Jetty 9 Module for Apache OpenWebBeans

There are two ways to use Apache OpenWebBeans with Jetty 9. You can:

  • Exclude the Apache OpenWebBeans implementation from your .war file, this is known as a skinny .war

  • Include the Apache OpenWebBeans implementation in your .war file, this is known as a fat .war

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

Skinny .war

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.

Standard Jetty Deployment

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 modified

Jetty Embedded

Just 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);

Jetty Maven Plugin

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>