2012-01-02 1 views
2

データベースに対してアサーションを行う必要がある実行中のローカルJBoss 5.1インスタンスに対して自動統合テストを作成しようとしています。アプリケーションサーバは、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がスローされます。これはすべて同じマシン上にあり、上記の同じ接続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を使用して接続することはできません。しかし、それが問題だったように使用されているバージョンを調べる方向で私を指摘してくれてありがとう! –