嵌入式GlassFish容器单元测试会话bean在NetBeans指向错误的域



我已经为我创建的几个会话bean编写了单元测试。但是,当我尝试运行它们时,NetBeans给了我以下错误:

没有可用的EJBContainer提供程序。org.glassfish.ejb.embedded.EJBContainerProviderImpl从createEJBContainer调用返回null。

我高度怀疑这是问题的根本原因:

严重:EJB6004:指定的应用服务器安装位置[C:DevelopmentGlassFish3.1 GlassFish domainsdomain1]不存在。

这是正确的。Domain1不存在。我自己创建了一个"开发"域,并删除了domain1,但似乎有一个挥之不去的引用,我不知道在哪里修改它。嵌入式容器所引用的非嵌入式容器也在NetBeans中注册,并正确地连接到开发域。项目的常规部署没有问题。

任何帮助,非常感谢!

我相信ScatteredWar已经过时了。经过一番搜索,我找到了一篇非常有用的文章《GlassFish开源版3.1的可嵌入性快速介绍》,其中给出了以下代码片段:

如果您的存档不是预先构建的,而是它的组件分散在多个目录中,那么您可能对使用分散的存档api感兴趣:

进口org.glassfish.embeddable。;进口org.glassfish.embeddable.archive。,

Deployer deployer = glassfish.getDeployer();
// Create a scattered web application.
ScatteredArchive archive = new ScatteredArchive("testapp", ScatteredArchive.Type.WAR);
// target/classes directory contains my complied servlets
archive.addClassPath(new File("target", "classes"));
// resources/sun-web.xml is my WEB-INF/sun-web.xml
archive.addMetadata(new File("resources", "sun-web.xml"));
// resources/MyLogFactory is my META-INF/services/org.apache.commons.logging.LogFactory
archive.addMetadata(new File("resources", "MyLogFactory"), "META-INF/services/org.apache.commons.logging.LogFactory");
deployer.deploy(archive.toURI())

其他文档:Oracle GlassFish Server 3.1嵌入式服务器指南和更新的API。

Adam Bien和Arun Gupta谈论嵌入GlassFish进行单元测试的方法。

主要部分是:

        GlassFish glassfish = new GlassFish(port);
        ScatteredWar war = new ScatteredWar(NAME,
            new File("src/main/resources"),
            new File("src/main/resources/WEB-INF/web.xml"),
            Collections.singleton(new File("build/classes").toURI().toURL()));
        glassfish.deploy(war);

另一种方法是使用OpenEJB进行单元测试,因为这将确保您遵守标准。Adam有一个关于设置的条目

最新更新