2010-05-18 5 views
3

Je suis sur le point de commencer un projet où j'utiliserai probablement PyQt ou Pyside.Intégration de Jython Cpython

je vais devoir l'interface avec un buggy morceau 3ème partie du logiciel serveur qui fournit C++ et Java API. Les API Java sont beaucoup plus faciles à utiliser car vous obtenez des exceptions où vous obtenez des segfaults avec les bibliothèques C++. En outre, les liaisons Python aux API Java sont automatiques avec Jython alors que les liaisons Python pour les API C++ n'existent pas.

Alors, comment une application cliente CPython PyQt être en mesure de communiquer avec ces API Java? Comment vous y prendrez-vous?

Auriez-vous un autre processus Java séparé sur le client qui sérialise/objets marinades et communique avec le processus PyQt sur une prise de courant?

Je ne veux pas réinventer la roue ... est-il une sorte d'interface standard pour ce genre de choses? Une technologie que je devrais examiner? RPC, Corba, etc?

Merci, ~ Eric

Répondre

0

Si vous voulez maintenir un isolement complet et d'augmenter votre robustesse (la bibliothèque 3ème partie va vers le bas et ne pas prendre votre client, et si elle est boguée je recommande que) alors peut-être quelque chose comme CORBA est la voie à suivre. N'oubliez pas que Java est livré avec une implémentation CORBA standard, il vous suffit donc de générer votre proxy C à partir de l'IDL.

Swig peut être intéressant si vous voulez exécuter des choses en cours. Il simplifie la liaison des composants dans différentes langues. Notez en particulier qu'il generates bindings for Python and Java.

0

Si le critère ne réinvente pas la roue, les modules SimpleXMLRPCServer et xmlrpclib sont disponibles dans la bibliothèque standard. Ils devraient aussi travailler avec Jython.

3

S'il vous plaît voir une question connexe, où je recommended ExecNet. Cela semble être la bonne solution à ce genre de problèmes si vous voulez écrire l'intégration en Python (comme moi).

+0

Malheureusement, je ne peux pas l'utiliser car c'est GPL. Au premier abord, il semble bien, mais pourquoi GPL lorsque Python lui-même est plus libre? Tant pis. –

+0

Votre commentaire est valide C'est clair d'un email (http://www.mail-archive.com/[email protected]/msg00566.html) par l'auteur principal de execnet que la licence GPL est destinée à votre classe de problème. J'aime la simplicité d'execnet, et il semblerait que la pièce la plus susceptible de provoquer des problèmes IP - la combinaison de Pythons dans une relation de processus parent-enfant (popen) - est aussi la plus facile à remplacer. Voir cet exemple de code simple, http://codespeak.net/execnet/example/hybridpython.html#work-with-java-objects-from-cpython]. Peut-être que quelqu'un devrait écrire ce sous-ensemble :) –