2009-12-09 3 views
2

Nous avons un projet lourd basé sur Java qui nécessitait un interpréteur de script interactif. Après un bon nombre de recherches, nous nous sommes finalement retrouvés avec Jython, une des raisons étant que le groupe du client possède déjà une grande expertise en python, et qu'il est plus facile de leur vendre une API dans un langage proche de celui qu'ils connaissent déjà. . Bon, au début, c'était bien, mais il y a eu un problème: il y a des environnements de déploiement qui sont verrouillés pour les utilisateurs ordinaires (c'est-à-dire non-administrateurs). Ces utilisateurs ordinaires n'ont pas la permission d'écrire n'importe où sur les disques locaux de leurs machines. De plus, leur Home $ (sur Windows) est généralement sur un réseau à latence élevée (souvent 100ms +), et pour couronner le tout, la taille du dossier inscriptible lui-même est généralement inférieure à 10mb. Oui, c'est mégaoctets. Existe-t-il un langage de script Java pouvant fonctionner sans cache? Jython? Sensationnel? etc?

Compte tenu de ces restrictions, il semble que Jython peut ne pas correspondre à la facture. Nous devons être capables de fonctionner sans accès à un cache disque à faible latence, même si cela signifie une légère pénalité de vitesse. Après une recherche dans Google et les forums, il ne semble pas y avoir un moyen de réaliser cela à Jython.

Il y a quelques solutions de contournement évidentes:

  • Obtenez le client d'ouvrir leur sécurité. Malheureusement, c'est une grosse bureaucratie et essayer de justifier le changement d'une politique de sécurité à l'échelle de l'entreprise pour fournir des scripts pour un produit n'est pas vraiment une option.
  • Mettre en place un disque virtuel et mettre le cache de l'interpréteur de script là. Le problème avec cette approche sur Windows est qu'il implique un niveau d'interférence avec le système d'exploitation qui restera si notre application est en cours d'exécution ou non. (Au moins que je comprends les techniques de le faire)

Alors, voici mon plaidoyer - personne ne sait d'un interprète de script java qui a un mode interactif et ne nécessite pas nécessairement un cache de disque? Il n'a pas nécessairement besoin d'utiliser la syntaxe python, s'il y a un moyen de faire en sorte que les autres, (ie: javaLUA, Groovy, etc.) le fassent, je serais ouvert à ça.

Répondre

2

Vous pouvez juste mettre

python.cachedir.skip=true 

Vous devez vérifier vos importations, mais ...

http://wiki.python.org/jython/PackageScanning

http://ghattus.com/2009/09/no-wlst-cachedir-with-python-cachedir-skip.html

+0

Dans l'installation Standalone jar, cette option est toujours définie sur true (pas sur le fichier d'installation complète). L'inconvénient de cette approche est que vous perdez les fonctionnalités d'analyse de paquet. C'est un non-problème lorsque vous travaillez avec des scripts chargés à partir de fichiers, mais c'est un peu plus gênant lors de l'exécution de l'invite interactive; Pour naviguer dans vos paquets, vous devez vous-même chercher dans le système de fichiers ou faire mémoriser votre structure. Je souhaite conserver l'analyse si possible ... – Decker

1

Groovy n'utilise pas un répertoire de cache de la même manière que le fait Jython. Groovy compile vers les fichiers de classe Java réels (en mémoire, pas sur le disque lorsque vous utilisez un script). Ma compréhension de Jython est qu'il met en cache des paquets Java et des choses comme ça. Groovy utilise la même structure de paquets et ne nécessite pas un tel cache.

0

Je n'ai aucune idée des exigences de mise en cache, désolé. Je n'étais même pas au courant que les environnements Java interprétatifs avaient besoin d'une telle chose. OK, c'est facile pour moi de dire avec un disque de 1 To localement et entièrement accessible pour moi.

Bien que je ne peux pas parler pour les problèmes de mise en cache, je vous suggère de donner Clojure essayer. C'est un langage relativement minuscule avec une excellente interopérabilité Java, et je ne serais pas surpris s'il mâchait moins de ce cache mystérieux que d'autres langues.

Le plus grand inconvénient est que Clojure est un dérivé Lisp, significativement différent de Java, Python et probablement d'autres langues que votre client peut savoir.À moins que certains d'entre eux développent des extensions emacs sur le côté :)

+0

Merci pour la suggestion! J'ai vérifié dans clojure en arrière quand les évaluations de moteur de script ont continué pour ce projet. Je trouve cela intrigant, mais j'ai aussi trouvé que la mention de Lisp semble susciter une réponse plutôt négative de la part de la plupart des gens dans les environnements de production. Obtenir l'adhésion devient plus difficile. Si ce n'était pas mentionné tout de suite sur le site Web de Clojure, nous pourrions peut-être tromper les gens pendant un moment. :) – Decker

0

Je ne peux pas vous le dire à coup sûr, mais je peux vous donner quelques suggestions.

Il existe un cadre de script plugable pour Java où vous pouvez brancher n'importe quel langage de script - l'utilisateur peut choisir sa propre langue. Si vous ne l'avez pas encore trouvé, je vous suggère de le rechercher. Comme le framework est implémenté en un seul endroit, je me demande s'il supporte la mise en cache ... si c'est le cas, vous devriez être capable d'intercepter les appels et d'implémenter votre propre cache RAM (Puisque tout le code source doit être disponible).

Je voudrais également regarder dans BeanShell. En ce qui concerne un langage de script simple et lâche, c'est plutôt bien. C'est léger et pourrait être plus facile à modifier. Enfin, vous pouvez contacter les différentes équipes et proposer de parrainer un commutateur qui redirige les accès au disque. Vous utilisez le produit, soutenir l'équipe devrait être quelque chose que vous préférez faire de toute façon.

+0

Vérification du code supportant JSR223 était une bonne idée. Un examen superficiel du code de Sun semble permettre aux moteurs de script de faire ce qu'ils veulent, à condition qu'ils se conforment à l'interface appropriée. En tant que tel, j'ai eu du mal à trouver une quelconque mention de la gestion de la mémoire cache. Ils peuvent laisser la mise en œuvre, même si je peux me tromper. – Decker

Questions connexes