2012-04-06 7 views
17

Dopo una ricerca esauriente del web e Stackoverflow, sono ancora bloccato a cercare di capire come integrare un'interfaccia in stile RESTlet fornita da Jersey con Jetty.Integrazione di Jetty con JAX-RS-Jersey

Ho il mio server Jetty installato e funzionante e in quanto tale sembra abbastanza facile da usare, qualcuno sa come legare i due insieme? Qualsiasi collegamento concreto sarebbe d'aiuto: anch'io sono un po 'nuovo alla programmazione dei servlet.

risposta

26

Ho creato un'applicazione utilizzando Jetty e Jersey qualche tempo fa. E 'solo una webapp di serie davvero:

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> 

Una risorsa riposo:

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 di avviamento:

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> 

Spero che questi frammenti ti indirizzino nella giusta direzione.

+1

Grazie, questo è più o meno quello che stavo cercando - anche se ho estratto parte del materiale .xml nel codice Java - mi fa lavorare con una cosa in meno! – rmoh21

+0

avrai anche bisogno di ContextLoaderListener in web.xml e applicationContext.xml in web-inf – iTake

+1

Perché hai una dipendenza da grizzly? – Stainedart

16

Si potrebbe voler guardare Dropwizard per l'integrazione immediata tra Jetty, Jersey, Jackson, Logback/Log4j/JUL/CJL e JDBI, tutti ben strumentati con Yammer Metrics.

+0

Collegamento interrotto. 15char – Navin

+1

Risolto il problema ora, grazie per averlo notato. – Cagatay