2017-04-07 10 views
4

JAX-RSでRESTfulなWebサービスをコーディングしたいので、localhostでhttp://localhost:[port]のように公開したいと思います。JAX-RSアプリケーションをJava SE環境にデプロイする方法は?

のJava SE 7(JSR 336)およびJava SE 8(JSR 337)の仕様 はJAX-RSのコンポーネントが組み込まれていない:私はこのanswerで次の読みください。ただし、JAX-RSアプリケーション は、Java SE環境(RuntimeDelegateを使用)および で公開することができます。JAX-RS実装では、JAX-WSを介した公開もサポートされています。

RuntimeDelegateが挙げられる。どうすれば使えますか?それを達成するための良い例があれば、それらを私と共有してください。

+0

私はtomcat glassfishな​​どを使用しないことをお勧めします。ednpoint – Andrey

答えて

4

JAX-RSアプリケーションをJava SE環境にデプロイするには、RuntimeDelegateと、JAX-RS実装でサポートされているHTTPサーバーを使用できます。サーブレットコンテナは必要ありません。

JSR 339状態は次のJava SE環境で

エンドポイントクラスの構成インスタンスがRuntimeDelegatecreateEndpoint方法を用いて得ることができます。アプリケーションは、Applicationのインスタンスと必要なエンドポイントのタイプを提供します。実装は、任意のタイプのゼロまたはそれ以上のエンドポイントタイプをサポートしてもよい(MAY)。

結果のエンドポイントクラスインスタンスを使用してアプリケーションを公開する方法は、この仕様の範囲外です。

JAX-RSのリファレンス実装であるJerseyは、Java SEでJAX-RSアプリケーションを展開するために使用できるrange of HTTP serversをサポートしています。

例えば、GrizzlyRuntimeDelegateでは、次のことができます。

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

アプリケーションがhttp://localhost:8080/greetingsで利用できるようになります。

次の依存関係は、上記の例のために必要とされる:

<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> 

他のサポートの実装は、次のとおり

Jersey documentationには、RuntimeDelegateのないJava SE環境用の他の配置方法も記載されています。

-1

REST Webサービスを構築するには、Java SEだけでは使用できません。私は間違っています.Cassioは、JAX RSはJava SEだけで実装できると述べています。私は、あなたがJava SEとJava EEの違いについて、例えばdiscussionのように詳しく読むことを提案しました。

質問に答えるには、javaee 7 apiの依存関係を追加して、Webアーカイブ(war)プロジェクトをwildfly、payara、glashfishな​​どのApplication Serverにデプロイするだけで簡単にREST Webサービスを構築できます。 REST Web Service with Java EE 7を作成します。 Spring Frameworkを使用してREST Webサービスを構築するもう1つの方法は、REST with Springに関する簡単で良いチュートリアルです。

+0

tomcat glassfishな​​どを使用しないことをお勧めします。ednpoint – Andrey

+0

あなたの答えは正確ではありません。 JAX-RSリソースクラスはJava SEにデプロイできます。 –

関連する問題