JBoss Seam: компоненты, внедренные в POJO, но не сессионные компоненты - PullRequest
3 голосов
/ 08 марта 2010

У меня есть компонент Seam, который обрабатывает вход в систему, с именем «authenticator»:

@Name("authenticator")
public class AuthenticatorAction implements Authenticator
{
    @PersistenceContext 
    private EntityManager em;

    @In(required=false)   
    @Out(required=false, scope = SESSION)
    private User user;

    public boolean authenticate(){ ... }

}

Это прекрасно работает, Seam внедряет экземпляр EntityManager. Однако, как только я добавляю аннотацию @Stateless, ничего не происходит! В этом случае экземпляр EntityManager является нулевым при входе в метод authenticate(). Еще одно интересное замечание: у меня есть отдельный сессионный компонент с состоянием, экземпляр Logger в этом классе внедряется, только если я сделаю его статическим. Если он у меня нестатический, он не вводится. Это отлично подходит для регистратора, но для таких сессионных компонентов без сохранения состояния, я не могу иметь статические переменные-члены для этих компонентов.

Я запутался, потому что этот аутентификатор именно такой, как в примере бронирования Seam: сессионный компонент без сохранения состояния с внедренной переменной private.

Есть идеи?

1 Ответ

4 голосов
/ 09 марта 2010

Мне любопытно:

Однако, , как только я добавлю аннотацию @Stateless , ничего не произойдет!

Так что Надеюсь Ваш интерфейс Authenticator помечен с помощью @ javax.ejb.Local или @ javax.ejb.Remote. Если нет, значит ваше лицо без гражданства не будет работать должным образом.

Если у вас есть компонент @Stateless Session, , вы должны активировать перехватчик Seam , чтобы включить @ In-jection. Что-то вроде

pureCharger-jar.jar 
    META-INF
        ejb-jar.xml
        persistence.xml

ejb-jar.xml выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
    <interceptors>
        <interceptor>
            <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
        </interceptor>
    </interceptors>
    <assembly-descriptor>
        <interceptor-binding>
            <ejb-name>*</ejb-name>
            <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
        </interceptor-binding>
    </assembly-descriptor>
</ejb-jar>

Если возможно, взгляните на Seam Security с Дэном Алленом , на JavaOne, автора книги Seam in Action.

С уважением,

...