Problem z DB w JApplet

0

Witam
Mam problem z połączeniem do bazy danych w applecie. Baza danych i applet sa wykonywane z tego samego hosta więc z tego co wiem nie trzeba go podpisywać. w AppletView'erze wszystko działa ok.

Tak wygląda kod html:

<html> <applet code="App" width="800" height="600" archive="appp5.jar, jfreechart-1.0.14.jar, jcommon-1.0.17.jar, mysql-connector-java-5.1.18-bin.jar"> Your browser couldn't see applet </applet> </html>

Applet w przeglądarce uruchamia się, ale gdy wprowadze user/password i nacisne przycisk logowania nic sie nie dzieje. W konsoli błedów w przeglądarce pusto.

Jakieś pomysły?

0

jednak jest blad:

Exception in thread "AWT-EventQueue-4" java.lang.ExceptionInInitializerError
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DataBase.DB.connect(DB.java:39)
at Login$Enter.actionPerformed(Login.java:148)
at javax.swing.JTextField.fireActionPerformed(Unknown Source)
at javax.swing.JTextField.postActionEvent(Unknown Source)
at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(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: java.security.AccessControlException: access denied (java.util.PropertyPermission file.encoding read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at com.mysql.jdbc.StringUtils.<clinit>(StringUtils.java:70)
... 43 more

0

Próbujesz odczytać właściwość:

System.getProperty("file.encoding");

W niepodpisanym aplecie jest to zabronione (zajrzyj do pliku java.policy, to dowiesz się jakie właściwości może odczytać aplet), jest też chyba bez sensu. Po co ci ta właściwość odczytywana z lokalnego komputera?
P.S. Konsola błędów przeglądarki zawiera informacje o błędach JavaScriptu, a nie o błędach apletów. Musisz otworzyć konsolę Javy.

0

W swoim kodzie nie próbuje nigdzie odczytać tej właściwości. Być może w jakiejś funkcji z jar'ów z których korzystam odbywa się coś takiego?

Jeśli mam taki błąd to wystarczy podpisać jar'a apletu czy muszę pozostałe jar'y z których korzystam i mam jako archive w kodzie html? Czy może istnieje jeszcze jakiś prosty sposób na połączenie wszystkich jar'ów w duży jeden i podpisanie tylko jego?

Co do konsoli to rzeczywiście ;) dopiero po chwili się połapałem, żę nie tę konsolę otwierałem.

0

Podpisywanie jest takie pracochłonne? Połączenie kilku jarów w jeden jest bardzo proste, ale nie wiem czy jest legalne, jeżeli korzystasz z gotowych bibliotek. Jary to naprawdę zipy.

0

Okej doszedłem do problemu.To MySQL connector narusza security privacy tym getProperty("file.encoding"). Zmieniłem bazę na postgreSQL i wszystko jest ok :). Wrzucam sobie applet do folderu apacha i wtedy śmiga ładnie bez żadnych errorów :).

Może nie jest pracochłonne ale przy każdym teście w przeglądarce gdy dodam coś do appletu musiałbym podpisywać na nowo - czy się mylę?

Dzięki za odpowiedźi :)

0

Nie mylisz się, musiałbyś podpisywać. Ale możesz zmienić na swoim komputerze plik java.policy, tak by pozwalał na wszystko, a co najmniej na odczyt wszystkich właściwości. Drugie (bezpieczniejsze) rozwiązanie, to stworzyć własny plik typu policy, który na wszystko pozwala i używać appletviewera korzystając z ustawień w tym pliku.

0

Witam, mam kolejny problem. Zmieniłem tę bazę na postgresa, dodałem do pliku pg_hba.conf linie "host all all all md5" - łącze się przez moje ip zewnętrzne i działa.
Odpalilem przez stronę http://anonymouse.org i wyskakuje mi błąd w konsoli załączony poniżej. Applet jest nie podpisany - czy to mogłoby mieć znaczenie:/ ?

org.postgresql.util.PSQLException: Your security policy has prevented the connection from being attempted. You probably need to grant the connect java.net.SocketPermission to the database server host and port that you wish to connect to.
at org.postgresql.Driver.connect(Driver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DataBase.DB.connect(DB.java:41)
at Login$Enter.actionPerformed(Login.java:150)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(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: java.security.AccessControlException: access denied (java.net.SocketPermission 89.73.213.20:5432 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at org.postgresql.core.PGStream.<init>(PGStream.java:62)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:30)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:393)
at org.postgresql.Driver.connect(Driver.java:267)
... 39 more

0

Oczywiście, ponieważ połączenie po sockecie wymaga podpisana apletu. Moja rada weź zainwestuj kilka minut w maivanizację projektu (podłącz mavena). Duperele typu podpisywanie jara staną się nieistotne.

0

podpisałem... ciągle ten sam błąd jeśli uruchamiam przed anonymouse.org ;/

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