2010-01-14 16 views
7

Je gère une application Java héritée qui utilise Jacob, ou Java-COM Bridge, pour effectuer des appels via les interfaces COM de MS VBA et MS Word. J'ai regardé com4j de Sun, et il semble prometteur.com4j versus jacob pour appeler les méthodes COM depuis Java

La raison pour laquelle cela me semble bon est qu'il utilise la liaison vtable aux méthodes, au lieu de IDispatch. En supposant que tous les objets COM que nous manipulons présentent des interfaces vtable, il semble plus propre de les utiliser à la place de IDispatch. À l'époque où COM et CORBA utilisaient les technologies d'interface binaire à chaud, il me semble me rappeler que la liaison anticipée via le vtable donnait de meilleures performances que la liaison tardive via IDispatch.

Est-ce que quelqu'un a migré de Jacob vers com4j? Si oui, quels ont été les pièges et les leçons apprises?

Répondre

13

J'ai utilisé à la fois Jacob et Com4j dans l'intégration avec un simple objet COM. J'ai fini par aller avec Com4j principalement parce que Jacob a perdu trop de mémoire. Comparé à Jacob, je pense que Com4j était plus simple une fois qu'il a été mis en place. Si je me souviens bien, Jacob demandait beaucoup plus de configuration et de frappe avant de faire l'appel COM réel. Dans Com4j, vous utiliserez simplement l'usine fournie. Com4j fonctionne bien pour nous, mais nous avons rencontré quelques difficultés en cours de route. Premièrement, les interfaces générées n'étaient pas correctement générées et nous devions les modifier manuellement. Les principaux problèmes dont je me souviens étaient que nous ne pouvions pas obtenir l'annotation @ReturnValue pour fonctionner correctement. En outre, nous devions corriger manuellement l'énumération @VTID.

Une autre chose importante que nous avons rencontrée était que nous ne pouvions pas utiliser la classe Holder (out params) pour short s. Nous avons fini par faire un wrapper Delphi de Integer à Short au lieu de faire des changements sur Com4j. Enfin, je me souviens que j'étais un peu inquiet de l'état du projet pendant mon intégration. Il semble qu'il n'y ait pas de mises à jour régulières (deux ans depuis la dernière version de maintenance).

+1

Merci. Je ne voulais pas entrer dans la fuite de mémoire de Jacob sans fournir de détails, mais nous l'avons vu aussi. Je pense que je vais faire un projet de démonstration avec com4j, et un avec Jacob, et expérimenter les différences de première main. –

+0

Im regardant aller de com4j à jacob parce que, malheureusement, com4j ne fonctionne qu'avec Java 32 bits pas 64 bits Java, semble donc mort dans l'eau à venir. –

+0

En tant que mise à jour du commentaire de @PaulTaylor, com4j a depuis été [mis à jour avec le support Java 64 bits] (http://kohsuke.org/2012/04/27/com4j-updates/). –

0

Bien que ce soit une question très ancienne, mais je recommande également de nouvelles personnes à utiliser Com4j car il est plus stable, il a une communauté active et même un plug-in Maven pour générer vos classes Java. Mais vous pouvez également jeter un oeil à "j-interop".