Если нам не разрешено использовать статические переменные в сессионных компонентах, как определить регистратор? - PullRequest
3 голосов
/ 29 июля 2009

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

Ответы [ 3 ]

7 голосов
/ 29 июля 2009

Я думаю, что вы интерпретируете "правило" слишком жестко.

Вы не должны хранить какие-либо состояния сервлета / сеанса / bean-компонента в статической переменной, поскольку эта ссылка является общей для всех экземпляров этого типа.

Однако регистратор (обычно или не должен) удерживать любое состояние. ИМО прекрасно использовать статические ссылки на экземпляр Logger, если вы следуете обычной практике именования / классификации ваших регистраторов на основе имени класса:

public class SomeTypeOfBean {
    private static final Logger log = Logger.getLogger(SomeTypeOfBean.class);
    //...
}
3 голосов
/ 29 июля 2009

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

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

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

1 голос
/ 29 июля 2009

Вы можете просто сделать его нестатичным членом.

...