1

現在、Eclipseを使用して取り組んでいる大規模なプロジェクトがあります。通常、一人のチームとして、これらの問題は問題になりませんが、私たちのチームは一人ではないので、特定のチームメンバーが取り組むプロジェクトの一部を分割できる必要があります。

簡単に言うと、2つのレイヤーを分離する必要があるとします。1。各DAOは個別に処理される個別のJavaプロジェクトです。2。Web層サービスレイヤーにはすべてのサービスエンドポイントが含まれており、すべてを参照できる必要があります。 DAOの。このレイヤーは、動的WebプロジェクトとしてTomcatで実行され、エンドポイントの作成と管理を処理する部分としてAdobe LiveCycleDataServicesを利用します。

現在、私たちが直面している問題は、DAOを作成し、それを個別に単体テストすると、うまく機能することです。しかし、それをサービスプロジェクトに参照して実行しようとすると、特定のjarの2つの異なるバージョンが参照されているという事実に関連するあらゆる種類の問題が発生し始め、サーバーの実行時にエラーが発生し始めます。

その結果、問題のjarファイルをプルして、これが将来再び問題にならないようにすることで問題を解決できることはわかっていますが、前に述べたように、これは複数の人が取り組んでいる大規模なプロジェクトであり、銃の下にあるときに依存関係の問題を取り除くことに時間を費やしたい。

代替ソリューションをどこに進めるかについての推奨事項を探していますか?私たちのチームはJavaEEを初めて使用するため、JavaEEですべてを結び付けるために何を使用できるか、またはそれが実行可能なソリューションであるかどうかについては、あまり関係がありません。DAOをEJBに変換し、EARライブラリにデプロイすることを検討する必要がありますか?もしそうなら、私たちのサービス層はどこにあり、EJBはそれ自身のクラスパスを維持しているのでサービス層はDAOクラスを参照できますか(私たちが読んだものから?)私たちは間違ったパスを見下ろしていますか、それとも完全に間違っていますかJavaEEの現在の理解では?

どんな援助も大歓迎です。私たちはまだこのプロジェクトの枠組みの段階にあり、長期的にそれを維持できるようにしたいと思っています。

4

3 に答える 3

2

1人以上のチームでJavaEEを使用するときに物事を整理するために、次のことを提案できます。

  • Mavenを使用して、ビルドプロセスとライブラリの依存関係を管理します。

    Mavenの学習曲線は小さいですが、それを理解すると、感謝するでしょう。Mavenを使用することで、クラスパスの管理をEclipseに依存しなくなります。

    チームで作業するときに本当に役立つと思うのは、install機能です。もしあなたがEJBモジュールのバージョン1.0、例えばcore-ejb-module-1.0で目覚めていて、それを安定した状態にして、プロジェクトで働くすべての人にこれからそれを参照してもらいたいとしましょう。

    次に、次のようなMavenコマンドを実行します。mvn clean package install

    Mavenはこのモジュールをクリーンアップし、コンパイルし、テストを実行し、jarを作成してから、定義したリポジトリーにインストールします。あなたの会社のどのコンピュータでもかまいません。

    これで、他のプロジェクトで作業している人に、.pomファイルのこの依存関係バージョンを更新するように指示できます。次のビルドでは、コンパイルする前に、mavenがこのライブラリをダウンロードして使用します。本当にきちんと。これ以上のクラスパス地獄はありません。(この投稿に記載されているように、常に最新のライブラリを自動的に参照する方法は他にもありますが、いくつかの注意点があります。とにかく、これは単なる例です。)

  • DAOパターンの代わりにJPA/EJBを使用します。

    DAOはあらゆる種類のデータアクセスを意味すると言う人もいれば、実際にはDAOパターンを使用してオブジェクトにアクセスすることを意味する人もいます。その場合は、JPAを使用するときに使用する必要がなくなります。(少なくとも最も一般的なシナリオでは)。

    私の場合、任意のエンティティでCRUD操作を実行でき、一元化されたクエリ管理を備えた汎用EntityServiceがあります。次に、データベース関連の操作を実行する必要があるすべてのEJBが、この人を注入してその仕事をする可能性があります。

提案として、Mavenを使用すると、プロジェクトを次のように編成できます。

  • コアプロジェクト構造
    • コア(pomルート)
    • core-ejb-module(たとえば、EntityServiceなどのすべての汎用EJBが含まれます。)
    • core-jpa-module(Interfaces、MappedSuperclassesなどのすべてのJPA汎用定義が含まれます。)
    • core-jsf-module(抽象コントローラー、汎用コンバーター、FacesContextのラッパーなど、すべてのJSF汎用定義が含まれます。)

コア汎用モジュールのセットアップが完了したので、次を作成できます。

  • アプリケーション構造
    • app(pom root)
    • app-ear-module(このアプリケーションには他のすべてのモジュールが含まれます。共有jarはear / libフォルダーにあるため、他のすべてのモジュールがそれらを参照できます。)
    • app-ejb-module-a(アプリケーションのビジネスレイヤー用のEJBを含みます。core-ejb-moduleを使用します)
    • app-ejb-module-b(ejbモジュールがたくさんある場合があります。ejbモジュールのみを含むプロジェクトがある場合もあります。他のアプリは、Mavenを介してそれらへの依存を宣言します。)
    • app-jpa-module(データベーステーブルを表すJPAエンティティの定義が含まれています。core-jpa-moduleによって異なります)
    • app-web-module(このアプリケーションのページ、コントローラー、およびコンバーターを保持します。)

私はあなたがその考えを理解したと思います。物事はゆるく結びついている傾向があり、好きなようにプロジェクトを整理することができます。

これは、説明するための簡単な例です。Mavenについてはあまり説明しませんでしたが、興味があれば、きっと役立つと思います。

それがあなたにいくつかのアイデアを与え、何らかの形であなたを助けるかもしれないことを願っています。

[]の

于 2012-05-17T22:11:09.277 に答える
2

私はMavenの推奨事項を2番目にしています。これにより、プロジェクト構造にあらゆる種類の健全性を追加できます。

Mavenは、を介してEclipseワークスペースを生成することもできますmvn eclipse:eclipse

EJBに関する重要な説明。ava EE 6以降、EJBをサーブレットから分離する必要がなくなり、warファイル内のまったく同じjarでそれらを一緒に使用できるようになりました。

したがって、EJBを使用するかどうかは、以前のようにパッケージ化やクラスローダーに影響を与えないことを理解してください。これらは現在、別々の決定です。EARとクラスローダーの分離は、クラスローダーの分離とそれがもたらす複雑さを必要とする場合に使用する可能性のある機能と見なす必要があります。ほとんどのアプリケーションは単にそれを必要とせず、サーブレット、ejbs、jpaエンティティ、cdi Bean、jaxrsサービス、およびその他の必要なものを含むwarファイルだけで十分です。それらをどのように分離するか、またはそれらをまったく分離することをわざわざしたいかどうかを自由に決めることができます。

EJBは、トランザクション管理のために優れたDAOを作成します。これは、プレーンなTomcatからは得られませんが、TomEEを介してTomcatで利用可能になり、Eclipseで正常に機能します。依存関係の理由ではなく、その理由でEJBを検討する必要があります。

ちなみに、Java EEを初めて使用する場合は、次のことが役立つ場合があります。

于 2012-05-17T21:58:46.850 に答える
1

同じ依存関係のセットを使用してすべてのサブコンポーネントを実行できる場合は、Mavenビルドに移行すると役立つ場合があります。

Mavenを使用すると、すべてのサードパーティの依存関係バージョンを1か所で管理するトップレベルのプロジェクトを定義できるため、すべてのモジュールが同じライブラリバージョンに対してビルド、テスト、およびデプロイされます。また、依存関係の1つが変更された場合にプロジェクトが正しく再構築されることを保証するため、Mavenが採用したマルチモジュールアプローチに適していることがわかる可能性があります。

以前と同じように、動的Webプロジェクトを引き続き使用できます。Eclipseは、サービスプロジェクトの一部としてDAOを自動的にデプロイします(IIRCは、DAOをユーティリティモジュールとして特徴付けるために必要です)。

EJBルートをたどる場合は、各EARが独自のクラスローダーを取得するため、さまざまな依存関係のセットを使用できることは間違いありません。しかし、あなたの立場では、私は最初にあなたの依存関係管理を改善することを検討する傾向があります-それはおそらくより安くて簡単でしょう。

于 2012-05-17T21:33:54.170 に答える