Cleaning up the Embeddable Container
dhunter21 Oct 10, 2005 4:02 PMI'm trying to use the Embeddable container within a unit test framework. If I attempt to follow these steps for each unit test class
Initialize container
Run unit test(s)
Shutdown container
I get a slew of errors. First, if I try to re-initialize a container, I get
[testng] javax.naming.NameAlreadyBoundException [testng] at org.jnp.server.NamingServer.bind(NamingServer.java:130) [testng] at org.jnp.interfaces.NamingContext.bind(NamingContext.java:551) [testng] at org.jnp.interfaces.NamingContext.bind(NamingContext.java:516) [testng] at javax.naming.InitialContext.bind(InitialContext.java:359) [testng] at org.jboss.tm.TransactionManagerInitializer.bindRef(TransactionManagerInitializer.java:413) [testng] at org.jboss.tm.TransactionManagerInitializer.start(TransactionManagerInitializer.java:113) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.jboss.joinpoint.plugins.reflect.ReflectMethodJoinPoint.dispatch(ReflectMethodJoinPoint.java:57) [testng] at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$LifecycleAction.installAction(Kern ...
Ok... that makes sense. However, if I try to call EJB3StandaloneBootstrap.shutdown() I get an error on ever mbean:
[testng] java.lang.IllegalStateException: Not installed: Naming
[testng] at org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:171)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBean(AbstractKernelDeployer.java:3
33)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBeans(AbstractKernelDeployer.java:
312)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeploy(AbstractKernelDeployer.java:121)
[testng] at org.jboss.ejb3.embedded.EJB3StandaloneBootstrap.shutdown(EJB3StandaloneBootstrap.java:173)
[testng] at com.intuit.engine.efp.efe.test.EfeBaseTest.destroy(EfeBaseTest.java:97)
[testng] at com.intuit.engine.efp.efe.mpc.persistence.ExtendedAttributeTest.tearDown(ExtendedAttributeTest.java:3
1)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[testng] at java.lang.reflect.Method.invoke(Method.java:585)
[testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:294)
[testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:282)
[testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:151)
[testng] at org.testng.TestRunner.invokeClassConfigurations(TestRunner.java:669)
[testng] at org.testng.TestRunner.privateRun(TestRunner.java:596)
[testng] at org.testng.TestRunner.run(TestRunner.java:479)
[testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:191)
[testng] at org.testng.SuiteRunner.run(SuiteRunner.java:117)
[testng] at org.testng.TestNG.run(TestNG.java:277)
[testng] at org.testng.TestNG.privateMain(TestNG.java:364)
[testng] at org.testng.TestNG.main(TestNG.java:313)
[testng] WARN 10-10 12:51:21,199 (AbstractKernelDeployer.java:undeployBeans:317) -Ignored error during uninstall of
AbstractKernelControllerContext@b32ed4{ metadata=AbstractBeanMetaData@180f545{name=InitialContextProperties bean=java.u
til.Hashtable properties= constructor=AbstractConstructorMetaData@166aab6{parameters=[java.util.Map]}}name=InitialContex
tProperties target={java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory, java.naming.factory.url.pkgs
=org.jboss.naming:org.jnp.interfaces} state=Installed depends=AbstractDependencyInfo@151ac10{idependOn=[]}}
[testng] java.lang.IllegalStateException: Not installed: InitialContextProperties
[testng] at org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:171)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBean(AbstractKernelDeployer.java:3
33)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBeans(AbstractKernelDeployer.java:
312)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeploy(AbstractKernelDeployer.java:121)
[testng] at org.jboss.ejb3.embedded.EJB3StandaloneBootstrap.shutdown(EJB3StandaloneBootstrap.java:173)
[testng] at com.intuit.engine.efp.efe.test.EfeBaseTest.destroy(EfeBaseTest.java:97)
[testng] at com.intuit.engine.efp.efe.mpc.persistence.ExtendedAttributeTest.tearDown(ExtendedAttributeTest.java:3
1)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[testng] at java.lang.reflect.Method.invoke(Method.java:585)
[testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:294)
[testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:282)
[testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:151)
[testng] at org.testng.TestRunner.invokeClassConfigurations(TestRunner.java:669)
[testng] at org.testng.TestRunner.privateRun(TestRunner.java:596)
[testng] at org.testng.TestRunner.run(TestRunner.java:479)
[testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:191)
[testng] at org.testng.SuiteRunner.run(SuiteRunner.java:117)
[testng] at org.testng.TestNG.run(TestNG.java:277)
[testng] at org.testng.TestNG.privateMain(TestNG.java:364)
[testng] at org.testng.TestNG.main(TestNG.java:313)
[testng] WARN 10-10 12:51:21,230 (AbstractKernelDeployer.java:undeployBeans:317) -Ignored error during uninstall of
AbstractKernelControllerContext@6a3960{ metadata=AbstractBeanMetaData@f77511{name=JavaCompInitializer bean=org.jboss.ej
b3.embedded.JavaCompInitializer properties=[jndiProperties] constructor=null}name=JavaCompInitializer target=org.jboss.e
jb3.embedded.JavaCompInitializer@26dfcc state=Installed depends=AbstractDependencyInfo@2eef15{idependOn=[AbstractDepende
ncyItem@152853d{name=JavaCompInitializer dependsOn=InitialContextProperties whenRequired=Configured dependentState=Insta
lled resolved=true}] unresolved=[AbstractDependencyItem@152853d{name=JavaCompInitializer dependsOn=InitialContextPropert
ies whenRequired=Configured dependentState=Installed resolved=true}]}}
[testng] java.lang.IllegalStateException: Not installed: JavaCompInitializer
[testng] at org.jboss.dependency.plugins.AbstractController.uninstall(AbstractController.java:171)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBean(AbstractKernelDeployer.java:3
33)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeployBeans(AbstractKernelDeployer.java:
312)
[testng] at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.undeploy(AbstractKernelDeployer.java:121)
[testng] at org.jboss.ejb3.embedded.EJB3StandaloneBootstrap.shutdown(EJB3StandaloneBootstrap.java:173)
[testng] at com.intuit.engine.efp.efe.test.EfeBaseTest.destroy(EfeBaseTest.java:97)
[testng] at com.intuit.engine.efp.efe.mpc.persistence.ExtendedAttributeTest.tearDown(ExtendedAttributeTest.java:3
1)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[testng] at java.lang.reflect.Method.invoke(Method.java:585)
[testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:294)
[testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:282)
[testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:151)
[testng] at org.testng.TestRunner.invokeClassConfigurations(TestRunner.java:669)
[testng] at org.testng.TestRunner.privateRun(TestRunner.java:596)
[testng] at org.testng.TestRunner.run(TestRunner.java:479)
[testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:191)
[testng] at org.testng.SuiteRunner.run(SuiteRunner.java:117)
[testng] at org.testng.TestNG.run(TestNG.java:277)
[testng] at org.testng.TestNG.privateMain(TestNG.java:364)
[testng] at org.testng.TestNG.main(TestNG.java:313)I can get around this by creating a static boolean flag indicating whether the container has been initialized, however, I'm not sure that is what was intended. From a pure unit testing stance, it would be better to shutdown and recreate the container so that artifacts from one test do not affect another.
Any comments on the intended behaviour when running suites of tests?
Alpha3 looks great so far...