Вызов работающего кода Java из кода C++ и наоборот

мой вопрос заключается в том, как вызвать работающий код Java из кода C++ и наоборот. Доступно несколько сообщений, посвященных вызову скомпилированных файлов C++ из Java или JVM из C unsing Java Native Interface (JNI) или Java Native Access (JNA). Однако мне это кажется неадекватным способом вызова работающего кода, поскольку в примерах вызываются только скомпилированные библиотеки.

Мой случай выглядит следующим образом. На локальном компьютере запущено два приложения. Одно приложение основано на Eclipse и Java. Другое приложение основано на C++. Мне нужно, чтобы они общались в обоих направлениях. Может быть, это дело для RPC? Но мне не нужно общаться через веб.

Я думаю, что RCP может быть способом, но мне он кажется слишком большим, поскольку я не хочу общаться через Интернет и не знаю, как использовать RCP в этом контексте. Я ищу более разумное решение.

Есть ли опыт, который может мне помочь?

Спасибо и с уважением

Роб


person user1459107    schedule 15.06.2012    source источник
comment
Вам доступны различные средства межпроцессного взаимодействия. Я всегда был поклонником именованного канала, но для вас это может быть слишком простой абстракцией. Помните, что, хотя полнофункциональный механизм RPC с поддержкой сети может показаться излишним, вы можете использовать существующие библиотеки для выполнения тяжелой работы, и это дает вам возможность распространять свои приложения по сети или нескольким виртуальным машинам на одном хосте в будущее и т.д.   -  person Rook    schedule 15.06.2012


Ответы (2)


Возможно, вы захотите взглянуть на мое решение C++ to Java RPC. Учитывая класс Java, он генерирует заглушку клиента C++ и заглушку сервера Java.

https://github.com/danfickle/cppToJavaRpcStubGenerator

Изменить: я думаю, что CORBA - это «стандартное» решение. Тем не менее, 1000-страничная книга Java и CORBA, которая стоит у меня на книжной полке (и я ее не читал), предполагает, что есть кривая обучения. Вы также можете изучить MessagePack, Thrift, ActiveMQ и т. д. Извините, больше ничем помочь не могу.

person Daniel    schedule 16.06.2012
comment
Спасибо Даниил! Тем не менее, RCP кажется мне слишком большим и имеет некоторые проблемы с производительностью. В моем случае важна производительность, так как оба моих приложения будут обмениваться миллионами сообщений за короткий промежуток времени. Действительно ли обмен сообщениями между локальным приложением Java и локальным приложением C++ настолько необычен, что стандартное решение отсутствует? - person user1459107; 16.06.2012

JNI позволяет связать код C++ и Java; однако это одна и та же программа.

Если вы хотите, чтобы одна программа вызывала другую программу, самый простой способ — использовать сетевую технологию. RPC, CORBA, клиент-серверные сокеты или любые другие средства, включая сеть, вам подойдут.

Существуют более сложные несетевые стековые решения, такие как разделяемая память, семафоры, конвейеры и т. д.; однако для них требуется операционная система, которая их поддерживает, и на них распространяются ограничения на то, как они используются, плюс вам нужно будет найти языковые привязки для обоих языков, использующих их.

person Edwin Buck    schedule 15.06.2012
comment
Спасибо Эдвин! Но я не знаю, как начать. Должен ли я использовать RMI для вызова приложения C++ из Java? Какой тип RCP можно использовать для вызова приложения Java из приложения C++? Я не настолько знаком с RCP. - person user1459107; 15.06.2012