Comment intégrer Jetty et Jersey dans mon application Java
Donc je vais essayer d'intégrer jetée dans mon application web, de sorte que si je le paquet comme un pot quelqu'un peut il suffit d'exécuter le fichier jar, sans avoir à vous soucier de la configuration d'un serveur. Cependant, je vais avoir quelques problèmes de configuration de ma classe principale, de sorte que la jetée peut accéder à mes ressources des classes. J'ai regardé des tutoriels mais ils n'ont pas donné de moi exactement ce que je cherche. C'est ce que j'ai jusqu'à présent.
package pojo;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");
ServletHolder h = new ServletHolder(new DefaultServlet());
h.setInitParameter("javax.ws.rs.Application","resources.DBCollection");
context.addServlet(h, "/*");
server.setHandler(context);
server.start();
server.join();
}
}
Et j'essaie de l'associer à cette classe:
package resources;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import pojo.Party;
@Path("/parties")
public class DBCollection {
@Context
UriInfo url;
@Context
Request request;
String name;
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Party> getAllParties() throws Exception
{
List<Party> list = new ArrayList<Party>();
list.addAll(DBConnection.getPartyCollection().values());
return list;
}
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String getPartyCount() throws Exception
{
return String.valueOf(DBConnection.getPartyCollection().size());
}
@Path("{party}")
public DBResource getParty(@PathParam("party")String party)
{
return new DBResource(url,request,party);
}
}
Voici mon POM fichier:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>PartyAPI</groupId>
<artifactId>PartyAPIMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oss.sonatype.org</id>
<name>OSS Sonatype Staging</name>
<url>https://oss.sonatype.org/content/groups/staging</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.resteasy.Star.Main</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
source d'informationauteur | 2013-07-30
Vous devez vous connecter pour publier un commentaire.
Quelques choses.
Dans votre exemple, vous n'avez que l'installation d'un
DefaultServlet
pour servir les fichiers statiques, rien n'a été configuré pour utiliser votreDBCollection
objet.Pour le Jersey, vous aurez besoin de configurer le
org.glassfish.jersey.servlet.ServletContainer
et l'installation de ses servlet-mappings sur un cadre de votre choix.Exemple:
Cet exemple ajoute la ServletContainer ce maillot offre à la ServletContextHandler que Jetty utilise pour chercher de quoi faire en fonction de la demande entrante. Il ajoute ensuite le DefaultServlet pour gérer toutes les demandes de contenu que Jersey n'a pas de poignée (tels que le contenu statique)
Dans le cas où vous souhaitez gérer le cycle de vie de votre
DBCollection
des ressources par programme (par exemple, vous devez créer vous-même, faire un peu de configuration/initialisation etc), au lieu d'avoir Maillot de créer une instance pour vous, vous pouvez utiliser unResourceConfig
comme tel:Remarque la ligne
TheResource resource = new TheResource();
. Ici, nous créons notre propre instance de TheResource, et nous pouvons la manipuler à volonté maintenant.