【问题标题】:NetBeans 7.0 , JUnit and Glassfish Embedded 3.1: Does not workNetBeans 7.0、JUnit 和 Glassfish Embedded 3.1:不起作用
【发布时间】:2011-06-25 20:41:34
【问题描述】:

我正在尝试在 Win7Professional 机器中使用 NB 7.0、JUnit 和嵌入式 Glassfish 服务器对 J2EE Web 应用程序进行 JUnit 测试。

我将其分解为仅使用单个会话 Bean 测试一个简单的 Hello-World Web 应用程序。

我的类路径中有 glasfish-embedded-static-shell.jar,并且还尝试使用 glassfish-embedded-all-3.1,但它也没有用。

下面是我用来测试 bean 的代码:

import javax.ejb.embeddable.EJBContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class SimpleBeanTest {

private static EJBContainer container;

public SimpleBeanTest() {
}

@BeforeClass
public static void setUpClass() throws Exception {
    container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
}

@AfterClass
public static void tearDownClass() throws Exception {
    container.close();
}

@Test
public void testCountToThree() throws Exception {
   System.out.println("countToThree");
   SimpleBean instance = (SimpleBean) container.getContext().lookup("java:global/classes/SimpleBean");
   int expResult = 0;
   int result = instance.countToThree();
   assertEquals(expResult, result);

}
}

结果如下:

19.06.2011 09:31:56 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
19.06.2011 09:31:56 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = META-INF/gfprobe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:javamail:smtp-transport

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = META-INF/mojarra-jsf-api-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jsf:faces-servlet

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = jersey-gf-server-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jersey:server-hidden

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.flashlight.impl.provider.FlashlightProbeProviderFactory processXMLProbeProviders
SCHWERWIEGEND: MNTG0301:Cannot process XML ProbeProvider, xml = jersey-gf-statsprovider-probe-provider.xml
java.lang.IllegalStateException: Provider already mapped glassfish:jersey:server

(StackTrace here)

19.06.2011 09:31:57 org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register
INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry
19.06.2011 09:31:57 org.glassfish.ha.store.spi.BackingStoreFactoryRegistry register
INFO: Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry
19.06.2011 09:31:57 com.sun.enterprise.v3.server.AppServerStartup run
SCHWERWIEGEND: Startdienst konnte nicht gestartet werden: com.sun.enterprise.naming.GlassFishNamingBuilder
19.06.2011 09:31:57 com.sun.enterprise.v3.server.AppServerStartup run
INFO: GlassFish Server Open Source Edition 3.1 (43) Startzeit: Embedded (597ms), Startdienste(929ms), gesamt(1.526ms)
19.06.2011 09:31:57 org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread run
INFO: JMXStartupService: JMXConnector system is disabled, skipping.

更新: 这是任何测试都会抛出的异常:

No EJBContainer provider available
Provider named org.glassfish.ejb.embedded.EJBContainerProviderImpl threw unexpected exception at create EJBContainer: 
java.lang.RuntimeException
java.lang.RuntimeException: java.lang.IllegalStateException: AMX Booter MBean is already registered: amx-support:type=boot-amx
    at org.glassfish.internal.embedded.Server.<init>(Server.java:290)
    at org.glassfish.internal.embedded.Server.<init>(Server.java:66)
    at org.glassfish.internal.embedded.Server$Builder.build(Server.java:176)

(Stack Trace here)

Caused by: java.lang.IllegalStateException: AMX Booter MBean is already registered: amx-support:type=boot-amx

我已经重新安装了两次 NetBeans,但它也不起作用。

【问题讨论】:

    标签: java netbeans jakarta-ee glassfish glassfish-embedded


    【解决方案1】:

    我遇到了同样的问题,我做了以下操作:

    1) 我安装了 Glassfish 3.1.1 并将其链接到我的项目。首先,我使用工具 - 服务器 - 添加服务器添加服务器...然后我右键单击我的 EJB 项目并选择属性 - 运行 - Glassfish 3.1.1
    2) 在我的 EJB pom.xml 中,我使用了这个依赖项(确保 systemPath 变量指向正确的文件):

    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-static-shell</artifactId>
        <version>3.1.1</version>
        <scope>system</scope>
        <systemPath>${glassfish.embedded-static-shell.jar}</systemPath>
    </dependency>
    

    3) 在我的 EJB pom.xml 中,我删除了其他人说我必须添加它的依赖项,如果我收到错误“提供程序已映射...”

    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.1.1</version>
        <scope>test</scope>
    </dependency>
    

    就是这样!现在,我使用 JPA 2 进行的 EJB JUnit 测试就像一个魅力!希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      似乎服务器启动正常(其中一些异常是预期的,但我无法确认是否所有异常)。

      • 您是否使用“运行 > 测试项目”运行测试用例?
      • JUnit GUI 是否弹出?
      • 是否安装了 JUnit?由于许可问题,Netbeans 7.0 现在会询问您是否要下载 JUnit...
      • 您能否运行不需要嵌入式容器的单元测试?

      尝试按照以下步骤操作:http://javadude.wordpress.com/2010/02/22/tutorial-most-simple-test-application-for-embedded-glassfish-netbeans-hudson/(忘记 Hudson 部分)。 IDE 应该负责为您添加依赖项。

      哦,另外一件事,因为您使用的是 Windows,所以尝试以管理员身份运行 Netbeans(右键单击选项)并查看会发生什么不会有什么坏处。

      干杯,

      更新

      也许你遇到了this 错误:

      看看这样启动容器是否适合你:

      @BeforeClass
      public static void setUpClass() throws Exception {
          Map<String, Object> p = new HashMap<String, Object>();       
          p.put(EJBContainer.APP_NAME, "foo");
          container = EJBContainer.createEJBContainer(p);
      }
      

      【讨论】:

      • 嗨 Anthony,我尝试了本教程,结果相同。是的,JUNit 已安装,NB 安装附带,当我尝试运行测试时,GUI 出现。
      • @DGalvis。你好,请问有什么问题,是不是挂了?它甚至显示“countToThree”吗?
      • 我尝试安装 NB 完整版,但没有成功。使用管理权限也不起作用。
      • @Anthony 当我运行测试时,他们抛出了这个异常:“No EJBContainer available Provider named org.glassfish.ejb.embedded.EJBContainerProviderImpl throw unexpected exception at create EJBContainer:...”
      • @DGalvis,上面的代码幸运吗?如果没有,我会下载新版本的 Glassfish,并像以前一样在类路径中包含 glassfish-embedded-static-shell.jar
      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2019-04-09
      • 2014-07-09
      相关资源
      最近更新 更多