私のプロジェクトの中心にあるビジネス ロジックの一部は、リンクされたデータの検索を実行する必要があります。現在、私はこの部分をこのようなシングルトン セッション 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 が含まれます。ResultSet
SearchResult
SparqlEndpoint
@Stateless
これは私の頭に浮かんだ最も合理的なアーキテクチャですが、それが正しいかどうかを知る必要があります。現在行っているように、Bean を使用しSingleton
てコアを実装する必要がありますか?それとも、Stateless
セッション Bean の方が適切ですか? データベース接続の初期化には通常、少なくとも数秒かかります。これは NoSQL であり、トランザクションをサポートしていないことに注意してください。この Bean に write メソッドなどを追加する予定はありません。他の EJB がステートレスであることは正しいですか? (データベースへの書き込みを実行する) インデックス作成エンジンを別の EJB として公開したい場合、どのように実装すればよいですか?
前もって感謝します。