从单元测试连接时,HSQL立即关闭连接

时间:2012-01-02 08:53:05

标签: java jdbc hsqldb jboss5.x

我正在尝试针对正在运行的本地JBoss 5.1实例创建自动集成测试,我需要对数据库进行断言。 appserver在服务器模式下配置了HSQL数据源,以便可以通过TCP访问。

这些是配置的相关部分(我认为):

<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“Data Source Explorer”)连接到数据库。

问题在于,当我尝试从我的测试用例中获取连接时,连接立即关闭,并且出现“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)

我在试图解释正在发生的事情时感到茫然。看起来连接正在进行,然后由服务器立即关闭,但连接为null,这会导致抛出nullpointer。请注意,这一切都在同一台机器上,我可以使用其他工具进行连接,但使用与上述相同的连接URL。

如果有人对尝试什么有任何想法,我将非常感激。

2 个答案:

答案 0 :(得分:2)

我没有尝试过这个,但是如果你在app服务器上建立连接,你可以用以下方式直接连接到数据库:

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

您可能需要使用默认数据库的完整路径。

NPE可能是所用HSQLDB版本中的一个错误。尝试用稍后的版本替换hsqldb.jar,例如HSQLDB 1.8.1.3。

答案 1 :(得分:2)

我在查看使用了什么版本的HSQLDB后发现了这个问题(fredt的回答给了我这个想法)。

由于某种原因,客户端使用HSQLDDB 2.0,但JBoss 5.1附带1.8。我改变了客户端也使用1.8,问题就消失了。非常简单,但我被困了将近一天。