Ограничение статических переменных в сессионных компонентах
Невозможно использовать статические переменные в коде сессионного компонента. Является ли это ограничение произвольным или обоснованным? И почему?
С наилучшими пожеланиями
3 ответа
Как указано в FAQ по ограничениям EJB, одно из ограничений для использования EJB:
корпоративные бины не должны читать или записывать нефинальные статические поля
Далее подробно рассмотрено обсуждение статических полей:
Нефинальные поля статического класса в EJB запрещены, потому что такие поля делают корпоративный компонент трудным или невозможным для распространения. Поля статического класса являются общими для всех экземпляров определенного класса, но только в пределах одной виртуальной машины Java (JVM). Обновление поля статического класса подразумевает намерение делить значение поля между всеми экземплярами класса. Но если класс работает в нескольких JVM одновременно, доступ к новому значению будет иметь только те экземпляры, которые работают в той же JVM, что и экземпляр обновления. Другими словами, нефинальное поле статического класса будет вести себя по-разному, если работает в одной JVM, чем в нескольких JVM. Контейнер EJB оставляет за собой возможность распределения корпоративных компонентов по нескольким JVM (работающим на одном сервере или на любом из кластеров серверов). Нефинальные поля статического класса запрещены, поскольку экземпляры корпоративных компонентов будут вести себя по-разному в зависимости от того, распределены они или нет.
Приемлемым является использование полей статического класса, если эти поля помечены как окончательные. Поскольку окончательные поля не могут быть обновлены, экземпляры корпоративного компонента могут распределяться контейнером, не заботясь о том, чтобы значения этих полей стали несинхронизированными.
Это фундаментально. Согласно этой солнечной документации,
Нефинальные поля статического класса в EJB запрещены, потому что такие поля делают корпоративный компонент трудным или невозможным для распространения. Поля статического класса являются общими для всех экземпляров определенного класса, но только в пределах одной виртуальной машины Java (JVM). *
static
означает уникальный для класса ИЛИ для всех его объектов.
Сейчас, javabeans
должны иметь специфичные для пользователя данные, static
поля не имеют никакого смысла для них.
Один пользователь изменяет переменную, и она будет обновляться для всех остальных пользователей. (бесплатно):)
Однако, если вы хотите статическое поведение для них (то есть использование одинаковых данных для всех пользователей), вы должны application
для этой цели.