Servlet-3.0-Unterstützung in der embedded-Jetty-8.0
Für meine unit-tests, die ich mit einem einfachen test-server, basierend auf Jetty:
package eu.kostia.textanalysis.webservices.jetty;
import java.awt.Desktop;
import java.net.URI;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class TestServer {
static private final String CONTEXT_PATH = "/webservice";
static private final String PROJECT_HOME = System.getenv("MY_WORKSPACE_HOME") + "/WebServices";
static public final int PORT = 8080;
private Server server;
private Exception startException;
private static class SingletonHolder {
private static final TestServer INSTANCE = new TestServer();
}
/**
* Returns the singleton instance of the test server.
*
* @return the singleton instance of the test server.
*/
public static TestServer getInstance() {
return SingletonHolder.INSTANCE;
}
private TestServer() {
server = new Server(PORT);
WebAppContext context = new WebAppContext();
context.setDescriptor(PROJECT_HOME + "/web/WEB-INF/web.xml");
context.setResourceBase(PROJECT_HOME + "/web");
context.setContextPath(CONTEXT_PATH);
context.setParentLoaderPriority(true);
server.setHandler(context);
}
/**
* Start the test server. This method returns only when the server is
* complete started. There is no effect when you invoke this method and the
* server is already running.
*/
public void start() {
if (!server.isRunning()) {
startException = null;
new Thread("TestServer") {
public void run() {
try {
server.start();
server.join();
} catch (Exception exc) {
startException = exc;
}
}
}.start();
while (true) {
if (startException != null) {
throw new Error(startException);
}
//Block this method call until the server is started
if (server.isStarted()) {
return;
}
}
}
}
/**
* Stop the test server.
*/
public void stop() {
try {
if (server.isRunning()) {
server.stop();
}
} catch (Exception e) {
throw new Error(e);
}
}
/**
* Returns {@code true} is the server is running.
*
* @return {@code true} is the server is running.
*/
public boolean isRunning() {
return server.isRunning();
}
public static void main(String[] args) throws Exception {
TestServer.getInstance().start();
Desktop.getDesktop().browse(new URI("http://localhost:8080/webservice/"));
}
}
Es funktioniert sehr gut für das servlet konfiguriert web.xml aber ich würde jetzt gerne die neue annotation-syntax eingeführt, die von der Servlet-Spezifikation 3.0, zum Beispiel:
@WebServlet(urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.print("<h1>HttpServlet using Servlet 3.0</h1>");
}
}
Wie soll ich konfigurieren Jetty in meinem TestServer Klasse zu verarbeiten, auch annotation-basierten servlets?
InformationsquelleAutor kostia | 2010-08-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem code hinzufügen,
Müssen Sie nur legen Sie die AnnotationConfiguration, um die auto-discovery von annotierten Klassen arbeiten. Der rest der Konfigurationen, so dass Sie aktivieren können, andere Aspekte der container. Angeblich sollten Sie in der Lage, das zu tun dieses von der Befehlszeile mit den OPTIONEN=Anmerkungen,jsp,(etc...), aber ich habe nie, dass Sie arbeiten. Zumindest auf diese Weise sollte es abholen annotierten Klassen richtig in der embedded-Umgebung.
Auch als eine Randnotiz, es erscheint die Eclipse-jetty-Projekt hat Anmerkung standardmäßig deaktiviert, in der Erwägung, dass riptide zu haben behauptet Sie standardmäßig eingeschaltet. Ich vermute, das ist ein Unterschied in den Konfigurationsdateien.
Beantwortung ein weiteres Jahr später.
In der aktuellen version von Steg (8.1) Sie können erreichen, was Sie wollen mit der Befehlszeile:
aufgerufen, aus dem jetty-home-Verzeichnis.
Steg 8 ist die Implementierung der servlet-3.0-Spezifikation, aber es ist immer noch experimentell.
Konnte man auch mit der embedded-glassfish-3-plugin, um die tests auszuführen. Siehe die links unten für einige Infos:
http://wikis.sun.com/display/GlassFish/3.1EmbeddedOnePager
http://ocpsoft.com/java/using-embedded-glassfish-with-maven/
http://embedded-glassfish.java.net/
Ich begreifen, wie ich dies Schreibe, dass es keine maßgebliche Ressource für die Verwendung des Glassfish-plugin in der Art und Weise Jetty wird Häufig verwendet. Aber es funktioniert in ähnlicher Weise.
Ich hoffe, das hilft zumindest ein bisschen.