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