Собственный интерфейс OSGi и Java

Я хочу разработать пакет OSGi, который может вызывать интерфейс Java Native. У меня есть несколько вопросов:

  1. Можно ли разработать связку OSGi и разместить в ней классы-оболочки C и JNI? Есть ли уже разработанный пример, который я могу использовать?

  2. Возможно ли, чтобы методы Java, помещенные в пакет OSGi, вызывали методы Java, помещенные в управляемый компонент?

С наилучшими пожеланиями

P.S. Еще один вопрос: как я могу превратить один простой управляемый компонент в EJB?


person Peter Penzov    schedule 05.02.2012    source источник
comment
да, оба варианта возможны. Я сделал это для Apache Karaf, но подозреваю, что вы используете другой контейнер. Какой контейнер вы используете?   -  person Peter Lawrey    schedule 05.02.2012
comment
Апач Феликс. Я использую Нетбинс.   -  person Peter Penzov    schedule 05.02.2012
comment
Я думал, что Netbeans — это IDE, а не сервер приложений. Вы создаете плагин Netbeans?   -  person Peter Lawrey    schedule 05.02.2012


Ответы (1)


Вы можете сделать это довольно легко и очень переносимым способом на разных платформах, включив заголовок Bundle-NativeCode в манифест пакета.

Например:

Bundle-NativeCode: lib/mylib1.dll ; lib/mylib2.dll ;
  osname=Win32 ;
  processor=x86,
  lib/libmylib1.so ; lib/libmylib2.so ;
  osname=linux;
  processor=x86

Будет загружено

  • lib/mylib1.dll и lib/mylib2.dll (из внутри комплекта), если ОС Win32 и тип процессора x86

or

  • lib/libmylib1.so и lib/libmylib2.so, если ОС Linux и тип процессора x86

Прелесть этого подхода в том, что вы можете включать различные нативные библиотеки в зависимости от архитектуры, а среда выполнения OSGi автоматически выберет правильный набор для текущей платформы, когда вы, например, вызовете System.loadLibrary("mylib1");

Вот старый блог на эту тему: http://robertvarttinen.blogspot.co.uk/2008/12/bundle-nativecode-in-osgi-manifest.html

person Donald_W    schedule 25.04.2015