L'appel d'une DLL à partir d'un Applet via JNI

J'ai une "preuve de concept" morceau de travail qui croise dans certains territoire inconnu.
Je suis chargé de la connexion d'un TPE machine à une application en cours d'exécution comme une applet dans un navigateur sur notre intranet.

J'ai ignoré les TPE dll pour le moment, et de créer un simple JNI décorées DLL dans mon choix de langue (Delphi) qui enregistre tout une chaîne de caractères dans un fichier texte dans c:\ et je peux l'appeler avec succès à partir d'un local d'une application Java.

Cependant, lorsque je créer une applet de faire la même chose, les compiler dans un .JAR, signe le POT & essayez d'appeler la méthode dans l'applet via Javascript sur une page web, il échoue.

Un senior Java gars, je travaille avec ne pense pas qu'il sera possible d'obtenir que cela fonctionne, car il est intrinsèquement "mauvais" pour permettre une applet pour ce faire.

Il y a une entrée, vous pouvez mettre en java.la politique de fichier pour permettre à la fonction loadLibrary. ainsi que allPermission & j'ai essayé une multitude de variations le long de ces lignes en vain la production de la suite de trace de l'erreur dans la Console Java:

java.lang.ExceptionInInitializerError
at app.TestApplet.LogAString(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.DLoggerImpl)
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.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at app.DLogger.<clinit>(Unknown Source)
... 16 more
java.lang.Exception: java.lang.ExceptionInInitializerError
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)

La ligne de clé semble être Causé par: java.de sécurité.AccessControlException: accès refusé (java.lang.RuntimePermission loadLibrary.DLoggerImpl)", ce qui implique un problème d'autorisations. Il se pourrait que je me fais de la politique de fichier incorrecte ou la signature de mal - ou des trucs comme ça ou il se peut que Java est câblé pour ne pas permettre à ces sortes de permissions pour un Applet en raison du risque de sécurité.

Ma question est suis-je perdre mon temps? Peut-il être fait & si oui, comment?

Merci d'avance

Mike

Je pense qu'il était utile de mentionner que, grâce à notre applet java qui se charge de Dll, un grand pourcentage (ic à 95%) de la clientèle peut exécuter l'applet sans aucun problème. Donc il doit y avoir une autre explication pour ce comportement, une sorte de Navigateur/JVM/OS combinaison qui provoque cet effet.

OriginalL'auteur mcottle | 2009-11-11