Aplet - połączenie z bazą danych

0

Witam,

mam problem z działaniem połączenia z bazą danych w aplecie.

Cały projekt zrobiłem w netbeans. I aplet w netbeans działa jak chcę - łączy się z bazą danych, pobiera dane, zapisuje je. Ale problem pojawił się jak umieściłem go na stronie - strona na dysku lokalnym, baza danych też localhost - tak samo jak w netbeans. W tym momencie przy połączeniu z bazą dostaję wyjątek: communication link failure. I nie rozumiem dlaczego - przecież ten sam string łączy się w netbeans.

Aplet jest podpisany, ma wszystkie prawa, a na stronie jest umieszczony z użyciem htmlconvertera. MySQL ma wyłączone blokowanie połączenia przez tcp/ip.

Macie jakieś rady?

0

Jakie informacje wypluwa systemowa konsola JVM (jakies wyjatki)? Moze konfigurujesz aplikacje z plikow zewnetrznych, ktore nie moga zostac odnalezione po zmianie polozenia apletu? AFAIR, podobny watek juz sie przewinal przez forum. Inna kwestia: domyslnie, podczas instalacji JDK instaluje sie rowniez JRE (wiec dla MS Windows jest np.: C:\Program Files\Java\jre1.6.0_18 i C:\Program Files\Java\jdk1.6.0_18\jre).

0

Na początku dodam, że aplet jest napisany na szybko i jest cały w jednym pliku - robi zestawienie z danych w bazie i jest możliwość dodania nowych rekordów. W netbeans po prostu zbudowałem jar'a. Nie używałem edytora graficznego, ale to moim zdaniem nie ma znaczenia.

Na początku jest przechwycony wyjątek:

2010-02-17 2051 default.MainWindow initComponents
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1119)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2257)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:784)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:354)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at default.MainWindow.initComponents(MainWindow.java:88)
at default.MainWindow$1.run(MainWindow.java:64)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

A kolejne wyjątki (raczej) wynikają z tego, że nie ma połączenia z bazą:

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1119)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2178)
... 21 more
Caused by: java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission [0000:1]:3306 connect,resolve)
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:404)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:265)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
... 22 more
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(Unknown Source)
at default.MainWindow.init(MainWindow.java:62)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at default.MainWindow.initComponents(MainWindow.java:102)
at default.MainWindow$1.run(MainWindow.java:64)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Nie robię zewnętrznej konfiguracji (nic świadomie nie ustawiałem), ale ewentualnie mogę prosić o podpowiedź czego szukać?

à propos jre - tak potwierdzam, instaluje się :) Mam jakoś z tego faktu skorzystać? :)

Poszukam tego wątku o którym wpsomniałeś.

0
ziemiapa napisał(a)

Nie robię zewnętrznej konfiguracji (nic świadomie nie ustawiałem), ale ewentualnie mogę prosić o podpowiedź czego szukać?

Chodzi o korzystanie z wlasnych plikow konfiguracyjnych (np. .properties lub .ini) do przechowywania parametrow aplikacji. Trzeba pamietac, zeby przekopiowac je razem z aplikacja w odpowiednie miejsce. Ale to chyba Ciebie nie dotyczy.

ziemiapa napisał(a)

à propos jre - tak potwierdzam, instaluje się :) Mam jakoś z tego faktu skorzystać? :)

W przypadku modyfikacji np. w lib\security\java.policy lub dodajesz biblioteki do lib\ext lub bin</i> trzeba pamietac, ze IDE moze korzystac z ...\jdk1.6...\jre, natomiast system operacyjny z ...\jre1.6....

Co do problemu: czy Twoja baza danych w ogole jest uruchomiona? Mozesz sie do niej polaczyc z mysqladmin? Mozesz sprawdzic, czy uzytkownik ma uprawnienia do polaczenia do bazy z dowolnego hosta (domyslnie tylko polaczenia z localhost, ale wtedy wywalaloby raczej "Connection refused").

Jak powyzsze nie pomoze, sprobuj ustawic w java.policy:
grant { permission java.net.SocketPermission "localhost:3306", "connect, resolve"; };
HTH.

0
ws napisał(a)
ziemiapa napisał(a)

Nie robię zewnętrznej konfiguracji (nic świadomie nie ustawiałem), ale ewentualnie mogę prosić o podpowiedź czego szukać?

Chodzi o korzystanie z wlasnych plikow konfiguracyjnych (np. .properties lub .ini) do przechowywania parametrow aplikacji. Trzeba pamietac, zeby przekopiowac je razem z aplikacja w odpowiednie miejsce. Ale to chyba Ciebie nie dotyczy.

Tak, nie korzystam z tego typu plików.

ws napisał(a)
ziemiapa napisał(a)

à propos jre - tak potwierdzam, instaluje się :) Mam jakoś z tego faktu skorzystać? :)

W przypadku modyfikacji np. w lib\security\java.policy lub dodajesz biblioteki do lib\ext lub bin</i> trzeba pamietac, ze IDE moze korzystac z ...\jdk1.6...\jre, natomiast system operacyjny z ...\jre1.6....

Tutaj dodałem jara bezpośrednio do projektu. Aplet go widzi, bo na początku źle go umieściłem i był błąd o braku dostępu do biblioteki. Ale skopiowałem w odpowiednie miejsce i dodałem wpis w html.

ws napisał(a)

Co do problemu: czy Twoja baza danych w ogole jest uruchomiona? Mozesz sie do niej polaczyc z mysqladmin? Mozesz sprawdzic, czy uzytkownik ma uprawnienia do polaczenia do bazy z dowolnego hosta (domyslnie tylko polaczenia z localhost, ale wtedy wywalaloby raczej "Connection refused").

Baza chodzi jak burza. Mam zrobioną wersję aplikacyjną apletu i operuje na bazie jak chce. Zresztą bazę zrobiłem w mysql administratorze - dodałem nowego użytkownika, nadałem mu prawa, jest ustawiony domyślny język bazy. Baza jest ok.

ws napisał(a)

Jak powyzsze nie pomoze, sprobuj ustawic w java.policy:
grant { permission java.net.SocketPermission "localhost:3306", "connect, resolve"; };
HTH.

Zmieniłem - nie poszło.

Ale! :) Wpadłem na pomysł, żeby podpisać bibliotekę tym samym kluczem co aplet. I ruszyło! Usunąłem ten wpis o prawach apletu dla socketów i też chodzi.

Dzięki za rady, co dwie głowy to nie jedna :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1