2013-01-06 1 views
2

Play 1.2.5에서 JDBI를 사용하려고하고 있으며 데이터베이스 연결이 끊어지는 문제가 있습니다. 그래서 같이 Play의 DB.datasource를 사용 jdbi 인스턴스 얻기 위해Playframework 1.2.5 및 JDBI

내가 만든 클래스 (application.conf, DB = MEM 단위) H2 메모리 데이터베이스를 사용하고 있습니다 :

public class Database {  
    private static DataSource ds = DB.datasource; 

    private static DBI getDatabase() {  
     return new DBI(ds);  
    } 

    public static <T> T withDatabase(HandleCallback<T> hc) { 
     return getDatabase().withHandle(hc);  
    } 

    public static <T> T withTransaction(TransactionCallback<T> tc) { 
     return getDatabase().inTransaction(tc); 
    } 
} 

때마다 나는 데이터베이스 호출을 수행 새로운 DBI 인스턴스가 만들어 지지만 항상 같은 정적 데이터 소스 오브젝트 (play.db.DB.datasource)

를 래핑, 잠시 후 나는 다음과 같은 얻고있다 일이 뭐죠 :

CallbackFailedException occured : org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

DBI.withHandle() 및 DBI.withTransaction()의 전체적인 점은 콜백 메소드가 완료 될 때 연결을 닫고 리소스를 확보하기 때문에 혼란 스럽습니다.

나는 또한 동일한 문제가 발생했을 때마다 동일한 DBI 인스턴스를 반환하려고 시도했다.

내가 뭘 잘못하고 있니?

답변

1

Duh. 내가 withHandle()을 사용하지 않고 있던 오래된 코드에서 연결이 새게되었다. 내가 업그레이드하자마자 문제가 멈 춥니 다

+0

무엇을 업그레이드 했습니까? – hatellla

+0

withHandle()이 존재한다는 것을 깨닫기 전에 내가 작성한 코드 중 일부 –