0
我正在使用JUnit测试一个Web应用程序。此应用程序的buisness层是在EJB无状态类中编写的。 因此,我使用JUnit和Glassfish嵌入来进行“容器”测试。 到目前为止,所有工作都很好,EJB使用查找函数注入。 下面是一个简单的测试情况:CDI SessionScoped在容器内JUnit测试中的POJO
public class SupportTest {
private static EJBContainer container;
private static MyEJB myEjb;
@BeforeClass
public static void setUpServices() throws NamingException {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, new File("target/classes"));
container = EJBContainer.createEJBContainer(properties);
myEjb = (MyEJB) container.getContext().lookup("java:global/classes/MyEJB");
}
@Test
public void test() {
myEjb.doSomething("user_login");
}
}
现在我有一个SessionScoped POJO(CDI),该保持的信息,如用户登录等。 这个Pojo是在静态类中注入的。就像这样:
public class MyStaticClass {
public static boolean verifyLogin(String login) {
MySessionPojo mySessionPojo = CDI.current().select(MySessionPojo.class).get();
return mySessionPojo.getLogin().equals(login);
}
}
这个静态类在EJB用于保护楼内设有商务代码,就像这样:
@Stateless
public class MyEJB {
public void doSomething(String login) {
if(MyStaticClass.verifyLogin(login)){
//do something
}
}
}
内部正常的Glassfish的4.1服务器,该POJO的注入在静态类内工作正常。 里面的嵌入式Glassfish的,该POJO注入失败,此消息:
WELD-001303: No active contexts for scope type javax.enterprise.context.SessionScoped
我想这是因为没有HTTP会话绑定到它。 有没有办法以编程方式模拟/创建àSessionContext?
谢谢。