Клиент C ++ для Java RMI? Или любой другой способ использовать Java из C ++? - PullRequest
3 голосов
/ 14 декабря 2009

Нам нужно использовать библиотеку Java из кода C ++. У меня была идея, что если бы мы могли создать клиент C ++ для Java RMI (в идеале, с использованием некоторого фреймворка или мастера), то мы могли бы запустить библиотеку Java как отдельный сервер. Это кажется чище, чем пытаться запустить Java VM в приложении C ++.

В качестве альтернативы, если у вас есть какие-либо идеи о том, как использовать Java из C ++, я был бы рад услышать. Мы работаем на Linux.

Большое спасибо,

David

Ответы [ 3 ]

3 голосов
/ 14 декабря 2009

RMI тесно связан с JVM (и сериализацией Java), поэтому это нецелесообразно. Нет, если клиент C ++ не включает JVM.

CORBA является очевидным независимым от платформы эквивалентом. Это немного разработано комитетом и теперь считается очень не модным. WS- / JAX-WS является своего рода современным эквивалентом с большим количеством XML, но его можно считать неудачной попыткой CORBA. REST - это попытка облегченного WS- , но см. Нападки Джоэла на Stackoverflow DevDay о заявленной «простоте».

Вы можете пойти в старую школу и просто протолкнуть байт через TCP / IP (или каналы). Или, если локально, просто exec программа на C ++. Или используйте собственный интерфейс: JNI встроен в JRE, или JNA - более приятный слой поверх.

2 голосов
/ 15 декабря 2009

Не беспокойтесь о RMI. Если вы хотите сделать приложение Java отдельным сервером, пусть ваш клиент C ++ взаимодействует через JMS (служба обмена сообщениями Java). ActiveMQ - это бесплатная реализация JMS-брокера сообщений, которая предоставляет встроенные службы, а также клиентские библиотеки C ++ . Протокол JMS очень прост в использовании (по крайней мере, из Java). Это, вероятно, не так гибко, как выполнение REST, но, вероятно, это будет более легкая реализация.

1 голос
/ 15 декабря 2009

JNI был намеченным решением проблемы интеграции C / C ++ в Java. Это не сложно.

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

CORBA и RMI также должны были быть механизмами сетевого доступа.

Из твоего описания ты этого не хочешь. Вы хотите использовать библиотеку Java в C ++, и для этого вы используете JNI.

Как запустить JVM и вызвать метод Java, из C ++ (JDK doc)

...