#jakarta-ee #java-ee-6 #glassfish-3
#джакарта-ee #java-ee-6 #glassfish-3
Вопрос:
У меня следующая проблема в школьном проекте.
- Все многочисленные машины отправляют данные о своем местоположении веб-сервису без состояния, который сбрасывает их в очередь сообщений Java.
- Эта очередь обрабатывается компонентом, управляемым сообщениями, который вычисляет некоторый материал и отправляет его в кэш.
- В этом кэше / буфере необходимо хранить набор объектов буфера меньшего размера для каждой ячейки и периодически очищать каждый буфер, отправляя содержимое для этой ячейки в другую систему.
У меня возникли большие трудности с шагом 3. Моей первой мыслью было бы создать экземпляр компонента с сохранением состояния для каждой машины, чтобы каждая машина в системе могла содержать их несколько. Одноэлементный компонент будет отслеживать буферы для всех машин. Мы надеемся, что это сохранит масштабируемость.
Хотя, похоже, что это не так, как все делается, поскольку все указывает на внедрение и соотношение 1-1 между клиентами и компонентами с сохранением состояния, в то время как мне, похоже, нужно соотношение «1 ко многим».
После некоторого исследования я обнаружил, что онлайн-информация о такого рода сценариях в лучшем случае расплывчата, в худшем — неактуальна. Моя книга «Начало платформы Java EE 6 с Glassfish 3», похоже, вообще не касается этого. Я связался со своим техником, но он еще не ответил, и я сомневаюсь, что он действительно много знает об этом.
Я неохотно использую базу данных, потому что вещи на самом деле не нужно (и не должно!) хранить дольше, чем это абсолютно необходимо.
Может быть, я упускаю какую-то фундаментальную концепцию, или, может быть, я просто переосмысливаю вещи и мне нужен совершенно другой подход. Мой вопрос в том, как бы вы справились с такого рода проблемами в этой среде? Я использую Glassfish 3.0.1.
Комментарии:
1. Мне удалось обойти проблему, используя другой подход, поэтому решение больше не требуется. Хотя мне все еще любопытно. Причина, по которой я не хотел использовать простой HashSet или аналогичный подход, заключается в том, что я хотел создать своего рода «распределенный кэш», чтобы сохранить его масштабируемым.
Ответ №1:
я думаю, вы что-то пропустили в реализации кэша. Вы могли бы использовать простой HashSet для кэширования ваших данных. Или вы могли бы использовать существующую структуру кэша, такую как memcache (google cache), которая является очень производительной. смотрите раздел Memcache Если вы хотите периодически очищать кэш, вы можете использовать java.util Class Timer.
Ответ №2:
Зачем использовать сеансовые компоненты с сохранением состояния (обязательно ли)? Я бы написал другой StatelessSessionBean, который может возвращать значения из вашего кэша, а затем обернуть это другим веб-сервисом.