Java Glassfish嵌入v4.1.1和lambda

Java Glassfish嵌入v4.1.1和lambda,java,lambda,glassfish,Java,Lambda,Glassfish,我有一个带有嵌入式glassfish服务器的junit测试(集成测试)。如果在无状态ejb中使用lambda,则测试失败。没有lambda表达式,我的测试工作正常 嵌入式glassfish服务器是否有任何修复或快照版本?我没有找到有关glassfish embedded all的快照版本的任何信息:( 使用的依赖项: <dependency> <groupId>org.glassfish.main.extras</groupId> <ar

我有一个带有嵌入式glassfish服务器的junit测试(集成测试)。如果在无状态ejb中使用lambda,则测试失败。没有lambda表达式,我的测试工作正常

嵌入式glassfish服务器是否有任何修复或快照版本?我没有找到有关glassfish embedded all的快照版本的任何信息:(

使用的依赖项:

<dependency>
    <groupId>org.glassfish.main.extras</groupId>
    <artifactId>glassfish-embedded-all</artifactId>
    <version>4.1.1</version>
    <scope>test</scope>
</dependency>
EDIT2: 我可以在maven日志文件中看到NCLS-DEPLOYMENT-00009警告消息。仅找到一个相关论坛主题:。建议删除lambda表达式

马文日志

Feb 06, 2016 8:49:37 AM org.glassfish.deployment.common.GenericAnnotationDetector scanArchive
WARNING: NCLS-DEPLOYMENT-00009
Feb 06, 2016 8:49:37 AM org.glassfish.ejb.embedded.EJBContainerProviderImpl createEJBContainer
SEVERE: EJB6005:No EJB modules found
javax.naming.NamingException: Lookup failed for 'java:global/classes/ExampleBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: classes]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at a.b.ExampleBeanTest.init(ExampleBeanTest.java:39)
...
Caused by: javax.naming.NameNotFoundException: classes
...
是虫子吗

是否有任何工作的嵌入式EE容器可以使用Java8+EJB/Bean+Lambda执行JUnit/集成测试


我在哪里可以报告glassfish嵌入的所有模块相关错误?我只找到了glassfish服务器相关的jira。

lambda错误几天前已修复:

lambda bug几天前已修复:

为什么单元测试失败?什么错误?org.glassfish.ejb.embedded.EJBContainerProviderImpl Createjbcontainer严重:EJB6005:找不到ejb模块javax.naming.NamingException:在SerialContext[myEnv]中查找“java:global/classes/ExampleBean”失败={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming}[根异常为javax.naming.NameNotFoundException:classes]…原因:javax.naming.NameNotFoundException:classesI创建了一个简单的测试应用程序:如果您在GlassFish服务器上部署war文件,那么它与lambda一起工作正常。但是,使用嵌入式服务器+lambda表达式测试失败。我也遇到了同样的问题,您找到解决方案了吗?为什么单元测试失败?什么错误?org.glassfish.ejb.embedded.EJBContainerProviderImpl CreateJBContainer严重:EJB6005:未找到ejb模块javax.naming.NamingException:在SerialContext[myEnv]中查找“java:global/classes/ExampleBean”失败={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs=com.sun.enterprise.naming}[根异常为javax.naming.NameNotFoundException:classes]…原因:javax.naming.NameNotFoundException:classesI创建了一个简单的测试应用程序:如果您在GlassFish服务器上部署war文件,那么它可以与lambda配合使用。但是,对于嵌入式服务器+lambda表达式,测试失败。我遇到了同样的问题,您找到解决方案了吗?它应该与payara embedded all配合使用吗-4.1.153?可从Payara服务器4.1.1.162获得漏洞修复。它是否应与Payara-embedded-all-4.1.153一起使用?可从Payara服务器4.1.1.162获得漏洞修复
public class ExampleBeanTest {
    @EJB
    private static ExampleBean examplebean;
    private static Context context;
    private static EJBContainer container;

    @BeforeClass
    public static void init() {
        Map<String, Object> props = new HashMap<String,Object>();
        props.put(EJBContainer.MODULES, new File[]{new File("target/test-classes"), new File("target/classes")});

        try {
            container = EJBContainer.createEJBContainer(props);
            context = container.getContext();
            examplebean = (ExampleBean) context.lookup("java:global/classes/ExampleBean");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @AfterClass
    public static void tearDown() throws Exception {
        if (container != null) {
            container.close();
        }
    }

    @Test
    public void testGet() throws NamingException {
        assertNotNull(examplebean);
        Person p = examplebean.get(1);
        assertNotNull(p);
        assertEquals("text", p.getName());
    }
}
public Person get(Long id) {
    Optional<Person> person = Optional.ofNullable(em.find(Person.class, id));
    List<Person> persons = new ArrayList<>();
    persons.add(person.get());

    long l = persons.stream().count();
    System.out.println("length: " + l); // <- ok, result: 1

    for (Person p : persons) {  // <- ok, one result: "text"
        String name = p.getName();
        System.out.println("name: " + name);
    }

    // if i keep the following line in my code i get a lookup failed exception
    // if i comment these lines my code works fine
    persons.forEach(pp -> {
        System.out.println(pp.getName());
    });

return person.get();
}
Feb 05, 2016 10:36:17 PM org.glassfish.ejb.embedded.EJBContainerProviderImpl createEJBContainer
SEVERE: EJB6005:No EJB modules found
javax.naming.NamingException: Lookup failed for 'java:global/classes/ExampleBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: classes]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at a.b.ExampleBeanTest.init(ExampleBeanTest.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
Caused by: javax.naming.NameNotFoundException: classes
    at com.sun.enterprise.naming.impl.TransientContext.resolveContext(TransientContext.java:299)
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:207)
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:208)
    at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66)
    at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:114)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:478)
    ... 18 more
Feb 06, 2016 8:49:37 AM org.glassfish.deployment.common.GenericAnnotationDetector scanArchive
WARNING: NCLS-DEPLOYMENT-00009
Feb 06, 2016 8:49:37 AM org.glassfish.ejb.embedded.EJBContainerProviderImpl createEJBContainer
SEVERE: EJB6005:No EJB modules found
javax.naming.NamingException: Lookup failed for 'java:global/classes/ExampleBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: classes]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at a.b.ExampleBeanTest.init(ExampleBeanTest.java:39)
...
Caused by: javax.naming.NameNotFoundException: classes
...