Объекты области приложения JEE6 - PullRequest
0 голосов
/ 07 октября 2011

Я все еще довольно новичок в JEE6, пришедшем из стиля разработки Servlets + JSP на унаследованных системах. В приложениях, над которыми я работал, мы просто бросали объекты в различные предоставляемые области (запрос, сессия и приложение), которые были привязаны к константе String. Например, объект «Пользователь», представляющий текущего вошедшего в систему пользователя, будет находиться в области видимости сеанса с ключом «current_user».

Я сделал то же самое в нашем новом приложении JEE6, когда пользователь входит в объект User, привязанный к области сеанса. Мне интересно, если есть лучший, более EE, способ справиться с этим?

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

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

1 Ответ

0 голосов
/ 09 октября 2011

Может быть, CDI может помочь?

Не могли бы вы определить способ достижения объекта User одним основным методом? Если это так, и вы работаете со средой Java EE 6, вы можете использовать метод Producer. Что-то между этими строками:

public class ClassWhichCanAccessUserObject {

    @Produces
    public User produceUser() {
        User u = ... // get the user as you do it right now
        return u;
    } 
}

Затем в том месте, где вы хотите использовать этот класс, вы просто вводите его (в поле или метод) и используете его:

public class MyLogic {
    @Inject
    User u;
}

Не забудьте добавить файл beans.xml в ваш путь к классам, так как без CDI не будет работать для вашего модуля.

...