Jersey (JAX-RS) - ServletContextListener


pr

Neues 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!
 

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

pr

Neues 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

Aktives Mitglied
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.
 

Passende Stellenanzeigen aus deiner Region:


Neue Themen

Oben