Jetty-OSGi is a packaging of jetty where jetty is run as an OSGi bundle. It supports the deployment of traditional J2EE web-applications and also web-bundles where the web application is contained in a bundle.

Jetty-OSGi is a packaging of jetty where jetty is run as an OSGi bundle. It supports the deployment of traditional J2EE web-applications and also web-bundles where the web application is contained in a bundle.

−

| body =

+

| details =

−

This tutorial introduces the development and testing of web-bundles in PDE.

+

This tutorial introduces the development and testing of web-bundles in PDE using Target Platforms.

The Jetty tooling feature contains 2 templates for Pluin projects that make it easy to get started developing web-bundles.

=== Create a first web-bundle ===

=== Create a first web-bundle ===

−

Create a new OSGi bundle. Make sure it is not an eclipse plugin. Name it "org.eclipse.jetty.example.webapp"

+

Create a new OSGi bundle. Name it "org.eclipse.jetty.example.webapp"

If you have installed the Jetty tooling feature, click next until you can choose a template. Everything will be generated.

If you have installed the Jetty tooling feature, click next until you can choose a template. Everything will be generated.

Line 195:

Line 197:

It will display "Howdy"

It will display "Howdy"

+

=== Notes: where is the jetty server configured ===

+

jetty-osgi looks for ${jetty.home}/etc/jetty.xml for its configuration.

+

When it can't find it defaults to the one embedded inside itself.

+

For example: /rt-tutorial-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.osgi.boot_7.1.3.v20100526/jettyhome

+

+

It is possible to set the system property jetty.home and point it to a different setup or to edit the jetty.xml file located there.

+

+

== Automated test for the servlet ==

+

Add to the test bundle the following imports:

+

<source lang="text">

+

Manifest-Version: 1.0

+

Bundle-ManifestVersion: 2

+

Bundle-Name: Test

+

Bundle-SymbolicName: org.eclipse.jetty.rt.example.test

+

Bundle-Version: 1.0.0.qualifier

+

Bundle-Activator: org.eclipse.jetty.rt.example.test.Activator

+

Import-Package: org.eclipse.jetty,

+

org.eclipse.jetty.client,

+

org.eclipse.jetty.http,

+

org.eclipse.jetty.util,

+

org.eclipse.jetty.util.component,

+

org.junit;version="4.8.1",

+

org.osgi.framework;version="1.3.0"

+

Bundle-RequiredExecutionEnvironment: J2SE-1.5

+

Bundle-ActivationPolicy: lazy

+

</source>

+

+

+

Create the ServletTest class:

+

<source lang="java">

+

package org.eclipse.jetty.rt.example.test;

+

+

import org.eclipse.jetty.client.*;

+

import org.eclipse.jetty.util.Attributes;

+

import org.eclipse.jetty.http.HttpBuffers;

+

import org.eclipse.jetty.util.component.AbstractLifeCycle;

+

import org.eclipse.jetty.http.HttpMethods;

+

import org.eclipse.jetty.http.HttpStatus;

+

import org.junit.Assert;

+

import org.junit.Before;

+

import org.junit.Test;

+

import org.osgi.framework.Bundle;

+

import org.osgi.framework.BundleException;

+

import org.osgi.framework.FrameworkUtil;

+

+

/**

+

*

+

*/

+

public class ServletTest {

+

+

private HttpClient _client;

+

+

protected void startClient() throws Exception {

+

_client = new HttpClient();

+

_client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);

+

_client.start();

+

}

+

+

protected void stopClient() throws Exception {

+

if (_client != null) {

+

_client.stop();

+

_client = null;

+

}

+

}

+

+

/**

+

* Make sure the webapp is started before this test is run.

+

* Could be done via the Launch Configuration

+

*/

+

@Before public void setup() {

+

Bundle testBundle = FrameworkUtil.getBundle(ServletTest.class);

+

for (Bundle b : testBundle.getBundleContext().getBundles()) {

+

if (b.getSymbolicName().equals("org.eclipse.jetty.osgi.boot")

+

|| b.getSymbolicName().equals("org.eclipse.jetty.example.webapp")) {

+

try {

+

System.err.println("Found " + b.getSymbolicName());

+

b.start();

+

} catch (BundleException e) {

+

Assert.fail("Unable to start the necessary bundles");

+

}

+

}

+

}

+

//TODO: put in a lifecycle listener

+

synchronized (Thread.currentThread()) {

+

try {

+

Thread.currentThread().wait(1000);

+

} catch (Throwable e) {

+

e.printStackTrace();

+

}

+

}

+

}

+

+

@Test public void testGet() throws Exception {

+

startClient();

+

+

ContentExchange getExchange = new ContentExchange();

+

getExchange.setURL("http://localhost:8080/test/");

+

getExchange.setMethod(HttpMethods.GET);

+

+

_client.send(getExchange);

+

int state = getExchange.waitForDone();

+

+

String content = "";

+

int responseStatus = getExchange.getResponseStatus();

+

if (responseStatus == HttpStatus.OK_200) {

+

content = getExchange.getResponseContent();

+

}

+

System.err.println("Got the content: " + content);

+

stopClient();

+

+

Assert.assertEquals(HttpStatus.OK_200, responseStatus);

+

Assert.assertEquals("Howdy!", content);

+

}

+

+

}

+

</source>

+

+

[[Media:Org.eclipse.rt.example.webapp-1.0.0.qualifier.zip|Archive of the web-bundle and the webtest bundles]]

+

+

== EclipseRT Jetty Starter Kit ==

+

EclipseRT Jetty Starter is a downloadable distribution of jetty for production environment.

+

It is based on p2 and configured out of the box to be managed by p2. For example to upgrade an installation or install other runtime features, one could use the p2 admin UI or the osgi console where p2 defines the provisioning commands.

+

For development purpose the familiar dropins folder is supported.

+

+

The Starter Kit is bundled with the platform specific equinox launchers. It can be launched directly in java though.

Jetty-OSGi is a packaging of jetty where jetty is run as an OSGi bundle. It supports the deployment of traditional J2EE web-applications and also web-bundles where the web application is contained in a bundle.

Details

This tutorial introduces the development and testing of web-bundles in PDE using Target Platforms.
EclipseRT Jetty Starter Kit describes the runtime distribution.
It also describes how to develop against such a runtime with PDE.

Configure a Target Platform and run a simple Test Unit with PDE

We will provision a new Target Platform and develop a simple bundle that executes a Testunit.
A Target Platform defines the OSGi environment in which your bundles are compiled and debugged.

Target Platform with JUnit Support

Launch Eclipse-SDK-3.6.
Define a new Target Platform "EclipseRT-Tutorial"
Open the Preferences and choose the node "Plugins-Development/Target Platform"
Click on "Add..." and choose the option "Nothing:" start with an empty Target Platform"

Name the Target Platform "EclipseRT Tutorial"

Click on Next and choose "Add..." then "Select Software Site"

Select the "Helios" download site as the source of the features to install in the Target Platform

Look for the category "Eclipse RT Target Platform" and select the PDE JUnit Support feature. Click on Finish.

Now Create a new OSGi launch configuration:
Select the menu "Run/Run Configuration..." and choose the node "OSGi".
Create a new configuration; choose the "Arguments" tab and add to the VM arguments area:

Notes: where is the jetty server configured

jetty-osgi looks for ${jetty.home}/etc/jetty.xml for its configuration.
When it can't find it defaults to the one embedded inside itself.
For example: /rt-tutorial-workspace/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.jetty.osgi.boot_7.1.3.v20100526/jettyhome

It is possible to set the system property jetty.home and point it to a different setup or to edit the jetty.xml file located there.

EclipseRT Jetty Starter Kit

EclipseRT Jetty Starter is a downloadable distribution of jetty for production environment.
It is based on p2 and configured out of the box to be managed by p2. For example to upgrade an installation or install other runtime features, one could use the p2 admin UI or the osgi console where p2 defines the provisioning commands.
For development purpose the familiar dropins folder is supported.

The Starter Kit is bundled with the platform specific equinox launchers. It can be launched directly in java though.
PDE supports importing an eclipse installation as a Target Platform.