2012-03-06 16 views
0

私はjerseyを使用してstrutsアプリケーションに休憩サービスを追加しようとしています。これは、ストラットと休憩の両方で共通にアクセスできるような方法でJavaコードを分離する必要がありますこれは、コードが残りのストラットとストラットの両方で共有されるように行われます。変更が両方のサービスに反映されるように、コードが共有されるようにします。このアイデアのどれが実現可能であり、 。strutsアプリケーションに休憩サービスを追加する

答えて

2

私たちのプレゼンテーション層はStrutsベースではありませんが(通常はSpring Web MVCまたはJSF)、Spring 3.0 + Java EE 6、具体的にはEJB 3.0とJPA 2.0を使用します。

EJB 3.0ステートレスセッションBeanは、宣言的(アノテーションベース)の依存関係注入およびトランザクション境界設定を持つことができます。また、従来のメカニズムを使用してトランザクション、依存関係、およびリソースを管理することもできます。これらはJPA 2.0とシームレスに統合され、単体テストにも簡単です。純粋なSpring Beansの主な利点は、Webアプリケーションとは独立して(EJB JARとして)デプロイできることです。

フロントフェイスのWebサービスでは、Jersey/JAX-RSも使用します。 Jersey/JAX-RS依存関係注入は壊れているため(Java EEの他の部分と同様にWeld/CDIは使用しません)、Spring DIを使用して、フロントエンドのRESTリソースクラスを'バックエンド' EJB良いことは、EJBをMVCコントローラに注入するのに十分うまく機能し、JSFマネージドBeanでも使用できることです。あるいは、Spring単独でREST-fulリソースを書くこともできます(いずれの方法も独自の賛否両論がありますが、一般的にどちらもうまく機能します)。

私は全面的に光っていることを知っていますが、私はリクエストに応じて詳細を共有してうれしいです。


EDIT:要求ごととしていくつかの詳細は、。

あなたはJersey/JAX-RSを学ぶためにはじめてですが、Jersey User Guideでなければなりません。また、ネット上で簡単に見つけることができるチュートリアルや例がいくつかあります。

Jersey/JAX-RSリソースをStrutsページと同じWARにパッケージングできるはずですが、我々はそれらを別々に配備するより簡単な方法を採用しました。

Glassfish 3.1にデプロイすると、thisというバグが発生し、hereも記載されています。要するに、@EJB注射が期待通りに機能しないということです。

代わりにjersey-spring contribモジュールを使用して、exampleに続いてSpringに戻りました。

とにかく、残りは標準Java EE 6/EJB 3.0です。すべての共通の機能を識別し、「サービス」レイヤーに配置します。これらのレイヤーは、ほとんどが@StatelessというEJBとして実装されています。

永続性は、JPA @Entityによって処理され、JPAインジェクションEntityManagerによってアクセスされます。トランザクションは、@TransactionAttributeを使用して宣言的に区切られます。

はここで、一般的なEJB + JPAサービス豆の迅速なイラストです:

@Stateless 
public class WidgetServiceBean implements WidgetService { 

    @PersistenceContext 
    private EntityManager em; 

    @Override 
    public List<Widget> findWidgetByName(String name) { 
     return em.createNamedQuery("Widget.findByName", Widget.class) 
      .setParam("name", name).getResultList(); 
    } 

    @Override 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void removeWidgetById(int id) { 
     em.find(Widget.class, id).remove(); 
    } 
} 

(明らかにない生産品質が、ちょうど彼らがいかに「リーン」を示しています。)

サービスレイヤーとエンティティは、個別にデプロイできるEJB JARとしてパッケージ化され、グローバルJNDIルックアップを介して他のすべてのモジュールで使用できるようになりました。また、StrutsやJAX-RS WARやJava EE 6(Glassfish 3.x)の配備で発見され、モジュールの一部として配備され、同じWAR内の他のコンポーネントで利用可能になります。

とにかくSpringコンテナを使用している場合は、Spring Beanを使用する方が簡単だと主張する人もいます。おそらく、おそらく、Springの永続性フレームワークとSpringのトランザクションフレームワークを使用する必要があります。 (Springは宣言的なトランザクションと永続性も提供しています。)すでにSpringに多額の投資をしているのであれば、より簡単な方法かもしれません。

OTOH、EJB 3.0、JPA 2.0およびJTAも以前のバージョンから大幅に簡略化されています。およびはJava EE標準の一部です。したがって、多くのディメンションを持つアーキテクチャ上の決定です。

+0

Tnx、私はあなたがどのように実装したかについてもっと知りたいと思います。 – Emil

関連する問題