2011-05-06 5 views
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) 

를?

+0

db.isClosed()는 commit() 후에 무엇을 반환합니까? – MeBigFatGuy

+0

@MeBigFatGuy, 나는 그것을 orientdb의 버그로 발견했다. 내 대답을 참조하십시오 – Freewind

+0

자바로 데이터베이스를 사용할 때도 똑같은 문제가 발생했습니다. 연결이 설정되지 않았기 때문에 예외가 발생했습니다. 따라서 연결을 시작하지 않고 닫을 수 없으므로 예외가됩니다. Freewind의 의견을 찾으면 OrientDB의 windows 경로를 사용하여 연결을 설정하는 동안 오류가 발생합니다. –

답변

5

마지막으로 Orientdb의 버그를 발견했습니다. Windows 경로를 올바르게 처리 할 수 ​​없으며 좋은 오류 메시지를 제공하지 않습니다.

local:c:\orientdb이 아닌 local:c:/orientdb을 사용하면 모든 문제가 해결됩니다.

나는 이것을 orientdb 팀에보고했습니다.

+0

둘 다 시도했지만 여전히 같은 오류가 발생합니다. – KJW

+0

확인해 주셔서 감사합니다! 그냥 똑같은 버그를 발견했습니다. –

관련 문제