2010-01-14 10 views
7

Utrzymuję starszą aplikację Java, która używa Jacob lub mostu Java-COM, do wykonywania połączeń za pośrednictwem interfejsów COM MS VBA i MS Word. Patrzę na com4j od Sun i wygląda obiecująco.com4j kontra jacob wywoływać metody COM z Java

Powodem, dla którego wydaje mi się to dobre, jest to, że używa metody vtable do wiązania metod zamiast do IDispatch. Zakładając, że wszystkie obiekty COM manipulujemy obecnymi interfejsami vtable, wydaje się, że używanie ich zamiast funkcji IDispatch wydaje się czystsze. W czasach, gdy COM i CORBA, gdzie stosowano technologie binarnego interfejsu, zdaję sobie sprawę, że wczesne wiązanie za pośrednictwem vtable zapewnia lepszą wydajność niż późniejsze wiązanie za pośrednictwem IDispatch.

Czy ktoś wyemigrował z Jacoba na com4j? Jeśli tak, jakie pułapki i wnioski zostały wyciągnięte?

Odpowiedz

13

Użyłem zarówno Jacoba, jak i Com4j podczas integracji z prostym obiektem COM. Skończyłem z Com4j głównie dlatego, że Jacob wyciekł za dużo pamięci. W porównaniu z Jacobem, myślę, że Com4j był prostszy, gdy został skonfigurowany. Jeśli dobrze pamiętam, Jacob potrzebował znacznie więcej ustawień i pisania przed wykonaniem rzeczywistego połączenia COM. W Com4j wystarczy użyć dostarczonej fabryki.

Com4j działa dobrze dla nas, ale trafiliśmy kilka razy. Po pierwsze wygenerowane interfejsy nie zostały poprawnie wygenerowane i musieliśmy ręcznie je poprawić. Głównymi problemami, które pamiętam, było to, że nie mogliśmy uzyskać adnotacji @ReturnValue, aby działały poprawnie. Musieliśmy również ręcznie poprawić wyliczenie @VTID.

Jedną z głównych rzeczy, przed którą stanęliśmy, było to, że nie mogliśmy użyć klasy Holder (out params) dla short s. W efekcie stworzyliśmy opakowanie Delphi konwertujące z Integer na Short zamiast robić jakiekolwiek zmiany w Com4j.

Wreszcie, pamiętam, że trochę martwiłem się o status projektu, podczas gdy ja się zintegrowałem. Wydaje się, że nie ma regularnych aktualizacji (dwa lata od ostatniego wydania obsługi technicznej).

+1

Dzięki. Nie chciałem wpaść w wyciek pamięci Jacoba bez podawania szczegółów, ale my też to widzieliśmy. Myślę, że zrobię projekt demonstracyjny z com4j i jednym z Jacobem i doświadczyłem różnic z pierwszej ręki. –

+0

Zamierzam przejść od com4j do jacoba, ponieważ niestety com4j działa tylko z 32-bitową Javą, a nie 64-bitową Javą, więc wydaje się być martwy w wodzie. –

+0

Jako aktualizacja komentarza @PaulTaylor com4j został od tego czasu [zaktualizowany z obsługą 64-bitowego java] (http://kohsuke.org/2012/04/27/com4j-updates/). –

0

Chociaż jest to bardzo stare pytanie, ale polecam również nowe osoby do korzystania z Com4j, ponieważ jest bardziej stabilny, ma aktywną społeczność, a nawet wtyczkę Mave do generowania klas Java. Ale możesz też chcieć rzucić okiem na "j-interop".

Powiązane problemy