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

Java 使用嵌入式OrientDB实例是一个多线程环境,java,multithreading,orientdb,Java,Multithreading,Orientdb,我有一个带有OrientDB的嵌入式文档存储设置;使用对象API。我的应用程序是多线程的(例如,我的应用程序的一部分是REST),需要访问数据库 根据文档(),我应该在类似于我的应用程序中使用ConnectionPool。它们提供了以下代码示例: // OPEN THE DATABASE OObjectDatabaseTx db= OObjectDatabasePool.global().acquire("remote:localhost/petshop", "admin", "admin");

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

根据文档(),我应该在类似于我的应用程序中使用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()返回一个单实例,当然构造函数中没有设置用户名和密码。 我认为为了避免使用用户名和密码,每个请求都不要使用OObjectDatabasePool.global(),而是使用OObjectDatabasePool创建自己的池单例

然后从这个实例获取数据库

只用

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();
}
希望能有帮助

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();
}