Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[OT] HSQLDB, Linux, podlaczenie do bazy

4 views
Skip to first unread message

jnn

unread,
Jan 25, 2007, 3:30:03 PM1/25/07
to
Witajcie

Przepraszam, że trochę OT ale temat pasowałby aż na trzy grupy (linux, bazy
danych, java). Piszę jednak tutaj gdyż według mnie baza HSQLDB jest
wykorzystywana praktycznie tylko przez programistów języka Java.


Do rzeczy:

Chciałem przenieść program (aplikacja webowa oparta na Hibernate i Strutsie) na
linux'a (kernel 2.6.17 - xubuntu 6.10) ale spotkałem się z problemem i proszę o
pomoc.

Dla uproszczenia posłużyłem się tutorialem ze strony www.hsqldb.org


Próbuję uruchomić HSQLDB (1.8.0) w trybie serwera poleceniem:

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 xdb

będąc w katalogu $HSQLDBHOME/data

i serwer startuje:

[Server@10b30a7]: Initiating startup sequence...
[Server@10b30a7]: Server socket opened successfully in 53 ms.
] opened sucessfully in 1358 ms.x=0, id=0, db=file:mydb, alias=xdb
[Server@10b30a7]: Startup sequence completed in 1433 ms.
[Server@10b30a7]: 2007-01-25 20:13:57.798 HSQLDB server 1.8.0 is online


Jak wydaje polecenie netstat to widać, że serwer nasłuchuje:

$ netstat -a | grep 9001
tcp6 0 0 *:9001 *:* LISTEN

a w katalogu data pojawiają sie pliki mydb.lck, mydb.log i mydb.properties


Jednak gdy próbuję podłączyć się DatabaseManagerem:

java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager

do bazy xdb to otrzymuje:

java.sql.SQLException: Database does not exists in statement [xdb]
(reszta komunikatu na końcu)


Najdziwniejsze jest jednak to, że startując serwer domyślny:

java -classpath ../lib/hsqldb.jar org.hsqldb.Server

mogę podłączyć się programem (tutorial od hibernate) używającym hibernate i
wprowadzać oraz listować dane. Jednak jak próbuję dodać nazwę bazy w
hibernate.cfg.xml (w przykładzie wyżej to xdb) to mam ten sam komunikat
(Database not exists in statement [xdb] ).


Macie jakieś pomysły jak to rozwiązać? Obawiam się, że szukam za daleko a
rozwiązanie jest trywialne.

Dodam, że wszystko to działa pod Windowsem 2000 Pro. I na obu systemach jest
zainstalowana ta sama wersja Javy (JDK 1.5)

Pozdrawiam

Cały komunikat, który dostaje od DatabaseManagera:

java.sql.SQLException: Database does not exists in statement [xdb]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at org.hsqldb.util.ConnectionDialog.createConnection(Unknown Source)
at org.hsqldb.util.ConnectionDialog.actionPerformed(Unknown Source)
at java.awt.Button.processActionEvent(Button.java:388)
at java.awt.Button.processEvent(Button.java:356)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:153)
at java.awt.Dialog$1.run(Dialog.java:517)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Pawel Chmielewski

unread,
Jan 25, 2007, 4:45:29 PM1/25/07
to
jnn wrote:

> java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0
> xdb
>

> java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager
>
> do bazy xdb to otrzymuje:
>
> java.sql.SQLException: Database does not exists in statement [xdb]
> (reszta komunikatu na końcu)
>

> Macie jakieś pomysły jak to rozwiązać? Obawiam się, że szukam za daleko a
> rozwiązanie jest trywialne.

U coś takiego zadziałało jak należy:

serwer:
$ java -cp hsqldb-1.8.0.4.jar org.hsqldb.Server -database.0 test -dbname.0
test

i klient:
java -cp hsqldb-1.8.0.4.jar org.hsqldb.util.DatabaseManager --driver
org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/test --user sa

Nie napisałeś jaki podajesz URL przy łączeniu się z bazą, więc może tu jest
problem.

Pawel

jnn

unread,
Jan 25, 2007, 5:54:51 PM1/25/07
to
> Nie napisałeś jaki podajesz URL przy łączeniu się z bazą, więc może tu jest
> problem.

W DatabaseManagerze jako adres podaje:
jdbc:hsqldb:hsql://localhost/xdb
jdbc:hsqldb:hsql://localhost/test << w przypadku Twojego przykładu


Sterownik to:
org.hsqldb.jdbcDriver

Sterownik jest na pewno widziany przez Javę. Na początku zgłaszał błąd ale
dodałem hsqldb.jar do CLASSPATH i nawet wrzuciłem dodatkowo do jre/lib/ext no i
poszło.


Nadal mogę podłączyć się tylko i wyłącznie do domyślnego serwera hsqldb:

java -classpath ../lib/hsqldb.jar org.hsqldb.Server

jak już próbuję zdefiniować nazwę bazy danych to pojawia się wspomniany
wcześniej błąd.


Pozdrawiam

Maciej Zobniow

unread,
Jan 25, 2007, 6:06:52 PM1/25/07
to
jnn wrote:

> $ netstat -a | grep 9001
> tcp6 0 0 *:9001 *:* LISTEN

Nie znam tej bazy, ale to pokazuje ci ze cos nasluchuje na porcie 9001 w
tcp6. To jest protokol dla ipv6. Jestes pewien ze managerem tez laczysz
sie po ipv6??
Byc moze ztrzeba cos zmienic w configu zeby otwieral socket dla ipv4...
Zeby obadac czy baza napewno chodzi zrob:
ps auxwww | grep java
i zobacz czy widzisz proces javy dla tej bazy.
Zeby upewnic sie czy na danym porcie nasluchuje to czego oczekujesz,
mozesz posluzyc sie poleceniem:
lsof -n -i
i tu mozesz np. grepowac po procesach javy (lsof pokaze ci wszytkie
otwarte sockety razem z nazwa programu ktory go otworzyl)

Pzdr
Maciek

Pawel Chmielewski

unread,
Jan 26, 2007, 4:08:12 AM1/26/07
to
jnn wrote:

>> Nie napisałeś jaki podajesz URL przy łączeniu się z bazą, więc może tu
>> jest problem.
>
> W DatabaseManagerze jako adres podaje:
> jdbc:hsqldb:hsql://localhost/xdb
> jdbc:hsqldb:hsql://localhost/test << w przypadku Twojego przykładu
>
>
> Sterownik to:
> org.hsqldb.jdbcDriver

A jak odpalisz dokladnie to:
java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager --driver
org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/xsd --user sa

to jaki jest efekt?

jnn

unread,
Jan 26, 2007, 5:04:33 PM1/26/07
to
> A jak odpalisz dokladnie to:
> java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager --driver
> org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/xsd --user sa
>
> to jaki jest efekt?
>

Mam dokładnie to samo: Database does not exist in statement [xdb]

Polecenie serwera:

java -classpath ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 xdb


Polecenie DatabaseManagera:

java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager --driver

org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost/xdb --user sa


Udało mi się połączyć DatabaseManagerem z bazą na innym komputerze. Odwrotnie
nie mogę. Może to problem IPv6 o którym pisze Maciek. Próbuję dalej :)

Pozdrawiam.

jnn

unread,
Jan 26, 2007, 5:16:47 PM1/26/07
to
> Nie znam tej bazy, ale to pokazuje ci ze cos nasluchuje na porcie 9001 w
> tcp6. To jest protokol dla ipv6. Jestes pewien ze managerem tez laczysz
> sie po ipv6??

Nie jestem pewien ale trochę dziwne, że system próbuje podłączyć się po IPv6
akurat do bazy podczas gdy mogę wchodzić na strony www itd. .

> Byc moze ztrzeba cos zmienic w configu zeby otwieral socket dla ipv4...
> Zeby obadac czy baza napewno chodzi zrob:
> ps auxwww | grep java
> i zobacz czy widzisz proces javy dla tej bazy.


Otrzymuję coś takiego:

$ ps auxwww | grep java
jnnm 4214 1.1 3.3 263276 17200 pts/0 Sl+ 23:13 0:01 java -classpath
../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 xdb?
jnnm 4246 0.0 0.1 2808 760 pts/1 R+ 23:15 0:00 grep java


> Zeby upewnic sie czy na danym porcie nasluchuje to czego oczekujesz,
> mozesz posluzyc sie poleceniem:
> lsof -n -i
> i tu mozesz np. grepowac po procesach javy (lsof pokaze ci wszytkie
> otwarte sockety razem z nazwa programu ktory go otworzyl)
>

$ lsof -n -i | grep java
java 4214 jnnm 5u IPv6 10339 TCP *:9001 (LISTEN)

Masz rację, nasłuchuje na IPv6. Czyli muszę poszukać gdzie to zmienić i powinno
pójść bez problemów.


Pozdrawiam

jnn

unread,
Jan 30, 2007, 12:46:34 PM1/30/07
to
> Nie znam tej bazy, ale to pokazuje ci ze cos nasluchuje na porcie 9001 w
> tcp6. To jest protokol dla ipv6. Jestes pewien ze managerem tez laczysz
> sie po ipv6??

Udało mi się wyłączyć IPv6:

$ lsof -n -i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 4390 jnnm 5u IPv4 10784 TCP *:9001 (LISTEN)


Ale niestety nie pomogło to, nadal nie mogę się połączyć.

Ma ktoś może pomysł jak rozwiązać ten problem? DatabaseManager działa bo mogę
podłączyć się do bazy na innym komputerze (po IPv4). Baza wystartowana na
xubuntu działa bo nasłuchuje i jest w procesach.

Pozdrawiam.


Dla ciekawych jak wyłączyć IPv6 pod (k,x)ubuntu:

Jest kilka sposobów, u mnie zadziałało stworzenie pliku blacklist-ipv6 w
katalogu /etc/modprobe.d/ o treści:

#disable ipv6
blacklist ipv6


Tak jak to zasugerowano na forum ubuntu (szósta podstrona):

http://ubuntuforums.org/showthread.php?t=87798

0 new messages