Ограничение статических переменных в сессионных компонентах - PullRequest
5 голосов
/ 04 февраля 2012

Невозможно использовать статические переменные в коде сессионного компонента.Является ли это ограничение произвольным или обоснованным?И почему?

С уважением

Ответы [ 3 ]

13 голосов
/ 04 февраля 2012

Как указано в FAQ по ограничениям EJB , одно из ограничений для использования EJB:

корпоративные бины не должны читать или записывать незавершенные статические поля

Более подробно рассмотрено в обсуждении статических полей :

Нефинальные поля статического класса запрещены в EJB, поскольку такие поля затрудняют или делают невозможным распространение корпоративного компонента.Поля статического класса являются общими для всех экземпляров определенного класса, но только в пределах одной виртуальной машины Java (JVM).Обновление поля статического класса подразумевает намерение делить значение поля между всеми экземплярами класса.Но если класс работает в нескольких JVM одновременно, доступ к новому значению будет иметь только те экземпляры, которые работают в той же JVM, что и экземпляр обновления.Другими словами, нефинальное поле статического класса будет вести себя по-разному, если работает в одной JVM, чем в нескольких JVM.Контейнер EJB оставляет за собой возможность распределения корпоративных компонентов по нескольким JVM (работающим на одном сервере или на любом из кластеров серверов).Нефинальные поля статического класса запрещены, поскольку экземпляры корпоративных бинов будут вести себя по-разному в зависимости от того, распределены они или нет.

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

5 голосов
/ 04 февраля 2012

Это фундаментально.Согласно этой солнечной документации ,

Нефинальные поля статического класса запрещены в EJB, поскольку такие поля затрудняют или делают невозможным распространение корпоративного компонента.Поля статического класса являются общими для всех экземпляров определенного класса, но только в пределах одной виртуальной машины Java (JVM).*

1 голос
/ 04 февраля 2012

static означает уникальный для класса ИЛИ для всех его объектов.

Теперь, javabeans должны иметь данные, специфичные для пользователя, static поля не имеют никакого смысла для них.

Один пользователь редактирует переменную, и она будет обновляться для всех остальных пользователей. ( бесплатно :-)).

Однако, если вам нужно статическое поведение для них (то есть использование одних и тех же данных для всех пользователей), у вас есть application для этой цели.

...