web-dev-qa-db-ja.com

JSFフレームワークにJAX-RS RESTfulサービスを実装する方法

私のラボでは、JSFフレームワークを使用して簡単なWebサイトを作成し、RESTも使用するように依頼されました。私はそれら2つについていくつかの調査を行いました。 RESTでは、JerseyでJAX-RSフレームワークを使用する必要があることがわかりました。これらの2つのフレームワーク、JAX-RSとJSFをどのように統合できるのかと思っていましたか?

JSFのweb.xmlには、以下のサーブレットがすでにあります。

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>

ジャージーの場合、web.xmlで以下のサーブレットを使用する必要があると考えました。

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.jbm.rest</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

今私の懸念は、このジャージーサーブレットがweb.xmlのFacesサーブレットに取って代わるようです。これにより、アプリケーションがJSFからJAX-RSに変更されます。しかし、私はJSFを維持し、JAX-RSも使用したいと考えています。どうやってやるの?

15
asdfkjasdfjk

この懸念は不要です。 URLパターンが互いに衝突しない限り、単一のWebアプリケーションに複数のサーブレットを安全に配置できます。通常、これが当てはまる場合、少し正気なサーブレットコンテナーは、webappの起動時に既に例外をスローしていました。あなたの場合、あなたはJSFサーブレットを/test/*に登録しました(これは奇妙なことに、あなた は通常*.xhtmlを使用します) 、そしてJAX-RSサーブレットを/api/*に登録しました。したがって、justは、それらのURLパターンに一致するURLを使用して呼び出す必要があります。

また、概念的な誤解を解消するために、「RESTをJSFに実装する」ことはできません。それらは互いに完全に独立しています。同じWebアプリケーション内で、お互いを知らなくても、簡単にお互いを簡単に実行できます。それらが共有する可能性のある唯一のものは、 サービス層 または「共有」(CDI)管理Beanです。しかし、通常はそれだけです。また、サービス層の設計は、誰がそれを使用しているかに依存しません。

この特定の問題は、JSFやJAX-RSとは関係ありません。 basic servlets だけです。基本に戻って少し時間をかけて、基本的にすべてのJavaの構成要素について 詳細 を学ぶことも、同様に価値があるかもしれません。 EE Webアプリケーション。

19
BalusC

XPagesでこれを実行しようとしている人のためにこれを投稿すると、RESTコントロールがあり、コンポーネントライブラリからページにドロップできます。

ActionListenerをバインドするのと同様に、Javaクラスをコンポーネントにバインドし、URLパターンを設定します。

このメモを参照してください: https://oliverbusse.notesx.net/hp.nsf/blogpost.xsp?documentId=2C4E

およびサンプルアプリ https://github.com/zeromancer1972/simplerest/blob/master/ODP/XPages/index.xsp

0
xpagesbeast

同じJavaクラスまたはレイヤーに直接両方を含めることはできません。以下のように実装しました

                              |---> JSF Managed Beans(Inject logic here)
Database --> Daos --> Logic --|
                              |---> JAX-RS  (Inject logic here)
0
electricalbah