HSQL закрыл соединение сразу при подключении из юнит-теста - PullRequest
2 голосов
/ 02 января 2012

Я пытаюсь создать автоматизированный интеграционный тест на работающем локальном экземпляре JBoss 5.1, где мне нужно сделать утверждения для базы данных. Сервер приложений сконфигурирован с источником данных 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)

Я затрудняюсь понять, что происходит. Похоже, что соединение устанавливается, а затем немедленно закрывается сервером, но соединение становится пустым, что приводит к сбросу нулевого указателя. Обратите внимание, что это все на одном компьютере, и я могу подключиться с помощью других инструментов, но с тем же URL-адресом подключения, как описано выше.

Если у кого-нибудь есть идеи, что попробовать, я был бы очень благодарен.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Я обнаружил проблему, посмотрев, какие версии HSQLDB использовались (ответ от fredt дал мне идею).

По какой-то причине клиент использовал HSQLDDB 2.0, но JBoss 5.1 поставляется с 1.8. Я изменил клиента, чтобы также использовать 1.8, и проблема ушла. На самом деле все довольно просто, но я застрял на этом почти на один день.

2 голосов
/ 02 января 2012

Я не пробовал этого, но если ваше соединение установлено на сервере приложений, вы можете подключиться напрямую к базе данных с помощью:

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

Возможно, вам придется использовать полный путь кбаза данных по умолчанию.

Возможно, NPE является ошибкой в ​​используемой версии HSQLDB.Попробуйте заменить hsqldb.jar более поздним, например, HSQLDB 1.8.1.3.

...