Как отфильтровать кадры нескольких приложений в одной JVM - PullRequest
0 голосов
/ 03 января 2012

У меня есть менеджер приложений, который загружает и запускает банки приложений в одной JVM. Он изолирует каждую флягу от своего загрузчика классов. Менеджер общается с детьми через сокеты для данных и конфигурации. Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность использовать вызов getFrames в каждом приложении для сохранения / восстановления геометрии, и он всегда возвращает все кадры в JVM для каждого приложения, работающего в этой JVM. Есть ли способ отфильтровать результаты для каждого приложения? Я пробовал фильтровать на основе загрузчика классов, но загрузчики классов Frames всегда равны нулю.

Ответы [ 2 ]

1 голос
/ 03 января 2012

Я предполагаю, что getFrames () запрашивает некоторую глобальную коллекцию. Единственный способ изолировать такую ​​глобально доступную библиотеку состоит в том, чтобы каждая загрузка приложения представляла собой собственную копию библиотеки Frames (поэтому она не доступна глобально). Это затрудняет вызов getFrames ();)

1 голос
/ 03 января 2012

Поскольку вы даете только несколько деталей, трудно сказать, что может быть не так. Некоторые комментарии:

  1. Как правило, не рекомендуется запускать несколько приложений Java на одной виртуальной машине. Например, каркасы журналирования и драйверы БД устанавливают глобальные хуки в ВМ, поэтому их выгрузка становится невозможной. Рассмотрите возможность запуска каждого приложения в своей виртуальной машине. Используйте системные свойства, чтобы определить параметры, которые вам нужны. Вот код , с которого следует начать.

  2. Если запуск каждого приложения на их собственной виртуальной машине невозможен, как насчет общения с каждым приложением и его «регистрации» на сервере приложений? Веб-серверы используют стандартизованные прослушиватели для этой цели. Таким образом, приложения могут сказать вам, какие кадры / значения конфигурации сохранить.

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

...