我在一个应用程序中使用 Wicket + EJB3,我遇到了一个问题,但我找不到任何相关的主题,所以这里是:
我正在使用 Wicket 身份验证,并且需要在覆盖方法 authenticate(...) 中使用来自 EJB 的方法。
我可以在任何 wicket 页面中使用这个 EJB,但是当涉及到 WebSession 时,它保持为 Null,注入(inject)无法正常工作。
我的 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 部分打包在 war 中,EJB 的业务部分打包在 jar 中,然后我将它部署在 JOnAS 服务器上。
任何帮助将不胜感激 =)
尼古拉斯
最佳答案
我很确定注入(inject)与 IComponentInstantiationListener
一起工作(至少 Spring 版本是这样工作的)。 更新:确实如此,参见this document .
但是, session
不是组件,因此需要一种不同的机制。也许有一种方法可以在 Application.newSession()
中连接您的 Session
方法?您必须查看 JavaEEComponentInjector
的实现,并在创建 session 时复制它的作用。
关于java - EJB3 注入(inject)在 Wicket AuthenticateWebSession 中为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102807/