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).
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With