2012-01-02 4 views
2

데이터베이스에 대한 어설 션을 수행해야하는 실행중인 로컬 JBoss 5.1 인스턴스에 대해 자동화 된 통합 테스트를 만들려고합니다. appserver는 TCP를 통해 액세스 할 수 있도록 서버 모드에서 HSQL 데이터 소스로 구성됩니다.유닛 테스트에서 연결할 때 HSQL이 즉시 닫혔습니다

<connection-url>jdbc:hsqldb:hsql://${jboss.bind.address}:1701</connection-url> 
<driver-class>org.hsqldb.jdbcDriver</driver-class> 
<user-name>sa</user-name> 
<password></password> 
<mbean code="org.jboss.jdbc.HypersonicDatabase" 
    name="jboss:service=Hypersonic"> 
    <attribute name="Port">1701</attribute>   
    <attribute name="BindAddress">${jboss.bind.address}</attribute>  
    <attribute name="Silent">true</attribute> 
    <attribute name="Database">default</attribute> 
    <attribute name="Trace">false</attribute> 
    <attribute name="No_system_exit">true</attribute> 
</mbean> 

그것은 배포 된 응용 프로그램이 잘 실행하고 나는 그런 "hsqldbclient 같은 외부 도구를 사용하여 데이터베이스에 연결할 수 오전에 작동합니다

구성 관련 (내가 생각하는) 부분입니다 "및 Eclipse"데이터 소스 탐색기 "가 있습니다.

문제는 테스트 케이스에서 연결을 시도하면 연결이 즉시 닫히고 "깨진 파이프"오류가 발생한다는 것입니다.

DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:1701", "sa", ""); 

이 내가 클라이언트 측에서 얻을 오류입니다 :

내가 연결을 얻으려고하는 방법이다

Caused by: org.hsqldb.HsqlException: connection exception: connection failure: java.net.SocketException: Broken pipe 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.ClientConnection.execute(Unknown Source) 
    at org.hsqldb.ClientConnection.<init>(Unknown Source) 

을 그리고 이것은 내가 서버 측에서 얻을 오류입니다 :

09:46:04,132 ERROR [STDERR] Exception in thread "HSQLDB Connection @fa3b82" 
09:46:04,133 ERROR [STDERR] java.lang.NullPointerException 
09:46:04,133 ERROR [STDERR]  at org.hsqldb.ServerConnection.close(Unknown Source) 
09:46:04,133 ERROR [STDERR]  at org.hsqldb.ServerConnection.run(Unknown Source) 
09:46:04,133 ERROR [STDERR]  at java.lang.Thread.run(Thread.java:662) 

나는 무슨 일이 일어나고 있는지 해석하는 데 어려움을 겪고 있습니다. 연결이 만들어지고 서버에 의해 즉시 닫히지 만 연결이 null이면 nullpointer가 throw됩니다. 이 컴퓨터는 모두 같은 컴퓨터에 있으며 다른 도구를 사용하여 연결할 수 있지만 위에서 설명한 것과 동일한 연결 URL을 사용하여 연결할 수 있습니다.

누구나 시도해 볼 아이디어가 있다면 매우 감사하게 생각합니다.

답변

2

어떤 버전의 HSQLDB를 사용했는지 살펴본 후 문제를 발견했습니다 (fredt의 답은 저에게 그 아이디어를주었습니다).

클라이언트가 HSQLDDB 2.0을 사용했지만 JBoss 5.1에 1.8이 포함되어 있습니다. 나는 1.8을 사용하도록 클라이언트를 변경했고 문제는 사라졌다. 아주 간단하지만 실제로 이것으로 거의 하루 동안 붙어있었습니다.

2

나는이 시도하지 않은하지만 연결이 응용 프로그램 서버에서 이루어집니다, 당신은 함께 데이터베이스에 직접 연결할 수 있습니다 :

DriverManager.getConnection("jdbc:hsqldb:file:default", "sa", ""); 

당신은 기본적으로 전체 경로를 사용해야합니다 데이터 베이스.

NPE는 아마도 사용 된 HSQLDB 버전의 버그 일 것입니다. HSQLDB 1.8.1.3과 같이 hsqldb.jar을 나중에 대체하십시오.

+0

안녕하세요, 안타깝게도 데이터베이스가 이미 응용 프로그램 서버에 의해 잠겨 있기 때문에 URL url을 사용하여 연결할 수 없습니다. 그러나 문제가되는대로 사용 된 버전을 조사하는 방향으로 나를 가리켜 주셔서 감사합니다! –

관련 문제