使用嵌入式OrientDB实例是一个多线程环境

时间:2014-10-14 09:41:21

标签: java multithreading orientdb

我有一个使用OrientDB的嵌入式文档存储设置;使用Object API。我的应用程序是多线程的(例如我的应用程序的一部分是REST)并且需要访问数据库。

根据文档(http://www.orientechnologies.com/docs/last/orientdb.wiki/Object-Database.html),我应该在类似于我的应用程序中使用ConnectionPool。它们提供以下代码示例:

// OPEN THE DATABASE
OObjectDatabaseTx db= OObjectDatabasePool.global().acquire("remote:localhost/petshop", "admin", "admin");

// REGISTER THE CLASS ONLY ONCE AFTER THE DB IS OPEN/CREATED
db.getEntityManager().registerEntityClass("org.petshop.domain");

try {
  ...
} finally {
  db.close();
}

然而,它出现了"这是做了一些工作。据我所知,对于每个REST请求,我需要建立与数据库的连接(诚然,代码可能是缓存连接)。为此,我每次都需要用户名和密码,这对我来说很奇怪 - 也许是因为我习惯于为我管理所有这些。

我的问题基本上是 - 我做对了吗?我是否必须使用用户名和密码获取每个REST请求的连接,然后关闭它以将连接释放回池中?

1 个答案:

答案 0 :(得分:1)

从代码中我看到OObjectDatabasePool.global()返回一个Singleton实例,当然没有在构造函数中设置用户名和密码。 我想避免使用用户名和密码,每个请求都不要使用OObjectDatabasePool.global()但是使用OObjectDatabasePool创建自己的池单例

OObjectDatabasePool singleton = new OObjectDatabasePool("remote:localhost/petshop", "admin", "admin").setup(1,10);;

然后从此实例获取数据库

只需使用

OObjectDatabaseTx db = singleton.acquire();
// REGISTER THE CLASS ONLY ONCE AFTER THE DB IS OPEN/CREATED
db.getEntityManager().registerEntityClass("org.petshop.domain");
try {
  ...
} finally {
  db.close();
}

希望有所帮助