以下の要件を満たす小規模な研究用プロトタイプおよび学生プロジェクト用に、JBoss AS7 に基づく Web アプリケーション スタックをセットアップしようとしています。
PrimeFaces コンポーネントと組み合わせて、マネージド Bean に ViewScope (またはMyFaces Orchestra のような (View)AccessScope)などの AJAX 関連のスコープを使用したいと考えています。
JPA ベースの永続性は、OpenSessionInView パターンなどに対処する必要がなく、かなり簡単です。JPA2 で私が抱えている主な問題は、特に AJAX 呼び出しで発生する恐ろしいLazyInitializationExceptionです。会話を手動で制御する必要はありません。
使用する依存関係をできるだけ少なくしたいので、主に JBoss AS7 に同梱されているものに依存しています。
現在、次の (ほとんどが提供されている) Maven 依存関係を使用してプロジェクトをセットアップしました。
- CDI
- 休止状態-2.0-api
- jboss-ejb-api_3.1_spec
- jboss-jsf-api_2.1_spec
- jboss-annotations-api_1.1_spec
- プライムフェイス3
これは今のところかなりスリムに見えます。欠けているのは、さらなる JSF 固有のスコープのサポートと、JSF ページ内のコレクションを反復処理するときに常に LazyInitializationException を受け取ることです。現在、永続化のためのサービス クラスは次のようになっています。
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
@Stateful @RequestScoped
public class TestEntityService implements Serializable {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;
// ... some methods working with the entityManager ...
}
そして私の ResourceFactory Bean:
public class ResourceFactory {
@Produces @PersistenceUnit
private EntityManagerFactory entityManagerFactory;
}
@Named
の代わりに@Stateful
、またはの@SessionScoped
代わりにを組み合わせてみましたがうまくいきませんでし@RequestScoped
た。しかし、Seam 3 Persistence、Solder & Faces モジュールを追加すると、ほとんどの問題が解決するように見えますが、これによりプロジェクトに大量の新しい依存関係が追加されます (例: seam-security、prettyfaces、drools、joda-time、およびその他の依存関係)。 )。
私の質問は次のとおりです。
LazyInitializationExceptionに関してEJBは役に立ちますか?
@Stateful
それとも、アノテーションのためにここですでに EJB を実際に使用していますか?@ManagedBean
これは jboss-as サンプル アプリケーションから取得しましたが、これらすべての,@Named
,@Stateful
,アノテーションの違いに完全に混乱してい@LocalBean
ます...私が知っているのは、エンティティ マネージャーの寿命を何らかの形でスコープにバインドする必要があるということだけですサービス豆。この問題を回避する他の簡単な方法を知っている人はいますか? エンティティごとに複数のコレクションがない場合にのみ機能するように見えるため、EAGER フェッチを使用することはオプションではありません...
MyFaces Orchestra の CDI の後継と思われるApache CODIについて読みました。これは Seam Faces のより良い代替手段ですか? 私が見る限り、ViewScope と ViewAccessScope を提供していますが、トランザクション管理に関しては何も提供していません。
この分野でより多くの経験を積んだ誰かがこれに光を当てることができれば素晴らしいことです-ほとんどの場合、互いに互換性がないように見えますが、同様の問題を扱うライブラリが非常に多くあるため、現在少し混乱しています(例を参照)ここで)。ありがとう!