Вопрос по JNI и JEE к джавистам.

Условия:
а) Есть DLL в которой нужная нам функциональность
б) Есть самописанная JNI обертку (проверил на JSE — работает на ура)
в) Есть JBoss на виндах

Вопрос:
в) Как бы по правильному использовать JNI в JEE envinronment (под JBoss).

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

Из того, что я прочел и понял
— Если у нас что-то крешится в DLL, то падает весь сервер.
— Если Java класс делающий System.LoadLibrary загружен одним ClassLoader’ом, то если второй ClassLoader попытается
загрузить тот же класс, то оно не сможет загрузить DLL, так как DLL уже загружен в процессе (особенность винды) и поэтому не сможет использовать JNI интерфейсы.
— Как я понял, по спецификации EJB не работают с JNI. С другой стороны, в нескольких местах прочел, что работаю, но с ограничениями.

Пару идей которые встречал
а) Сделать C++ приложение JMS enabled. И общаться из приложения в app server с этим JMS enabled приложение
б) Поднять отдельный сервер и общаться через RMI.
в) Сделать adaptor (JavaEE connector architecture). Это опцию я понял хуже всего, но зато похоже она наиболее правильная.

Ну и еще раз повторю вопрос, только теперь чуть более развернуто. Как бы сделать это по правильному? Какие есть еще подводные камни о которых нужно знать (так как хочется не только сделать правильно, но и понимать, почему это правильно).

8 комментариев to “Вопрос по JNI и JEE к джавистам.”

  1. Андрей Подгурский:

    Чуваг, мы так сложно не замарачиваемся.
    Делаем веб сервис на .NET и на Java — и они друг с другом прекрасно разговаривают. я с RMI со времён СДД не работал 🙂

    с JMS есть моменты:
    а) могут друг друга не всегда хорошо монимать. Я в UBS банке натрахался полтора месяца с Caplin либеработом, который на C++ — иногда сообщения путались.
    б) нужен посредник-брокер ( Tibco или ActiveMQ ), а значит на 50% больше модулей и в два раза больше связей — оно тебе надо?

    Ещё у гугла какая-то http-friendly либа с протоколом есть, кросплатформенная — и на java и на c++ и на руби работает. на JSON протокол похож. Но что-то старый с стал, не помню либы название, думаю тебе тут подскажут.

    • Victor Ronin:

      Ага. Поняв. То есть, DLL’ку предлагаешь запихнуть в что-нибудь не Javовское и потом по http туда ходить.

      Честно говоря, поэтому я вопрос и написал, так как после полтора дня поисков, все варианты кажутся достаточно сложными.

      • Андрей Подгурский:

        Да, предлагаю где-то так.
        Хотя зависит от того, насколько большая ДЛЛка или что там у тебя.
        В идеале, конечно, это два сервера — линух с java и микрософт с DLLкой. Но если проект мааааленький — можно попробывать что-то вроде http://www.teamdev.com/store/jniwrapper/
        Это Харьковские ребята, бывший МИИК, по-моему у них была раздача бесплатная «местным» когдато…

  2. Nekto:

    А сопутствующие затраты: железо, лицензия на Windows Server, .Net Framework, IIS? и все ради одной DLLки? Не много ли?
    Если уж совсем заморачиваться, то для начала «курим» тут http://facingtech.blogspot.com/2010/10/accessing-win32-dlls-from-java-under.html

    • Victor Ronin:

      Все это уже и так работае на Wind’е, так что дополнительных затрат нет.

      • Nekto:

        Ну, если есть .Net и IIS, то зачем JBoss? 🙂
        А по существу вопроса: если использовать обертку JNI, то нужно успользовать вторую JVM, чтобы избежать падения сервера при exception в DLLке. Или отдельный сервер (custom, Apache) на том же железе с выбранным интерфейсом и постоянным мониторингом.

        • Victor Ronin:

          Ага. Понял.

          Собственно все ответы, которые я получил именно к этому и свелись. Второй сервер, его мониторить и какой-то механизм общения между серверами.

    • Ivan:

      Зачем нужен WinServer и IIS? O_o
      .NET-овские веб-сервисы спокойно можно хостить in-process или в windows service на не-серверной оси.

      Там выше вполне разумно посоветовали: веб-сервис на .НЕТ, из-под него вызовы куда нужно в длл’ки, java-часть прекрасно общается с веб-сервисом без всяких дополнительных приблуд.

      ЗЫ. Лицензия для .NET Framework? Я что-то пропустил в этой жизни?)))