IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Intégrer une librairie Java dans Javascript


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club Avatar de bach58
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Intégrer une librairie Java dans Javascript
    Bonjour,

    Je souhaite intégrer une librairie développée en Java dans Javascript en tant qu'API pour utiliser et afficher ses objets dans du HTML5.

    Est-ce possible et comment?

    Merci d'avance de votre aide.

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    La réponse est non

    Mais cela ne signifie pas que tu ne peux rien faire.

    Si javascript ne peux pas charger de librairie externes dans d'autre langage dans le navigateur il peux par contre accéder à tous les éléments présent dans une page html

    et HTML lui prévoit le chargement d'élément externes dans le cas de Java ça s'appelle une Applet
    http://jmdoudoux.developpez.com/cour...ts.php#applets

    Bien que pour des raisons de sécurité cette possibilité soit de moins en moins usitée elle existe toujours moyennant la confirmation de la part de l'utilisateur. (autoriser les Applets java dans la page)

    Une fois l'Applet présent dans la page javascript peut y accéder puisqu'il s'agit d'un élément de la page.
    https://docs.oracle.com/javase/tutor...avaScript.html

    C'est tout de même une solution de plus en plus décriée et perso je la déconseille.

    Soit la lib Java est relativement simple et je vote pour un portage (réécriture) en javascript pur
    auquel cas elle s'exécutera sur le poste de l'utilisateur comme pour l'Applet

    Soit la lib Java fournis des algos lourd complexe dans ce cas je vote pour une exposition depuis le serveur via une API de type Rest, JSON, ou JSON-RPC. dans ce cas le javascript appelle une fonction local qui envois une demande d'exécution au serveur et attends la réponse. le Java s'exécute alors sur le serveur mieux équipé pour ça.

    Il existe de plus en plus de restriction sur les postes client pour l'exécution de Java via le réseau.
    Même JNLP est considéré comme une exécution non sure et est désactivé par défaut sur la plus part des machines.

    enfin on ne sais jamais quelle version possède le client il faut donc un Java particulièrement robuste et générique. alors que avec l'exécution côté serveur on maitrise la version précisément et on peut utiliser un code java plus optimisé.

    pour exposer ton API tu peux t'inspirer de https://jolokia.org/features/overview.html
    qui expose tous les MBean de ton Java via HTTP
    A+JYT

  3. #3
    Nouveau membre du Club Avatar de bach58
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Merci Sekaijin de cette réponse claire et détaillée.

    Par ailleurs sur le Net, j'ai trouvé des réponses contraires affirmant que cela est possible.

    Mais il est vrai que je n'ai pas réussi à faire l'import comme ils disent, sous NetBeans (page HTML chargée dans un objet WebView, important une classe définie dans le même projet).

    Maintenant si c'est impossible, comment des API ont été ajoutées à Javascript (par Google et autres ) ?

    Concernant mon projet, la libraire java est trop complexe et importante pour la réécrire en JS. De même que l'exécution devrait se faire côté client. Donc, si je trouve pas le moyen pour importer des classes ou la Jar, il reste à essayer la solution de transformer la librairie en Applet. Mais dans ce cas, je crains une forte dégradation des performances, notamment qu'il risque d'y avoir beaucoup de pages actives (et donc autant d'applets, à moins de pouvoir faire appel à un seul, mais comment?).

    Encore merci..

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je ne comprends pas la question des API, une API est une interface et on peut en écrire dans tous les langages.
    One Web to rule them all

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Ce qui est décrit dans ta page est l'ajout d'une ressource java dans une jsp soit donc dans un programme JAVA
    une jsp est compilé par un outil appelé jspc (lorsqu'on le publie directement sur son serveur le serveur compile les jsp à l'installation de la webapp). cela donne une classe java qui est une servlet.

    il ne s'agit donc pas d'ajouter une lib java à un moteur d'interprétation javascript
    la jsp est compilé puis exécuté sur le serveur alors que le javascript est exécuté par le navigateur sur le poste du client.

    Maintenant si c'est impossible, comment des API ont été ajoutées à Javascript (par Google et autres ) ?
    le moteur d'interprétation javascript à été conçu pour être embarque dans une application. dans le cas qui nous intéresse l'application en question est le navigateur. cette conception du moteur prévois une interface qui permet d'inclure du code spécifique. c'est cette capacité qui est utilisée pour ajouter à javascript les objets document, navigator ou window. pour cela il faut développer une librairie en C ou C++ et re-compiler le navigateur tout entier. Heureusement les concepteur des navigateurs on ajouté un autre moyen qui ajoute des élément au moteur javascript dynamiquement. cette solution se fait au travers de l'API du navigateur pour écrire des plugins.

    Si la spécification de l'API C++ de Javascript pour ajouter des fonctionnalités est normalisé mais nécessite une compilation du moteur
    l'API pour écrire des plugins est totalement dépendante du navigateur de la plateforme (Windows/Linux/Mac) et de la version.

    Les specs du moteur javascript font qu'on peu l'embarquer dans n'importe quelle appli. il existe donc des implémentation en java. dans ce cas il n'est pas très difficile d'ajouter une lib java à la jvm exécutant le moteur javascript et de la rendre visible.

    Mais je doute que tu veuille développer un navigateur en java juste pour pouvoir y ajouter ta lib.

    Mais dans ce cas, je crains une forte dégradation des performances, notamment qu'il risque d'y avoir beaucoup de pages actives...
    je ne comprends pas bien ton client a beaucoup de page ouverte en même temps au point que l'instanciation d'une JVM contenant une simple applet dans chaque page dégraderait les performance du client ?

    J'avoue que là je ne comprends pas du tout. en général dans une application web lorsque l'utilisateur à plus de trois fenêtres dépendantes ouvertes en simultané il convient de revoir la conception. depuis longtemps les études en ergonomie ont montré que ce n'était pas une bonne solution. une des tendance est même les Single page application.

    En général dans une application Web on a une fenêtre ouverte sur l'application et au plus une fenêtre dépendante. (je ne parle pas de l'ouverture d'une fenêtre ou onglet non dépendant) ton client a donc une ou deux instance de l'applet.
    du coup je ne comprends pas comment cela peut dégrader les perfs.
    où alors même avec une seule instance ton Java écrase les perf mais ce n'est pas du au fait que tu en a fais une applet.

    J'avoue que n'ayant que peut d'info sur ta lib je ne peux rien te conseiller.
    De même que l'exécution devrait se faire côté client.
    Il te faut savoir que si tu en fais un applet 90% des navigateur refuseront par défaut de l'éxécuter que dans les 10% restant tu auras une 15 de version en moyenne de java à gérer
    que tu n'auras pas accès au ressource locales (pas de persistance)
    et qu'à chaque changement de page tu perdras dans java toutes les variables. (à chaque page une nouvelle JVM)


    A+JYT

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    Il te faut savoir que si tu en fais un applet 90% des navigateur refuseront par défaut de l'éxécuter que dans les 10% restant tu auras une 15 de version en moyenne de java à gérer
    que tu n'auras pas accès au ressource locales (pas de persistance)
    et qu'à chaque changement de page tu perdras dans java toutes les variables. (à chaque page une nouvelle JVM)
    A+JYT
    Oui sauf cas très particuliers il est déconseillé de dépendre d'un applet java, surtout pas pour une application "grand public", c'est désactivé par défaut et peu de personnes s'aventureront à l'autoriser pour des raisons de sécurité.

  7. #7
    Nouveau membre du Club Avatar de bach58
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Merci à tous (et surtout à Sekaijin) de ses réponses utiles

    Ok pour JSP (et le lien que j'ai donné).. Je n'avais pas vu la différence.. mais maintenant c'est claire grâce à vous

    Concernant mon projet : il s'agit de faire exécuter les pages HTML dans des objets WebView de JavaFX, et non par les navigateurs Web (IE, Opera, Firefox, etc.). Par ailleurs, je ne contrôle pas le nombre de pages qui seront ouvertes simultanément, car c'est l’utilisateur qui le décidera.

    Les specs du moteur javascript font qu'on peu l'embarquer dans n'importe quelle appli. il existe donc des implémentation en java. dans ce cas il n'est pas très difficile d'ajouter une lib java à la jvm exécutant le moteur javascript et de la rendre visible.

    Mais je doute que tu veuille développer un navigateur en java juste pour pouvoir y ajouter ta lib.
    Si je pouvais le faire facilement en quelques jours !!.. Car ce serai l'idéal dans le contexte de mon projet qui est une appli autonome (non un NAVIGATEUR au sens classique).. Mon but est de seulement utiliser la puissance conjuguée de HTML5 et de Javascript...
    Mais alors comment faire cela (une version de Javascript intégrant ma lib que j'embarque dans mon appli)?

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Alors l'a ça ce simplifie
    si tu as une version récente de java tu peux utiliser nashorn JSR 223
    si c'est une version plus ancienne il te faut de retourner vers une lib Rhino

    dans les deux cas tu embarque un moteur javascript dans ton appli java et tout les objets et classes java chargées dans ton appli peuvent être exposé dans javascript

    A+JYT

  9. #9
    Nouveau membre du Club Avatar de bach58
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Je vais regarder cela..Admettons que j'y arrive, la question est après : comment intégrer le nouveau moteur Javascript (intégrant ma lib) dans le WebEngine de javafx (utilisé par WebView), pour qu’il puisse interpréter le code des pages HTML?

  10. #10
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Nashorn et rhino ont été conçu pour être intégré dans une application java.
    Il n'est pas besoin d'intégrer ta lib au moteur TOUT le java de ton appli est accessible depuis le moteur javascript.

    Quant au WebEngine de JavaFX il te faudra poser la question dans la section java je ne pense pas que tu trouve ici quelqu'un.

    A+JYT

  11. #11
    Nouveau membre du Club Avatar de bach58
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Un grand merci Sekaijin.

Discussions similaires

  1. utillisation d'une methode Java dans Javascript
    Par emma3345 dans le forum Struts 1
    Réponses: 1
    Dernier message: 07/11/2007, 10h13
  2. [JSP] Utiliser une classe Java dans du Javascript
    Par BiM dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 11/07/2007, 11h52
  3. comment intégrer une librairie écrit en java?
    Par gridsof dans le forum JBuilder
    Réponses: 3
    Dernier message: 23/05/2007, 11h54
  4. Intégrer une librairie .jar dans un .jar
    Par di-giac dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 07h42
  5. Appel d'une fonction java (dans une applet) depuis javascript
    Par foued_scorpion dans le forum Applets
    Réponses: 2
    Dernier message: 17/01/2007, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo