Applet + Hibernate

Odpowiedz Nowy wątek
2011-03-15 17:34

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Mam do napisania aplikację z wykorzystaniem Hibernate'a, w wersji okienkowej aplikacja działa, do projektu dodałem klasę Applet, która jak można się domyślić zawartość okienka ma wyświetlać na stronie jako aplet. Uruchamianie klasy Applet z NetBeans 6.9.1 generuje prawidłowy podgląd, tj. wyświetla się to samo co w okienku ale jako aplet. Problem polega na tym, że jednocześnie generuje mi się w katalogu /build plik html, ale jego odpalenie wywołuje pojawienie się w konsoli następującego komunikatu:

 Exception in thread "thread applet-praca/Applet.class-1" java.lang.NoClassDefFoundError: org/hibernate/Session
    at praca.Applet.init(Applet.java:22)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hibernate.Session
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 3 more
Caused by: java.io.FileNotFoundException: C:\Users\Mistic\Documents\NetBeansProjects\praca\build\classes\org\hibernate\Session.class (System nie może odnaleźć określonej ścieżki)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 8 more

Pliki Hibernate'a pochodzą z wersji 3.6.0.
Nie bardzo rozumiem co się dzieje bo z NetBeansa wygląda to normalnie, a odpalając applet przez plik .html otrzymuję powyższy błąd. W Properties->Libraries->Compile mam dodane następujące pliki .jar:

hibernate3.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
slf4j-api-1.6.1.jar
edytowany 1x, ostatnio: Mithrandium, 2011-03-15 17:35

Pozostało 580 znaków

2011-03-15 17:37
Moderator

Rejestracja: 12 lat temu

Ostatnio: 17 minut temu

Lokalizacja: Wrocław

0

Exception in thread "thread applet-praca/Applet.class-1" java.lang.NoClassDefFoundError: org/hibernate/Session

Caused by: java.io.FileNotFoundException: C:\Users\Mistic\Documents\NetBeansProjects\praca\build\classes\org\hibernate\Session.class (System nie może odnaleźć określonej ścieżki)

404


edytowany 1x, ostatnio: Patryk27, 2011-03-15 17:37

Pozostało 580 znaków

2011-03-15 17:54

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

No tak, tylko jak ja mam to teraz skonfigurować skoro w wersji okienkowej i podglądzie apleta w NetBeansie wszystko działa.

Pozostało 580 znaków

2011-03-15 17:56

Rejestracja: 14 lat temu

Ostatnio: 11 minut temu

0

Katalog build służy do odpalania spod NetBeansa tak w wielkim skrócie :P
Samodzielne paczki z reguły lądują w folderze dist. Zobacz czy tam czegoś nie ma.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-03-15 18:13

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

W katalogu /dist wygenerowało mi inny plik .html - launch.html, ten za to wywala mi takie błędy:

Initial SessionFactory creation failed.java.security.AccessControlException: access denied (java.util.PropertyPermission hibernate.enable_specj_proprietary_syntax read)
Exception in thread "thread applet-praca.Applet-1" java.lang.ExceptionInInitializerError
    at praca.HibernateUtil.<clinit>(HibernateUtil.java:28)
    at praca.PanelGlowny.<init>(PanelGlowny.java:49)
    at praca.Applet.init(Applet.java:22)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission hibernate.enable_specj_proprietary_syntax 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 org.hibernate.cfg.Configuration.reset(Configuration.java:362)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:296)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:300)
    at org.hibernate.cfg.AnnotationConfiguration.<init>(AnnotationConfiguration.java:74)
    at praca.HibernateUtil.<clinit>(HibernateUtil.java:24)
    ... 4 more

Pozostało 580 znaków

2011-03-15 18:34

Rejestracja: 14 lat temu

Ostatnio: 11 minut temu

0

Aplety mają ograniczone prawa dostępu ze względu na potencjalne próby włamania do kompa za pomocą np ukrytego apletu. Nie wiem czy w ogóle dałoby się odpalić Hibernata spod apletu.

A tak w ogóle to co to za pomysł odpalania Hibernata z apletu? Aplet jest zwykle klientem, a Hibernate odpala się po stronie serwera.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-03-15 23:48

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

Nie wiem czemu wpadłem na pomysł zrobienia swojego projektu w formie appletu. Możliwe, że po prostu trzymam się kurczowo pierwszego pomysłu jaki przyszedł mi do głowy.
Moja aplikacja ma umożliwiać logowanie się do "systemu" i wykonywanie różnych działań z wykorzystaniem Hibernate'a zależnie od tego na jakiego typu konto się zaloguję. W jakiej formie najlepiej to zrobić, żebym mógł to wrzucić na stronę internetową i to sobie działało skoro wersja z Appletem poszła do kosza?

Pozostało 580 znaków

2011-03-15 23:56

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

hmmm według mnie kolega Wibowit ma rację. Działania z użyciem hibernata powinny być robione po stronie serwera, a Ty jak sądzę połączyłeś sobie serwer i klient w jedno. Myślę że powinieneś użyć napisanego już kodu do stworzenia serwera i napisać klienta w formie apletu . Do tego musisz napisać jakiś interfejs porozumiewania się klienta z serwerem np: klient łączy się z serwerem i wysyła żądanie zalogowania, serwer za pomocą hibernata łączy się z baza i sprawdza czy podane dane są ok itd.

Pozostało 580 znaków

2011-03-16 09:18

Rejestracja: 9 lat temu

Ostatnio: 7 lat temu

0

a nie powinno się po prostu podpisać cyfrowo apletu? JDBC wtedy działa normalnie więc czemu hibernate nie będzie mógł? Hibernate nie wymaga jakiegoś specjalnego kontenera a jedynie Java SE.

Pozostało 580 znaków

2011-03-16 10:03

Rejestracja: 12 lat temu

Ostatnio: 4 dni temu

0

@paweln1986, hibernate może działać w ramach JSE, ale trzeba wtedy samodzielnie zarządzać m.n. stanem sesji. Podpisanie apletu niewiele da ponieważ Hibernate wykorzystuje trochę dodatkowych elementów np. stara się pisać do logu. Do tego tworzy dynamicznie klasy (proxy) co też nie za bardzo jest możliwe w apletach.

@Mithrandium, proponuję trochą inne podejścia:

  1. Niech aplet będzie tylko UI, a na serwerze umieść aplikację EE, której usługi będziesz wywoływał z apletu. Warunek. Musisz mieć serwer EE.
  2. Zamiast apletu użyj Java Web Start (http://en.wikipedia.org/wiki/Java_Web_Start) jest to rozwiązanie pośrednie pomiędzy Apletem, a aplikacją okienkową. Ma inny model bezpieczeństwa, a tym samym znacznie łatwiej jest wykonać pewne czynności np. wywołanie bazy danych.

Na koniec przemyśl dokładnie jak masz zamiar serwować hibernateowi dane do połączenia. Jeżeli gdzieś po stronie klienta zaszyjesz zestaw user+hasło+adres bazy lub będziesz je wysyłał via sieć to nie będzie to dobre rozwiązanie.

Pozostało 580 znaków

Odpowiedz

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