Come distribuire un'applicazione JAX-RS su un ambiente Java SE?


Voglio codificare un servizio web RESTful con JAX-RS, e voglio pubblicarlo su localhost come http://localhost:[port]. Ho letto quanto segue in questa risposta :

Le specifiche Java SE 7 (JSR 336) e Java SE 8 (JSR 337) non incorporare il componente JAX-RS. Tuttavia, le applicazioni JAX-RS può essere pubblicato in ambienti Java SE (usando RuntimeDelegate) e Le implementazioni JAX-RS possono anche supportare la pubblicazione tramite JAX-WS.

Il RuntimeDelegate è menzionato. Come posso usarlo? Se ci sono buoni esempi su come raggiungerlo compito, si prega di condividerli con me.

Author: Community, 2017-04-07

2 answers

Per distribuire un'applicazione JAX-RS in un ambiente Java SE, è possibile utilizzare RuntimeDelegate e un server HTTP supportato dall'implementazione JAX-RS. Non è richiesto un contenitore servlet.

Il JSR 339 afferma quanto segue:

In un ambiente Java SE è possibile ottenere un'istanza configurata di una classe endpoint utilizzando il metodo createEndpoint di RuntimeDelegate. L'applicazione fornisce un'istanza di Application e il tipo di endpoint richiesto. Un'attuazione PUÒ sostenere zero o più tipi di endpoint di qualsiasi tipo desiderato.

Il modo in cui l'istanza della classe endpoint risultante viene utilizzata per pubblicare l'applicazione non rientra nell'ambito di questa specifica.

Jersey, l'implementazione di riferimento JAX-RS, supporta un intervallo di server HTTP che è possibile utilizzare per distribuire applicazioni JAX-RS in Java SE.

Ad esempio, con Grizzly e RuntimeDelegate, puoi avere quanto segue:

public class Example {

    public static void main(String[] args) {

        ResourceConfig resourceConfig = new ResourceConfig();
        resourceConfig.register(GreetingsResource.class);

        HttpHandler handler = RuntimeDelegate.getInstance()
                .createEndpoint(resourceConfig, HttpHandler.class);

        HttpServer server = HttpServer.createSimpleServer(null, 8080);
        server.getServerConfiguration().addHttpHandler(handler);

        try {
            server.start();
            System.out.println("Press any key to stop the server...");
            System.in.read();
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    @Path("/greetings")
    public static class GreetingsResource {

        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String getGreeting(){
            return "Hello from the other side.";
        }
    }
}

L'applicazione sarà disponibile presso http://localhost:8080/greetings.

Le seguenti dipendenze sono necessarie per l'esempio mostrato sopra:

<dependency>
    <groupId>org.glassfish.grizzly</groupId>
    <artifactId>grizzly-http-server</artifactId>
    <version>2.3.30</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-http</artifactId>
    <version>2.25.1</version>
</dependency>

Altre implementazioni supportate includono:

Jersey documentation descrive anche altre alternative di distribuzione per un ambiente Java SE senza RuntimeDelegate.

 4
Author: Cassio Mazzochi Molin, 2017-04-14 20:09:34

Per creare un servizio Web REST non è possibile utilizzare solo Java SE. Mi sbaglio, Cassio ha detto che JAX RS può essere implementato con solo Java SE. Ho suggerito di leggere di più sulla differenza tra Java SE e Java EE, ad esempio su questa discussione .

Per rispondere alla tua domanda, puoi creare il servizio Web REST abbastanza facilmente con l'aggiunta della dipendenza api javaee 7 e quindi distribuire il tuo progetto di archivio Web (war) in Application Server, ad esempio wildfly, payara, o glashfish e qui qualche esempio su come costruire Servizio Web REST con Java EE 7 . Un altro modo per costruire un servizio Web REST con Spring Frameworks e forniscono un tutorial semplice e buono su REST con Spring .

 -1
Author: Sukma Wardana, 2017-05-23 11:54:16