2012-04-06 19 views
17

Después de una búsqueda exhaustiva de la web y Stackoverflow, todavía estoy atrapado tratando de descubrir cómo integrar una interfaz de estilo RESTlet proporcionada por Jersey con Jetty.Integración del embarcadero con JAX-RS-Jersey

Tengo mi servidor Jetty en funcionamiento y, como tal, Jersey parece bastante fácil de usar, ¿alguien sabe cómo unir los dos? Cualquier enlace concreto ayudaría. También soy un poco nuevo en la programación de servlets.

Respuesta

26

Creé una aplicación usando Jetty y Jersey hace un tiempo. Es sólo una aplicación de web estándar de verdad:

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> 

Un recurso resto:

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"; 
    } 
} 

embarcadero de arranque:

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> 

Espero que estos fragmentos te indiquen la dirección correcta.

+1

Gracias, esto es más o menos lo que estaba buscando, aunque resumí algunas de las cosas .xml en el código de Java, ¡me hace trabajar con una cosa menos! – rmoh21

+0

también necesitará ContextLoaderListener en web.xml y applicationContext.xml en web-inf – iTake

+1

¿Por qué tiene una dependencia de grizzly allí? – Stainedart

16

Es posible que desee ver Dropwizard para una integración inmediata entre Jetty, Jersey, Jackson, Logback/Log4j/JUL/CJL y JDBI, todo muy bien equipado con Yammer Metrics.

+0

Enlace roto. 15char – Navin

+1

Solucionado ahora, gracias por notarlo. – Cagatay