3

私のプロジェクトの中心にあるビジネス ロジックの一部は、リンクされたデータの検索を実行する必要があります。現在、私はこの部分をこのようなシングルトン セッション Bean を使用して実装しています (SPARQL は、リンクされたデータを使用して構築された RDF モデルのクエリ言語です)。

@Singleton
@Startup
public class SparqlEngine {

    @PostConstruct
    private void init() {
        // Initialiaze the model by connecting to the database
    }

    public ResultSet searchBySparql(String sparqlQuery) {
        // Perform the search on the model which is stored in the database
    }

    @PreDestroy
    private void cleanup() {
        // Close database connection
    }

}

この EJB は、クライアントによって指定された構文、結果の総数、およびその他のメタデータを含む文字列形式のモデルを含む、より快適なオブジェクトSparqlEndpointに変換する別の EJB によってアプリケーションの他の部分に公開されます。EJB はシンプルで、クライアントが使用するローカル インターフェイスを備えています。これらのクライアントには、JSF マネージド Bean と、それを SOAP および RESTful Web サービスとして公開する 2 つの EJB が含まれます。ResultSetSearchResultSparqlEndpoint@Stateless

これは私の頭に浮かんだ最も合理的なアーキテクチャですが、それが正しいかどうかを知る必要があります。現在行っているように、Bean を使用しSingletonてコアを実装する必要がありますか?それとも、Statelessセッション Bean の方が適切ですか? データベース接続の初期化には通常、少なくとも数秒かかります。これは NoSQL であり、トランザクションをサポートしていないことに注意してください。この Bean に write メソッドなどを追加する予定はありません。他の EJB がステートレスであることは正しいですか? (データベースへの書き込みを実行する) インデックス作成エンジンを別の EJB として公開したい場合、どのように実装すればよいですか?

前もって感謝します。

4

2 に答える 2

2

シングルトンを使用すると、リソースへの同時アクセスに関する問題を簡単に処理できます。コンテナー管理の並行性またはBean管理の並行性を使用できます。

ステートレスセッションBeanを使用すると、パフォーマンスが得られます。EJBコンテナは、これらのステートレスBeanの多くのインスタンスのプールを作成し、要求が来たときにそれらをクライアントに貸し出します。つまり、マルチユーザーアクセスに適しています。

于 2012-08-30T19:05:13.733 に答える
1

..展開時に一度実行し、シングルトンが既に初期化されたモデルですべてのデータベースアクセスタスクを処理できるようにすることをお勧めします (アプリケーションがクエリにすばやく応答することが重要です)...

DB への接続管理は、SLSB 内で手動で行うべきではありません。Datasource API の活用を検討する必要があります。ネットワーク リソース (DB 接続など) の管理は、アプリケーション サーバーに任せるのが最善です。特に、このようなコンテナー管理環境ではそうです。App Server は、接続のプールを初期化して維持します。

... エンドポイント EJB には、将来、実際のエンジンとはあまり関係のない他のタスクが含まれる可能性があります。最後に、Web サービス EJB も将来追加される可能性があります...

このコメントでは、未来という言葉を 2 回使用しています。これは憶測であり、偶発的な複雑性をもたらします。必要に応じていつでもリファクタリングできます。シンプルに保つことを目指します。将来のための設計とコーディングは常に高価です..

..dump ファイルであり、NoSQL クラスターが利用できないテスト環境で使用されます...

ダンプ ファイルを使用する代わりに、優れたモッキングフレームワークを使用してみませんか? 単体テストは環境に依存すべきではありません

于 2012-08-30T17:55:32.447 に答える