NetBeans 7.0 , JUnit and Glassfish Embedded 3.1: Does not work

I am trying to JUnit Test a J2EE Web Application with NB 7.0, JUnit and the embedded Glassfish Server in a Win7Professional machine.

I broke it down to just test a plain simple Hello-World Web App with a single Session Bean.

I have the glasfish-embedded-static-shell.jar in my classpath, and also tried to use the glassfish-embedded-all-3.1 but it also didn't work.

Now here's the code I use to test the 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);

}
}

And here's what comes out of it:

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.

UPDATE: And this is the exception which would be thrown by any test:

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

I have reinstalled NetBeans twice and it doesn't works either.


I had the same issue and I did the following:

1) I installed Glassfish 3.1.1 and linked it to my project. First I added the server with Tools - Servers - Add Server... Then I right-clicked my EJB project and selected Properties - Run - Glassfish 3.1.1
2) In my EJB pom.xml I use this dependency (make sure the systemPath variable points to the correct file):

<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) In my EJB pom.xml I removed the dependency other people said I have to add it if I get the errors "Provider already mapped..."

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

That's it! Now my EJB JUnit tests with JPA 2 work like a charm! Hope this helps!


Seems like the server is starting ok (some of those exceptions are expected, but I can't confirm if all of them are).

  • Are you running the tests cases with "Run > Test Project"?
  • Is the JUnit GUI popping up?
  • Is JUnit installed? Netbeans 7.0 now asks if you want to download JUnit because of licensing Issues...
  • Can you run unit tests that don't need the embedded container?
  • Try to follow those steps: http://javadude.wordpress.com/2010/02/22/tutorial-most-simple-test-application-for-embedded-glassfish-netbeans-hudson/ (forget about the Hudson part). The IDE should take care of including the dependencies for you.

    Oh, another thing, since you are using Windows, it won't hurt to try to run Netbeans as Admin (right click option) and see what happens.

    Cheers,

    Update

    Maybe you are hitting this bug:

    See if starting the container like this works for you:

    @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);
    }
    
    链接地址: http://www.djcxy.com/p/53336.html

    上一篇: 当我使用命令行构建C#/ .NET时,如何设置配置?

    下一篇: NetBeans 7.0,JUnit和Glassfish Embedded 3.1:不起作用