我项目核心的部分业务逻辑必须对链接数据执行搜索。目前,我已经使用像这样的单例会话 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 由另一个名为 EJB 的 EJB 暴露给我的应用程序的其他部分,该 EJBSparqlEndpoint
负责将 EJB 转换ResultSet
为更舒适的SearchResult
对象,该对象包含字符串形式的模型,其语法由客户端指定,结果总数和其他元数据。SparqlEndpoint
EJB 很简单,@Stateless
并且具有客户端使用的本地接口。这些客户端包括 JSF 托管 bean 和几个将其公开为 SOAP 和 RESTful Web 服务的 EJB。
这是我想到的最合理的架构,但我需要知道我是否做得对。我应该像现在这样使用Singleton
bean 来实现核心,还是Stateless
会话 bean 更合适?数据库连接初始化通常至少需要几秒钟,注意它可能比它是 NoSQL 并且不支持事务更有用。我不打算向这个 bean 添加诸如 write 方法之类的任何东西。其他 EJB 是无状态的是否正确?如果我想将我的索引引擎(在数据库上执行写入)公开为另一个 EJB,我应该如何实现它?
提前致谢。