2010-01-14 9 views
7

Conservo un'applicazione legacy Java che utilizza Jacob o Java-COM Bridge per effettuare chiamate tramite le interfacce COM di MS VBA e MS Word. Ho visto com4j da Sun, e sembra promettente.com4j contro jacob per chiamare i metodi COM da Java

La ragione per cui mi sembra buona è che utilizza il binding vtable ai metodi, anziché IDispatch. Supponendo che tutti gli oggetti COM manipolino le interfacce vtable presenti, sembra più pulito utilizzarli invece di IDispatch. Ai tempi in cui COM e CORBA, dove le tecnologie di interfaccia binaria a caldo, mi sembra di ricordare che l'associazione anticipata tramite il vtable ha dato migliori prestazioni rispetto al late binding tramite IDispatch.

chiunque ha migrato da Giacobbe a com4j? Se sì, quali erano le insidie ​​e le lezioni apprese?

risposta

13

Ho usato sia Jacob e Com4j nell'integrazione, mentre nei confronti di un oggetto COM semplice. Ho finito per andare con Com4j principalmente perché Jacob ha perso troppa memoria. Rispetto a Jacob, penso che Com4j fosse più diretto una volta impostato. Se ricordo bene, Jacob ha richiesto molto più impostazione e digitazione prima di effettuare la vera chiamata COM. Mentre in Com4j userai solo la fabbrica fornita.

Com4j ha funzionato bene per noi, ma abbiamo avuto qualche problema in arrivo. Innanzitutto, le interfacce generate non sono state generate correttamente e abbiamo dovuto modificarle manualmente. I problemi principali che ricordo erano che non riuscivamo a far funzionare correttamente l'annotazione @ReturnValue. Inoltre, dovevamo correggere manualmente l'enumerazione @VTID.

Un'altra importante cosa che abbiamo dovuto affrontare è che non è stato possibile utilizzare la classe Holder (out params) per short s. Abbiamo finito per creare un wrapper Delphi che converta da Integer a Short invece di apportare modifiche a Com4j.

Infine, ricordo che ero un po 'preoccupato per lo stato del progetto mentre l'ho integrato. Non sembrano esserci aggiornamenti regolari (a due anni dall'ultima versione di manutenzione).

+1

Grazie. Non volevo entrare nella memoria di Jacob - perdite senza fornire dettagli, ma l'abbiamo visto anche noi. Penso che farò un progetto dimostrativo con com4j, e uno con Jacob, e sperimenterò le differenze in prima persona. –

+0

Sto cercando di passare da com4j a jacob perché sfortunatamente com4j funziona solo con Java a 32 bit non a 64 bit di Java, quindi sembra morto nell'acqua andando avanti. –

+0

Come aggiornamento al commento di @PaulTaylor com4j è stato da allora [aggiornato con supporto java 64-bit] (http://kohsuke.org/2012/04/27/com4j-updates/). –

0

Anche se è una domanda molto vecchia, ma consiglio anche alle nuove persone di usare Com4j perché è più stabile, ha una community attiva e persino un plug-in Maven per generare le classi Java. Ma potresti anche voler dare un'occhiata a "j-interop".