java - 使用嵌入式 OrientDB 实例是多线程环境

标签 java multithreading orientdb

我有一个使用 OrientDB 的嵌入式文档存储设置;使用对象 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 请求获取连接,然后关闭它以将连接释放回池?

最佳答案

从代码中我看到 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();
}

希望对你有帮助

关于java - 使用嵌入式 OrientDB 实例是多线程环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357507/

相关文章:

java - 创建java通用数据结构

java - 为什么我的线程不能使用 Java ExecutorService 并行运行?

android - 可以从 AsyncTask.doInBackground() 读取 UI 线程中的值

sql - OrientDB GraphED - SQL 在两个(选择顶点 RID)之间插入边?或者非常大的导入的替代方法

java - kafkaProducer 第一次尝试发送记录时无法创建主题 INVALID_REPLICATION_FACTOR

java - Session.sendToTarget() 是线程安全的吗?

java - 将所选文件调整为 JFileChooser 中的 FileFilter

java - 线程队列使用什么设计模式

mongodb - 多模型数据库与多个单独的数据库?

java - OrientDb 事务错误