peut on utliser hibernate avec une applet si oui, comment?
peut on utliser hibernate avec une applet si oui, comment?
Techniquement oui, mais je ne suis pas sur que ce soit une idée judicieuse qu'une applet(coté client) se connecte directement une base de donnée.
Est-ce que c'est vraiment ce que tu veux?
en fait j'ai fait une applet qui utilise hibernate, sa marche avec appletviewer, mais pas sur un navigateur, il me met l'erreur suivante
Exception in thread "Thread-6" java.lang.NoClassDefFoundError: org/hibernate/HibernateException
at com.jeux.model.JouerRapido.init(JouerRapido.java:359)
at com.jeux.model.Rapido.jouer(Rapido.java:141)
at com.jeux.vue.RapidoVue.run(RapidoVue.java:396)
at java.lang.Thread.run(Thread.java:595)
Il te manque les jars indispensables au fonctionnement d'Hibernate.
Tu peux utiliser l'attribut archive du tag applet pour spécifier tous les jars dont ton application a besoin.
Apparemment des qu'il ya une connexion avec la session hibernate il génére une exception, bon je me suis dis que c'est les droit limité des applets, mais en lisant quelques forum, j'ai pu comprendre que lorsque la base de données etait dans le meme serveur que le conteneur web, on n'avais pas besoin de faire signé son applet. Et même, je l'ai quand fait siggné mon applet, jusqu'à la ça me donne toujour la même erreur. Si quelqu'un a une idée qu'il vienne à mon secour car ça fait plusieur jour que je galère dessus.
j'ai pensé à cette possibilité de jar indispensable à hibernate, donc pour le faire j'ai crée un jar globale qui rassemble toute les librairie que j'appelle dans mon classpath, avec mon application elle même, et je l'ai mis dans l'attribut archive. bon l'applet s'affiche, et des le moment qu'elle doit faire une connexion avec hibernate l'erreur s'affiche.
Le message est clair, la classe en question n'est pas trouvée, donc il y a un problème dans ta façon de faire.
Aurais tu une idée de la maniere dont je dois mis prendre?
Ben comme je t'ai dit plus haut.
Tu fournis tous les jars d'Hibernate dans l'attribut archive ainsi que, évidemment, le jar de ton application.
la j'ai essayer de mettre tout mes jar, comme tu me l'as dis, bon le type d'erreur à changer. mais il demeure quand même des erreurs, et beaucoup meme.
06-05-2009 18:08:43:717 0 WARN org.hibernate.cfg.Environment - could not copy system properties, system properties will be ignored
06-05-2009 18:08:44:425 708 WARN org.hibernate.cfg.SettingsFactory - Could not obtain connection metadata
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.1.157:3306 connect,resolve)
STACKTRACE:
java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.1.157:3306 connect,resolve)
at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:292)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:182)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:268)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2745)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at com.jeux.data.HibernateUtil.<clinit>(HibernateUtil.java:14)
at com.jeux.model.GenereMot.generateListMots(GenereMot.java:119)
at com.jeux.model.JouerRapido.init(JouerRapido.java:360)
at com.jeux.model.Rapido.jouer(Rapido.java:141)
at com.jeux.vue.RapidoVue.run(RapidoVue.java:396)
at java.lang.Thread.run(Thread.java:595)
** END NESTED EXCEPTION **
Last packet sent to the server was 28 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2820)
at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at com.jeux.data.HibernateUtil.<clinit>(HibernateUtil.java:14)
at com.jeux.model.GenereMot.generateListMots(GenereMot.java:119)
at com.jeux.model.JouerRapido.init(JouerRapido.java:360)
at com.jeux.model.Rapido.jouer(Rapido.java:141)
at com.jeux.vue.RapidoVue.run(RapidoVue.java:396)
at java.lang.Thread.run(Thread.java:595)
Exception in thread "Thread-12" java.lang.ExceptionInInitializerError
at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:295)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
at com.jeux.data.HibernateUtil.<clinit>(HibernateUtil.java:14)
at com.jeux.model.GenereMot.generateListMots(GenereMot.java:119)
at com.jeux.model.JouerRapido.init(JouerRapido.java:360)
at com.jeux.model.Rapido.jouer(Rapido.java:141)
at com.jeux.vue.RapidoVue.run(RapidoVue.java:396)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission cglib.debugLocation read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
at java.security.AccessController.checkPermission(AccessController.java:427)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:628)
at net.sf.cglib.core.DebuggingClassWriter.<clinit>(DebuggingClassWriter.java:35
Ta base de données est sur la même machine que celle qui exécute ton applet ?
Oui ma base de données est sur le même poste que mon application, mais après une modification de mon fichier de config hibernate, l'erreur a changé.
WARN org.hibernate.cfg.Environment - could not copy system properties, system properties will be ignored
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission cglib.debugLocation read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
at java.security.AccessController.checkPermission(AccessController.java:427)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
at java.lang.System.getProperty(System.java:628)
at net.sf.cglib.core.DebuggingClassWriter.<clinit>(DebuggingClassWriter.java:35)
Si c'est la même machine, essaie avec localhost au lieu de ton ip pour l'adresse de la base.
Ca ressemble à un problème d'applet non signée qui ne peut pas accéder à une ressource externe.
finalement j'ai reussi, bon il y'avait plusieurs problème, effectivement celui de l'ip et des jars non signés. Donc pour le faire j'ai pris toutes les jars que mon projet utilise, je les ai dejarrées(je ne sais pas si ça se dis bon bref vous me comprenez)
puis j'ai pris les tous les packages de mes jars dezipées et je les ai fais fusionner. pour que ça ne forme qu'un seul package, ensuite j'ai mis les packages des jars dans mon fichiers fichiers bin (c'est à dire là ou il y'a tous mes fichiers .class) jai réecreer un ficher jar avec la commande jar -cvf monjar.jar * . donc ça me faisait un super jar ou il yavait mon projet avec toutes les jar dont à besoin mon projets.
Ensuite il fallais que je signe mon jar pour que mon appelt puisse correctement utilisé hibernate. Epourtant ma base de donnée et mon conteneur web sont dans le même serveur, mais il fallais quand même que je fasse signé ma jar.
Pour le fais , il faut creer une keystore, et moi je le fais grace à l'outil keytool de la jre
taper la commande suivante. bon effectivement il faut connaitre le repertoire de sa jre: jre/bin/keytool -genkey -alias nomdeCle -keypass motDepasse
il va vous poser beaucoup de question, bon bref. je passe dessus.
puis j'ai fais signé mon jar grace à la commande
jarsigner monjar.jar nomDeLaCle
après je creer une page html, jsp, php, bon tout ce que vous voulez avec les balise applet et j'insere monjar.jar dans l'atribut archive.
Et le tout est jouer.
Je trouve un peu crade de tout mettre dans un même jar.
Il serait plus propre de signer tous tes jars, mais tu fais comme tu veux.
Bonjour,
Je me suis basé sur cette discussion pour résoudre mon problème qui se ressemble bcp avec celui la.
Dans mon Applet je dois faire les choses suivantes:
- Accéder à ma BDD, pour cela j'appelle mes dao qui utilisent hibernate
-Récupérer tout les personnes dans la BDD
- Afficher une personne chq fois on clic sur un bouton 'afficher personne'
J'ai mis tout cela en try, en cas d'échec je crée une liste des personnes en dure et puis je l'affiche de la même façon.
Lorsque je lance l'exécution avec "Run as Java applet", il execute le try.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 private Personne personne; private DAOPersonne dao = DAOPersonneHBM.getInstance(); ArrayList<Question> tab; try { tab = new ArrayList<Question>(); tab = dao.LoadAllPersonnes(); } catch (Exception e) { // TODO Auto-generated catch block tab = new ArrayList<Question>(); tab.add(new Personne("A", "B", "@1"); tab.add(new Personne("C", "D", "@2"); tab.add(new Personne("E", "F", "@3"); }
Maintenant, avec un navigateur, je lance mon serveur Tomcat et je tapes l'adresse de ma page jsp, il exécute le catch.
est-ce que quelqu'un a une idée d'où vient le problème !!
Merci d'avance pour votre aide.
Partager