JEE7を使用してウェブアプリを作成しています。私の質問は私のアプリケーションのアーキテクチャです。基本的には、データベースに格納される内容を表す複数のエンティティクラス(ビジネスクラス)があります。例えば、私はエンティティクラスBookとエンティティクラスComicを持っています。
データベースにアクセスするには、EJB(DAOデザインパターンのようなkindda)を作成します。そして、ここに私の問題がある、私は正確な答えをオンラインで見つけることができませんでした。
BookクラスとComicクラスの両方を追加/削除/取得/更新するすべてのメソッドを持つ@remoteインターフェイスと@statelessクラスを1つ作成する必要がありますか?
または、2つの@remoteインターフェイスと2つの@statelessクラス(2つのEJB)を各エンティティクラスに1つずつ作成する必要がありますか?
私はもっと大きなWebアプリケーションを作成することができます。私が100のエンティティクラスを持っている場合、最初のメソッドでは1つの巨大なEJBを持っていますが、2番目のメソッドでは100のEJBを持つでしょう。私は二番目が良いと思うが、私は確信していない。どう思いますか ?JavaEEアプリの構造
答えて
Java EEアプリケーションのアーキテクチャは明らかに大きな話題ですが、一般的なアプローチはセッションAPIを作成してクライアントに一般的なAPIコールを公開し、粗粒度のEntity EJBを使用して永続データを処理する方法です。これらのEntity EJBは、データベース構造にマッピングされる、より細かく分類された多くのJavaオブジェクトおよびクラスを管理できます。
これは、開始するには良い場所かもしれません: https://docs.oracle.com/cd/A87860_01/doc/java.817/a83725/entity1.htm
私はあなたの答えまたはそれがなぜ受け入れられるのか分かりません。エンティティBean(「Entity EJB」が意味するもの)とOracle 8iは15年の技術です –
理由だけではなく、ステートレスBeanとリモートインタフェースを使用していませんか?
リモートBeanの非常に優れた機能は、一般的なものであるため、基本的に最小限のインターフェイスとリモートBeanが1つだけ必要です(SimpleEntity
およびリモートBeanを参照)。
私はCUD操作でより多くのロジックを必要とするエンティティに対して単純なエンティティといくつかの特定のビーンを読み込むために、非常に汎用的なリモートBean DAOを組み合わせて使用します。私はちょうどそれを再現するために最小限のインタフェースを抽出した。
新しいテーブルとエンティティを作成すると、リモートクライアントですぐに使用できます。
エンティティ
/*
* Complex entity with enhanced CRUD logic
*/
public class Foo implements Entity { }
/*
* Simple entity without complex CRUD logic
*/
public class Bar implements SimpleEntity { }
インタフェース
public interface Entity { }
public interface SimpleEntity extends Entity { }
/*
* Generic entity DAO interface, for remote beans and other datasources
*/
public interface IEntityDAO<T extends Entity>
{
public T get(Class<T> type, long id);
public T update(T t);
}
/*
* Generic remote bean interface for a JNDI service locator lookup
*/
public interface EntityDAOBeanRemote<T extends Entity> extends IEntityDAO<T> { }
ステートレス遠隔豆
/*
* 'abstract' base class for stateless DAO beans
*/
public class AEntityDAOBean<T extends Entity> implements EntityDAOBeanRemote<T>
{
public T get(Class<T> type, long id)
{
Session session = // obtain current hibernate session
return id == (T) session.createCriteria(type).add(Restrictions.idEq(id)).uniqueResult();
}
public T update(T t, long id)
{
Session session = // obtain current hibernate session
session.update(t);
return t; // return updated instance
}
}
/*
* Generic stateless remote DAO bean implementation
*/
@Stateless(mappedName = "SimpleEntityDAOBean")
@Remote(EntityDAOBeanRemote.class)
public class SimpleEntityDAOBean extends AEntityDAOBean<SimpleEntity> implements EntityDAOBeanRemote<SimpleEntity>
{
// empty since all methods are from parent class
}
/*
* Foo specific remote DAO bean
*/
@Stateless(mappedName = "FooDAOBean")
@Remote(EntityDAOBeanRemote.class)
public class FooDAOBean extends AEntityDAOBean<SimpleEntity> implements EntityDAOBeanRemote<Foo>
{
@Override
public Foo update(Foo foo)
{
// make specific foo things and update
return foo;
}
}
クライアントあなたのようなJNDIサービスロケータパターンを使用してBeanを呼び出すことができ、あなたのクライアントでJNDIを使用して
:
EntityDAOBeanRemote<Foo> fooDAOBeanRemote = jndiServiceLocator
.getEntityDAOBeanRemote(Foo.class);
EntityDAOBeanRemote<Bar> barDAOBeanRemote = jndiServiceLocator
.getEntityDAOBeanRemote(Bar.class);
クライアントJSF
一般的なJSFコンバータとの一般的な拡張子を持ちますDAOをGUIフレームワーク(PrimeFaces LazyDataModel
など)に使用すると、新しいエンティティをJSF Beanにすばやくアクセスしたり、GUIで編集したりできるようになります。
- 1. Nodejs/Expressjsアプリ構造
- 2. 電子新アプリの構造
- 3. Androidアプリの高度なブルートゥース/ UART構造
- 4. 奇妙な構造のiOSアプリ
- 5. のCakePHPのApp-構造:1 DB&アプリの対複数のDB&アプリ
- 6. Androidアプリの構造:DLC viaアプリ内課金
- 7. 構造内のシャッフリング構造
- 8. ツリーデータ構造のデータベース構造
- 9. JNA構造内の構造
- 10. C構造体内の構造体内部の構造体
- 11. JavaEEタイマーサービス
- 12. インポートパッケージjavaEE
- 13. JavaEEアプリケーションのアップデート
- 14. JAVAEE EclipseのFilenotfoundExcption
- 15. C++の構造体内の構造体
- 16. 私のスイッチ構造dosent(JavaScriptコントロール構造)
- 17. 構造体配列の構造
- 18. 構造と一定の構造
- 19. アプリケーションのクラス構造とデータベース構造
- 20. ActionScript 3のパッケージ構造とディレクトリ構造
- 21. mexFunctions:構造体内の構造
- 22. 構造体内の構造体
- 23. 構造体の配列 - 構造体?
- 24. 純粋なAJAXのためのJSF 2アプリの構造化
- 25. 現在のユーザーの流行語アプリのデータ構造ですか?
- 26. Angular2 ngrxのTwitterのようなアプリ。構造体AppState
- 27. JavaEEアプリケーションサーバーのCompletableFuture/parallelStream
- 28. JavaEEのSSL/TLSプロトコルバージョン
- 29. サーバーのJavaEE技術
- 30. Djangoアプリの構造体と循環参照
* JEE *は存在しません!代わりに* Java EE *を使用してください。 http://stackoverflow.com/q/36702229/1426227 –