2012-01-02 125 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