1

orientdb を使用しようとしています。サンプルは非常に単純です。

package models;

import java.util.List;

import com.orientechnologies.orient.core.db.object.ODatabaseObjectPool;
import com.orientechnologies.orient.core.db.object.ODatabaseObjectTx;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;

public class User {

    public String name;

    public static void main(String[] args) {
        String uri = "local:c:\\orientdb";

        ODatabaseObjectTx db = ODatabaseObjectPool.global().acquire(uri, "admin", "admin");
        db.getEntityManager().registerEntityClass(User.class);

        User user = new User();
        user.name = "aaa";
        db.save(user);

        List<?> list = db.query(new OSQLSynchQuery<Long>("select count(*) from User"));
        System.out.println(list);
        db.commit();
        db.close(); // ****** throws exception
    }
}

ただし、最後の行db.close()で例外がスローされます。

Exception in thread "main" com.orientechnologies.common.concur.lock.OLockException: Can't release a database URL not acquired before. URL: c:\orientdb
    at com.orientechnologies.orient.core.db.ODatabasePoolAbstract.release(ODatabasePoolAbstract.java:81)
    at com.orientechnologies.orient.core.db.ODatabasePoolBase.release(ODatabasePoolBase.java:43)
    at com.orientechnologies.orient.core.db.object.ODatabaseObjectTxPooled.close(ODatabaseObjectTxPooled.java:81)
    at models.User.main(User.java:26)

どこが間違っていますか?

4

1 に答える 1

5

最後に、Orientdbのバグであることがわかりました。Windowsパスを正しく処理できず、適切なエラーメッセージが表示されません。

使わlocal:c:/orientdbなくlocal:c:\orientdbても大丈夫です。

これをorientdbチームに報告しました。

于 2011-05-06T06:33:54.670 に答える