Jersey (JAX-RS) - ServletContextListener

pr

Mitglied
Hi zusammen,
was ist in einer Jersey-Anwendung das Equivalenz zu enem ServletContextListener in einer rein Servlet-basierten App? In der contextInitialized()-Methode des Listeners füge ich dem ServletContext ein DAO-Objekt hinzu, damit global darauf zugegriffen werden kann. Wo würde ich das in einer Jersey-Anwendung machen? Es soll keine EJB verwendet werden, die Anwendung muss weiterhin in einem reinen Servlet-Container lauffähig sein. Danke!
 

pr

Mitglied
(PS: Mir ist klar, dass ich auch mit Jersey, da es ein Wrapper um die Servlet-API ist, einen ServletContextListener benutzen könnte, die Frage ist aber,ob es da nicht eine Jersey-typische Lösung gibt, als das so 'low-level' anzugehen.)
 

sascha-sphw

Top Contributor
Wenn ich über den Maven archetype jersey-quickstart-grizzly2 ein Projekt erzeuge, bekomme ich folgende Main.java generiert.
Java:
package de.sphw;

import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

import java.io.IOException;
import java.net.URI;

/**
* Main class.
*
*/
public class Main {
    // Base URI the Grizzly HTTP server will listen on
    public static final String BASE_URI = "http://localhost:8080/myapp/";

    /**
     * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
     * @return Grizzly HTTP server.
     */
    public static HttpServer startServer() {
        // create a resource config that scans for JAX-RS resources and providers
        // in de.sphw package
        final ResourceConfig rc = new ResourceConfig().packages("de.sphw");

        // create and start a new instance of grizzly http server
        // exposing the Jersey application at BASE_URI
        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
    }

    /**
     * Main method.
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        final HttpServer server = startServer();
        System.out.println(String.format("Jersey app started with WADL available at "
                + "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
        System.in.read();
        server.stop();
    }
}

Hier sieht man, dass diese App nicht in einem ServletContainer läuft, sondern den Server selbst startet, womit es dann auch keinen ServletContextListener braucht.
Wenn Du Deine Anwendung aber in einem ServletContainer laufen lassen möchtest, wirst Du IMHO nicht um einen Listener herum kommen.
 

supercop89

Neues Mitglied
Hallo Sascha!
Danke für deine Antwort.

Würde ich hier vor Starten des HTTP Servers einen Background Thread starten, der z.B. regelmäßíg eine Liste befüllt. Hätte ich dann irgendwie technisch die Möglichkeit diese danach in einem der Webservice Funktionen die im HTTP Server erreicbhar sind, die List mit den aktuellen Werten abzufragen?

Wäre echt klasse, wenn du mir dazu Auskunft geben könntest.

LG cop

Wenn ich über den Maven archetype jersey-quickstart-grizzly2 ein Projekt erzeuge, bekomme ich folgende Main.java generiert.
Java:
package de.sphw;

import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

import java.io.IOException;
import java.net.URI;

/**
* Main class.
*
*/
public class Main {
    // Base URI the Grizzly HTTP server will listen on
    public static final String BASE_URI = "http://localhost:8080/myapp/";

    /**
     * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
     * @return Grizzly HTTP server.
     */
    public static HttpServer startServer() {
        // create a resource config that scans for JAX-RS resources and providers
        // in de.sphw package
        final ResourceConfig rc = new ResourceConfig().packages("de.sphw");

        // create and start a new instance of grizzly http server
        // exposing the Jersey application at BASE_URI
        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
    }

    /**
     * Main method.
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        final HttpServer server = startServer();
        System.out.println(String.format("Jersey app started with WADL available at "
                + "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
        System.in.read();
        server.stop();
    }
}

Hier sieht man, dass diese App nicht in einem ServletContainer läuft, sondern den Server selbst startet, womit es dann auch keinen ServletContextListener braucht.
Wenn Du Deine Anwendung aber in einem ServletContainer laufen lassen möchtest, wirst Du IMHO nicht um einen Listener herum kommen.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben