我有一个使用 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/