2010-01-14 9 views
7

Mantengo una aplicación heredada de Java que usa Jacob, o Java-COM Bridge, para hacer llamadas a través de las interfaces COM de MS VBA y MS Word. He estado mirando com4j de Sun, y parece prometedor.com4j versus jacob para llamar a los métodos COM desde Java

La razón por la que se ve bien para mí es que utiliza vinculación de vtable a los métodos, en lugar de IDispatch. Suponiendo que todos los objetos COM manipulamos las interfaces vtable actuales, parece más limpio usarlas en lugar de IDispatch. En los días en que COM y CORBA eran las tecnologías de interfaz binaria, me parece recordar que la vinculación temprana a través del vtable dio un mejor rendimiento que el enlace a través de IDispatch.

¿Alguien ha migrado de Jacob a com4j? Si es así, ¿cuáles fueron las trampas y las lecciones aprendidas?

Respuesta

13

He usado tanto Jacob como Com4j en la integración con un simple objeto COM. Terminé yendo con Com4j principalmente porque Jacob gastó demasiada memoria. Comparado con Jacob, creo que Com4j fue más directo una vez que está configurado. Si mal no recuerdo, Jacob requirió mucha más configuración y mecanografía antes de hacer la llamada COM real. Mientras esté en Com4j, simplemente usará la fábrica provista.

Com4j ha estado funcionando bien para nosotros, pero hemos tocado algunos baches en el camino. Primero, las interfaces generadas no se generaron correctamente y tuvimos que modificarlas manualmente. El principal problema que recuerdo es que no pudimos hacer que la anotación @ReturnValue funcionara correctamente. Además, necesitábamos corregir manualmente la enumeración @VTID.

Otra cosa importante que enfrentamos fue que no pudimos usar la clase Holder (fuera de parámetros) para short s. Terminamos creando un contenedor Delphi convirtiendo de Integer a Short en lugar de hacer cualquier cambio en Com4j.

Finalmente, recuerdo que estaba un poco preocupado por el estado del proyecto mientras me integraba. Parece que no hay actualizaciones regulares (hace dos años desde la última versión de mantenimiento).

+1

Gracias. No quería entrar en la fuga de memoria de Jacob sin proporcionar detalles, pero también lo hemos visto. Creo que haré un proyecto de demostración con com4j, y otro con Jacob, y experimentaré las diferencias de primera mano. –

+0

Estoy buscando pasar de com4j a jacob porque lamentablemente com4j solo funciona con Java de 32 bits Java no de 64 bits, por lo que parece estar muerto en el agua en el futuro. –

+0

Como una actualización del comentario de @PaulTaylor com4j ha sido [actualizado con soporte java de 64 bits] (http://kohsuke.org/2012/04/27/com4j-updates/). –

0

Aunque es una pregunta muy antigua, pero también recomiendo nuevas personas para usar Com4j porque es más estable, tiene una comunidad activa e incluso un plugin Maven para generar sus clases de Java. Pero también puede echar un vistazo a "j-interop".

Cuestiones relacionadas