[jboss-dev-forums] [Design the new POJO MicroContainer] - Re: Context installation causes StackOverflowError
jaikiran
do-not-reply at jboss.com
Sat Mar 21 11:08:30 EDT 2009
"alesj" wrote :
| I don't see how this is different from what we already have
| once our -jboss-beans.xml defined beans reach number 300+.
Let's take out EJB3 from the equation and make it a plain MC example :)
Here's a plain MC version of an application which reproduces this StackOverFlowError:
MC bean:
// N (>=400) instances of this SimplePOJO
| // will be installed into the MC through a deployer (TestDeployer)
| public class SimplePOJO
| {
|
| private Logger logger = Logger.getLogger(SimplePOJO.class);
|
| private Kernel kernel;
|
| private String name;
|
| private OtherPOJO otherBean;
|
| public SimplePOJO()
| {
|
| }
| public SimplePOJO(String name)
| {
| this.name = name;
| }
|
| public void create()
| {
| logger.info("Create of " + this);
| }
|
| // Installs a java.lang.String as a MC bean
| public void start() throws Throwable
| {
| logger.info("Start of " + this);
|
| // let's just build a MC bean for a "String" object and "install" it
| BeanMetaDataBuilder bmdb = BeanMetaDataBuilder.createBuilder("StringDummy" + this, String.class.getName());
|
| // Set access mode
| bmdb.setAccessMode(BeanAccessMode.ALL);
|
| // install
| this.kernel.getController().install(bmdb.getBeanMetaData(), new String("dummy"));
|
| logger.info("Installed the dummy String, from the start() method of " + this);
| }
|
| public Kernel getKernel()
| {
| return kernel;
| }
|
| @Inject(bean="jboss.kernel:service=Kernel")
| public void setKernel(Kernel kernel)
| {
| this.kernel = kernel;
| }
|
| public String toString()
| {
| return this.name;
| }
|
| public OtherPOJO getOtherBean()
| {
| return otherBean;
| }
|
| // let's inject some other MC bean
| // This is a very important @Inject to reproduce this issue
| // Read the comments in the post for more details
| @Inject
| public void setOtherBean(OtherPOJO otherBean)
| {
| this.otherBean = otherBean;
| }
| }
|
One more MC bean:
// Only one instance of this OtherPOJO will be installed
| // into MC through the TestDeployer. We could have installed
| // more instances of this OtherPOJO into MC, but let's not
| // complicate this reproducible example.
| public class OtherPOJO
| {
| private String name;
|
| private static Logger logger = Logger.getLogger(OtherPOJO.class);
|
| private Kernel kernel;
|
| public OtherPOJO()
| {
|
| }
|
| public OtherPOJO(String name)
| {
| this.name = name;
|
| }
|
| // Installs an object of type java.lang.String into MC
| public void start() throws Throwable
| {
| logger.info("Start of otherpojo " + this);
| // let's install an java.lang.String
| BeanMetaDataBuilder bmdb = BeanMetaDataBuilder.createBuilder("OtherDummy" + this, String.class.getName());
|
| // Set access mode
| bmdb.setAccessMode(BeanAccessMode.ALL);
|
| // install the string
| this.kernel.getController().install(bmdb.getBeanMetaData(), new String("otherdummy"));
|
| logger.info("Installed the otherdummy String from the start() method of " + this);
| }
|
| public String toString()
| {
| return this.name;
| }
|
| public Kernel getKernel()
| {
| return kernel;
| }
|
| @Inject(bean="jboss.kernel:service=Kernel")
| public void setKernel(Kernel kernel)
| {
| this.kernel = kernel;
| }
|
| }
|
|
Here's the deployer which deploys (actually attaches to a unit) 400 (or more) instances of the SimplePOJO and one instance of OtherPOJO (as BMD):
public class TestDeployer extends AbstractDeployer
| {
|
| private static Logger logger = Logger.getLogger(TestDeployer.class);
|
| private boolean haveWeAlreadyDoneOurJob = false;
|
| public TestDeployer()
| {
| setStage(DeploymentStages.REAL);
| // this is just for my convenience in my test setup
| setInput(JBossMetaData.class);
| // we output BMD
| setOutput(BeanMetaData.class);
|
| }
|
| public void deploy(DeploymentUnit unit) throws DeploymentException
| {
| // let's do this only once
| if (haveWeAlreadyDoneOurJob)
| {
| logger.info("TestDeployer is NOT going to do any processing");
| return;
| }
| this.haveWeAlreadyDoneOurJob = true;
|
| String name = "Bean";
| int i = 0;
| // create 400 instances of SimplePOJO
| for (i = 0; i < 400 ; i++)
| {
| BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(name + i, SimplePOJO.class.getName());
| builder.setConstructorValue(new SimplePOJO(name + i));
| unit.addAttachment(BeanMetaData.class + ":" + name + i, builder.getBeanMetaData());
| }
| logger.info("Number of beans added to attachment: " + i);
|
| // create one instance of OtherPOJO
| BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("OtherBean", OtherPOJO.class.getName());
| builder.setConstructorValue(new OtherPOJO("otherbean"));
| unit.addAttachment(BeanMetaData.class + ":" + "otherbean", builder.getBeanMetaData());
| }
|
| }
|
|
And here's (only a small portion of a very long stacktrace):
2009-03-21 17:12:41,288 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to PreInstall: name=StringDummyBean13 state=Real
| java.lang.StackOverflowError
| at java.lang.StringBuffer.setLength(StringBuffer.java:153)
| at org.apache.log4j.PatternLayout.format(PatternLayout.java:497)
| at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)
| at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
| at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
| at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
| at org.apache.log4j.Category.callAppenders(Category.java:203)
| at org.apache.log4j.Category.forcedLog(Category.java:388)
| at org.apache.log4j.Category.log(Category.java:853)
| at org.jboss.logging.log4j.Log4jLoggerPlugin.trace(Log4jLoggerPlugin.java:106)
| at org.jboss.logging.Logger.trace(Logger.java:160)
| at org.jboss.kernel.plugins.dependency.AbstractMetaDataVisitor.internalDescribeVisit(AbstractMetaDataVisitor.java:125)
| at org.jboss.kernel.plugins.dependency.AbstractMetaDataVisitor.describeVisit(AbstractMetaDataVisitor.java:87)
| at org.jboss.beans.metadata.plugins.AbstractFeatureMetaData.describeVisit(AbstractFeatureMetaData.java:106)
| at org.jboss.kernel.plugins.dependency.DescribedMetaDataVisitor.run(DescribeMetaDataVisitor.java:53)
| at java.security.AccessController.doPrivileged(Native Method)
| at org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext.infoprocessMetaData(AbstractKernelControllerContext.java:226)
| at org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext.setBeanInfo(AbstractKernelControllerContext.java:157)
| at org.jboss.kernel.plugins.dependency.PreInstallAction.installActionInternal(PreInstallAction.java:91)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:70)
| at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
| at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
| at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
| at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
| at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:106)
| at org.jboss.ejb3.nointerface.deployers.SimplePOJO.start(SimplePOJO.java:67)
| at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)
| at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150)
| at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66)
| at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:241)
| at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47)
| ...
|
|
Bit of explanation of this example:
1) 400 instances of this SimplePOJO are create in the TestDeployer.
2) One instance of OtherPOJO is created in TestDeployer.
3) All 400 instances of SimplePOJO expect the single instance of OtherPOJO to be injected in them. Simple requirement :)
4) Each instance of SimplePOJO in its start "installs" (through the kernel.getController().install API) a instance of java.lang.String.
Note : Intentionally chose a String to show that the object being installed has no dependencies on anything and it was *expected* that install of the String would not trigger a state change on other MC beans. However, MC does this differently and triggers a recursive call leading to StackOverFlowError.
5) Similarly the OtherPOJO in its start "installs" (through the kernel.getController().install API) a instance of java.lang.String
Two *workarounds* :
1) Do not install the java.lang.String in the start method (this call is what is triggering this recursion) of these POJOs.
OR
2) Removing the inject/dependency between SimplePOJO and OtherPOJO does *not* trigger this StackOverFlowError:
public class SimplePOJO
| {
| ...
|
| // @Inject - Commenting this out removes the
| // dependency between SimplePOJO and OtherPOJO
| // and MC treats this differently and is able
| // to process the deployment without any issues
| public void setOtherBean(OtherPOJO otherBean)
| {
| this.otherBean = otherBean;
| }
| }
|
|
P.S: The TestDeployer expects JBossMetaData as input. This is just for my convenience so that i can test it on my setup. If someone wants to try this deployer, then it needs to be changed appropriately or run on a setup where some other deployer generates JBossMetaData as output.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4220037#4220037
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4220037
More information about the jboss-dev-forums
mailing list