Jersey (JAX-RS) - ServletContextListener

Dieses Thema Jersey (JAX-RS) - ServletContextListener im Forum "Application Tier" wurde erstellt von pr, 11. Nov. 2016.

Thema: Jersey (JAX-RS) - ServletContextListener Hi zusammen, was ist in einer Jersey-Anwendung das Equivalenz zu enem ServletContextListener in einer rein...

  1. pr
    pr
    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!
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. pr
    pr
    (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.)
     
  4. Wenn ich über den Maven archetype jersey-quickstart-grizzly2 ein Projekt erzeuge, bekomme ich folgende Main.java generiert.
    Code (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 gefällt das.
  5. 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

     
  6. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!