plusieurs questions à tiroirs (numérotées):
Je déclare dans mon jnlp un seul jar contenant le main de l'application (main.jar). Lors de l'execution je récupère une liste de noms de jars (a.jar, b.jar...).
Ensuite, en utilisant DownloadService.loadResource, je charge ces autres jars (depuis le même serveur). Tous les jar sont signés avec le même certificat!
Au premier lancement tous les jars sont bien mis en cache (main.jar, a.jar, b.jar...). Lors des lancements ultérieurs, JWS vérifie la version de main.jar (déclaré dans le JNLP) en testant la date du fichier sur le serveur (c'est l'algo défini dans les spécifications jnlp). Il re-télécharge main.jar seulement si la date sur le serveur est supérieure à la date du fichier dans le cache. Ce fonctionnement est parfait pour moi: je ne gère pas les versions explicitement, si je mets à jour le jar sur le serveur, les clients se mettront à jour automatiquement. Pour les jars qui ne sont pas définis dans le JNLP (a.jar, b.jar...), DownloadService.loadResource ne teste pas la date sur le serveur. Du coup ces jars ne se mettent pas à jour automatiquement.
première question:
1- Est-t-il possible de dire au DownloadService de vérifier la date des ressources pour les comparer au cache et, le cas échéant les re-télécharger?
ensuite:
Avec ce mode de fonctionnement et avec un JRE 1.6.0_20, j'ai un message indiquant un problème de sécurité correspondant à ce cas: http://java.sun.com/javase/6/docs/te...ixed_code.html
J'ai donc d'abord répondu "non" pour avoir le comportement ci-dessus.
j'ai ensuite voulu faire en sorte d'enlever ce warning.
Comme indiqué, J'ai donc ajouté l'attribut "Trusted-Only: true" dans le manifest de main.jar.
Je vide mon cache JWS et relance mon JNLP.
Là, plus de popup de warning mais une exception, lorsque je tente d'instancier une classe mon.package.A de a.jar après l'avoir chargé par DownloadService.loadResource (chargement qui semble fonctionner puisque j'ai bien a.jar dans mon cache JWS):
d'où ma deuxième question:
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 Exception in thread "**** Login thread" java.lang.SecurityException: Trusted-Only loader attempted to load sandboxed resource from http://monserveur/a.jar at com.sun.deploy.security.CPCallbackHandler$ParentCallback.check(Unknown Source) at com.sun.deploy.security.CPCallbackHandler$ParentCallback.access$1400(Unknown Source) at com.sun.deploy.security.CPCallbackHandler$ChildElement.checkResource(Unknown Source) at com.sun.deploy.security.DeployURLClassPath$JarLoader.checkResource(Unknown Source) at com.sun.deploy.security.DeployURLClassPath$JarLoader.getResource(Unknown Source) at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at maltese.corto.login.CortoPanel$5.run(CortoPanel.java:348) at java.lang.Thread.run(Unknown Source)
2- je fais sans doute quelque chose à l'envers mais quoi?
J'ai ensuite fais le même test mais en ajoutant cette fois ci l'attribut "Trusted-Library: true" dans le manifest de mon main.jar. Je vide mon cache et relance et là:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Exception in thread "**** Login thread" java.lang.NoClassDefFoundError: mon/package/A at maltese.corto.login.CortoPanel$5.run(CortoPanel.java:348) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: mon.package.A at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 2 more
3- une piste???
Je désespère un peu, j'ai l'impression que je ne suis pas loin mais je dois passer à coté de qqch...
Merci d'avance pour vos réponses et désolé pour le pavé...
Partager