Applicazioni REST standalone (senza Tomcat o Glasshfish)

Ho cercato di capire come sia possibile avviare Jersey in modalità standalone, cioè senza dover ricorrere ad inutili (per ora) complessità, come:

  • application servers (e.g. Glasshfish)
  • web containers (e.g. Tomcat)
  • sistemi di build lenti e complicati (e.g.maven)
Inoltre non volevo avere tra i piedi un file "web.xml".

Ho scoperto che è possibile! La documentazione non è facile da trovare, sembra quasi che Oracle (ex Sun) spinga per complicarti la vita.

Se volete provare anche voi dovete prima di tutto procurarvi le librerie necessarie:

La prima contiene Grizzly (un embeddeddable web server), le restanti fanno parte della distribuzione di jersey e sono scaricabili in un unica soluzione: jersey-archive-1.1.5.zip

Una volta aggiunte le librerie al progetto potete passare alla creazione della risorsa di esempio:

// file Hello.java
package learn.jersey.grizzly;
import javax.ws.rs.*;

@Path("/hello")
public class Hello {
    @GET @Produces("text/plain")
    public String sayHello() {
        return "Hello World!";
    }
}

E infine il main (che è cortissimo!):

// Main.java
package learn.jersey.grizzly;

import com.sun.grizzly.tcp.Adapter;
import com.sun.jersey.api.container.ContainerFactory;
import com.sun.jersey.api.container.grizzly.GrizzlyServerFactory;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
        Adapter adapter = ContainerFactory.createContainer(Adapter.class, Hello.class);
        GrizzlyServerFactory.create("http://localhost/", adapter);
    }

}
Dopo aver avviato verificatene il funzionamento seguendo http://localhost/hello.

Che bella la semplicità!