Как выполнить библиотеки COM + из Java, используя бесплатный метод - PullRequest
0 голосов
/ 29 января 2009

У меня есть компонент COM +, разработанный с VB6.

После регистрации в приложении COM + диспетчера служб компонентов я могу использовать его из ASP следующим образом

Set Comando = Server.CreateObject("JuiciosComando.clsComando")
ComandoExecute = Comando.execute(Xml)
Set Comando = Nothing

Это все, что мне нужно, компонент просто получает (может быть, огромную) строку и возвращает другую (также, возможно, огромную) строку ...

Есть ли какой-нибудь способ получить доступ к этому самому компоненту из Java?

На данный момент я нашел J-Integra , но это коммерческий продукт.

Я также нашел эту ветку на codeguru.com , но мои знания C ++ .NET довольно скудны, кроме того, я бы предпочел просто найти бесплатное решение на чистом Java.

Ответы [ 5 ]

5 голосов
/ 29 января 2009

Как упоминал Эдди, у вас есть два основных метода использования COM через java: использование C ++ и написание оболочки JNI или использование стороннего JAR для обертывания COM-объекта.

В прошлом я пытался использовать C ++ для обёртывания COM-объекта - это не для слабонервных - это нелегко сделать и очень легко утечь ресурсы.

Я также использовал два сторонних JAR: ComfyJ и JACOB.

ComfyJ был действительно прост в использовании, а также включал утилиту codegen для генерации классов-оболочек Java для ваших COM-классов.

Может быть загружен и испытан через http://www.teamdev.com/comfyj/index.jsf

(я никак не связан с TeamDev!)

Если вы отчаянно нуждаетесь в совершенно бесплатном решении, вы также можете попробовать JACOB (http://sourceforge.net/projects/jacob-project/).

У меня были проблемы с документацией, но она была относительно стабильной.

4 голосов
/ 30 января 2009

Я могу подтвердить, что JACOB работает довольно хорошо. Я использовал его для многочисленных проектов автоматизации COM без каких-либо проблем. И это бесплатно ...

2 голосов
/ 29 января 2009

Я работал с приложением, которое первоначально пыталось JNI взаимодействовать с собственным кодом для доступа к COM, и в итоге его было очень очень сложно поддерживать и отлаживать. (К счастью, я не был человеком, работающим над этой частью приложения!) В результате этого опыта я теперь рекомендую, чтобы код Java, необходимый для доступа к COM, сделал это, написав приложение на C # для доступа к COM, и использовал зазубренная розетка между двумя приложениями.

JNI излишне рискован и сложен в Java по сравнению с аналогом в C #, поэтому наиболее стабильный способ сделать это из Java - это не делать это из Java. Делегируйте доступ COM к чему-то, что имеет опыт в доступе COM: C #.

Ваша другая альтернатива - лицензировать какую-либо стороннюю библиотеку, которая сама управляет JNI для вас. Но если вам не нравится боль, я настоятельно рекомендую вам не использовать собственное решение JNI.

Добавлено позже: как видно из ссылки, на которую вы ссылались, код JNI может привести к сбою всей JVM. По крайней мере, если доступ к COM находится на другом конце сокета, если приложение C # падает, вы теряете свой сокет, который вы можете легко восстановить, когда приложение C # вернется. Тем не менее, C # far менее вероятен сбой при доступе к COM. Да, лучше иметь 100% чистое Java-решение, но иногда гораздо лучше делегировать задачи на другой язык.

1 голос
/ 30 мая 2009

Может быть, вам стоит попробовать com4j, который прекрасно работает для меня и поддерживает также com события. Вы можете найти его здесь: https://com4j.dev.java.net/

0 голосов
/ 30 мая 2009

Извините, я знаю, что эта ветка старая, но j-Interop может вам помочь.

С j-interop.org веб-сайта:

"j-Interop - это Java с открытым исходным кодом библиотека (под LGPL), которая реализует протокол DCOM (MSRPC) для включить разработку Pure, Двунаправленная, неродная Java приложения, которые могут взаимодействовать с любым компонентом COM. "

Cheers, Matt

...