编程语言
首页 > 编程语言> > Java-在Wicket AuthenticateWebSession中EJB3注入为空

Java-在Wicket AuthenticateWebSession中EJB3注入为空

作者:互联网

我在应用程序中使用Wicket EJB3,但遇到一个问题,但找不到任何相关的主题,因此这里是:

我正在使用Wicket身份验证,并且需要使用EJB中重写的方法authenticate(…)中的方法.

我可以在任何检票口页面中使用此EJB,但是当涉及到WebSession时,它保持为Null,则注入无法正常工作.

我的WicketSession类看起来像这样:

public class WicketSession extends AuthenticatedWebSession {

   @EJB(name = "UserService")
   private UserService userService;

   private User user = null;

   public WicketSession(Request request) {
    super(request);
   }

   @Override
   public boolean authenticate(final String login, final String password) {

      user = userService.findByLoginPwd(login, password);

      return user != null;;
   }

   public User getUser() {
      return user;
   }

   public void setUser(User user) {
      this.user = user;
   }
}

而我的EJB3:

@Remote
public interface UserService {
    public User findByLoginPwd(final String login, final String pwd);
}

@Stateless
public class UserServiceImpl implements UserService {

   public User findByLoginPwd(final String login, final String pwd) {
       [...]
   }
}

带有Wicket的Web部件打包在战争中,带有EJB的业务部件打包在jar中,然后我试着将其部署在JOnAS服务器上.

任何帮助将不胜感激=)

尼古拉斯

解决方法:

正如肖恩·帕特里克·弗洛伊德(Sean Patrick Floyd)所述,会话不是组件,因此为Wicket组件提供的自动注入不适用.

在非组件中注入内容的常见习惯是添加行

    InjectorHolder.getInjector().inject(this);

到构造函数.

我没有将其用于WicketSession扩展,但是我不知道它无法正常工作的原因.

在JavaEEComponentInjector中,inject方法几乎可以肯定是在执行JNDI查找,您可以自己进行JNDI查找来获取对象,但这是在重用现有的注入,并且如果您决定更改注入器(例如通过扩展JavaEEComponentInjector),它确保您将继续使用相同的注射.

标签:wicket,ejb,java,session
来源: https://codeday.me/bug/20191023/1913336.html