совместное использование Java-объектов между приложениями - PullRequest
0 голосов
/ 30 ноября 2011

Я хочу написать приложение, которое при развертывании на сервере обнаруживает некоторые классы на этом сервере и их методы и предоставляет их список клиенту (через веб-сервис, сервлет или RMI).

клиент может затем выбрать метод и активировать его (с отражением).

Проблема в том, что мое приложение не находится в том же контексте, что и другие приложения на сервере, поэтому я не могу активировать их методы (я неу меня нет доступа к их загрузчику классов.

У меня есть несколько идей, но я не уверен, что они осуществимы:

  1. Создайте флягу и сообщите всем приложениям на сервереэто (через файл Manifes или путем помещения его в lib сервера) - Проблема в том, что таким образом я не могу выставить интерфейс клиенту (может быть, я могу через RMI?)

  2. Создайте WAR и свяжите все приложения с этой WAR, чтобы при запуске они загружали ее (например, ссылку на банку) - насколько я знаю, это невозможно.

  3. Есть ли загрузчик классов, который знает все классы?Есть ли способ получить его?

  4. Как это делают профилировщики?

Любая идея будет приветствоваться.

1 Ответ

0 голосов
/ 30 ноября 2011

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

4) Скорее всего, профилировщики используют JVMTI .

Однако следует помнить, что не рекомендуется выставлять каждый класс и каждый объект из соображений безопасности, стабильности и производительности. Должен ли пользователь иметь возможность вызывать методы для внутренних классов или базовых классов, таких как String? Должен ли пользователь иметь возможность звонить System.exit()? Я бы сказал, нет, и поэтому вам нужно определить какой-то метод определения того, что подвергать. Скорее всего, гораздо более простое решение (выделенные сервисы) будет отвечать вашим требованиям варианта использования (вы не указали их, так что это всего лишь предположение).

...