2012-01-02 65 views
2

我試圖針對運行的本地JBoss 5.1實例創建一個自動化集成測試,其中需要對數據庫進行斷言。應用服務器在服務器模式下配置有HSQL數據源,以便通過TCP訪問。當從單元測試連接時,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的」數據源瀏覽器「。

問題是,當我嘗試從我的測試案例中獲得連接時,連接立即關閉,出現「Broken Pipe」錯誤。

這是我試圖得到一個連接:

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) 

我在試圖解釋發生了什麼,它看起來正在建立連接,然後立即由服務器關閉,但連接然後爲空,導致引發空指針。請注意,這全部在同一臺計算機上,並且我可以使用其他工具進行連接,但使用上述相同的連接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.jar,例如HSQLDB 1.8.1.3。

+0

嗨,不幸的是,它不可能連接使用文件的URL作爲數據庫已被鎖定的應用程序服務器,這是有道理的方式。但是,非常感謝你指點我,看看這個問題所使用的版本的方向! – 2012-01-03 07:54:40