2012-04-06 12 views
17

Po wyczerpującym przeszukiwaniu sieci i Stackoverflow, wciąż utknąłem z próbami znalezienia sposobu zintegrowania interfejsu stylu RESTlet dostarczonego przez Jersey z Jetty.Integrowanie pomostu z JAX-RS-Jersey

Mam swój serwer Jetty uruchomiony i jako taki wydaje się dość łatwy w obsłudze, czy ktoś wie jak powiązać te dwa elementy? Pomocne mogą być wszelkie konkretne łącza - jestem też trochę nowy w programowaniu serwletów.

Odpowiedz

26

Stworzyłem aplikację, używając Jetty i Jersey jakiś czas temu. To jest po prostu standard webapp naprawdę:

web.xml:

<servlet> 
    <servlet-name>rest.service</servlet-name> 
    <servlet-class> 
     com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> 
     <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>your.package.with.jersey.resources</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>rest.service</servlet-name> 
    <url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

Odpoczynek zasób:

package your.package.with.jersey.resources; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.SecurityContext; 

@Path("login") 
public class LoginResource { 

    @Context 
    private SecurityContext security; 

    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public String login() { 

     String email = security.getUserPrincipal().getName(); 
     return "ok"; 
    } 
} 

Jetty rozrusznik:

public class StartJetty { 

    public static void main(String[] args) throws Exception { 

     Server server = new Server(); 
     SocketConnector connector = new SocketConnector(); 
     // Set some timeout options to make debugging easier. 
     connector.setMaxIdleTime(1000 * 60 * 60); 
     connector.setSoLingerTime(-1); 
     connector.setPort(8080); 
     server.setConnectors(new Connector[] { connector }); 

     WebAppContext bb = new WebAppContext(); 
     bb.setServer(server); 
     bb.setContextPath("/"); 
     bb.setWar("src/main/webapp"); 

     server.addHandler(bb); 

     try { 
      System.out.println(">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP"); 
      server.start(); 
      while (System.in.available() == 0) { 
       Thread.sleep(5000); 
      } 
      server.stop(); 
      server.join(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(100); 
     } 
    } 
} 

pom.xml:

<!-- Jetty --> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-util</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-management</artifactId> 
</dependency> 

<!-- Jersey (JAX-RS) --> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>jersey-spring</artifactId> 
</dependency> 
<dependency> 
    <groupId>javax.ws.rs</groupId> 
    <artifactId>jsr311-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-test-framework</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>com.sun.grizzly</groupId> 
    <artifactId>grizzly-servlet-webserver</artifactId> 
</dependency> 

(...) 

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId>  
</plugin> 

Mam nadzieję, że te urywki wskazują w dobrym kierunku.

+1

Dziękuję, to jest mniej więcej to, czego szukałem - chociaż wyekstrahowałem niektóre rzeczy .xml do kodu Java - sprawia, że ​​pracuję z jedną mniejszą rzeczą! – rmoh21

+0

będziesz również potrzebował ContextLoaderListener w web.xml i applicationContext.xml w web-inf – iTake

+1

Dlaczego masz zależność od grizzly? – Stainedart

16

Być może zechcesz spojrzeć na Dropwizard dla gotowej integracji między Jetty, Jersey, Jackson, Logback/Log4j/JUL/CJL i JDBI, wszystko ładnie wyposażone w Yammer Metrics.

+0

Uszkodzony link. 15char – Navin

+1

Naprawiono to teraz, dzięki za uwagę. – Cagatay