如何从servlet调用EJB 3.1非零参数构造函数?

时间:2011-03-16 16:47:05

标签: servlets constructor java-ee-6 ejb-3.1

我有一个login.java servlet,正如其名称所示,它为我的Web应用程序提供了登录功能。

我是新手,我正在使用EJB 3.1和EE 6.在我的LoginBean.java EBJ中,我有一个无参数的构造函数,另一个有一些参数(电子邮件,密码等)。

在servlet代码中的某一点,我有调用实例化我的EJB:

@EJB LoginBean loginBean;

我想知道是否可以(以及如何)调用其他构造函数而不是零参数。

非常感谢。 欢呼声。

2 个答案:

答案 0 :(得分:4)

你不想这样做。同一个servlet在所有用户之间共享,因此EJB也在所有用户之间共享。您不希望将特定于用户的数据存储为servlet或EJB类的实例变量。它将在所有网页访问者之间共享。

而是将参数移动到您在登录servlet的doPost()方法中调用的EJB方法。

User user = loginBean.login(username, password);

然后在成功时将其存储在HTTP会话中

request.getSession().setAttribute("user", user);

以便您的其他网络应用程序可以拦截此用户以确定用户是否已登录。

if (request.getSession().getAttribute("user") != null) {
    // User is logged in.
} else {
    // User is not logged in.
}

答案 1 :(得分:1)

我100%同意BalusC。除了他的回答之外,我想补充一点,你通常 * 从不显式引用EJB bean的构造函数,即使理论上这样做有意义(例如,当传入一些依赖项或某些配置时)参数)。

EJB bean是托管对象,您在@EJB注释字段中获得的内容不是实际对象,而是stub(代理)。存根点所指向的实际对象实例最有可能在您获取此存根之前很久就构建,并且很可能来自池。

(*)某种单位测试可能是此规则的例外。