Problem with Errai IOC
marius.gerwinn Aug 20, 2013 7:10 AMOverall errai IOC is working pretty well for us.
But sometimes we got stuck figuring out what the error message is about:
[ERROR] org.jboss.errai.codegen.exception.UndefinedMethodException: undefined method: getSingletonInstanceOrNew(org.jboss.errai.ioc.client.container.async.AsyncInjectionContext, java.lang.Object, org.jboss.errai.ioc.client.container.async.CreationalCallback, java.lang.Class, [Ljava.lang.annotation.Annotation;); in class: org.jboss.errai.ioc.client.container.async.AsyncCreationalContext [ERROR] at org.jboss.errai.codegen.builder.callstack.MethodCall.handleCall(MethodCall.java:73) [ERROR] at org.jboss.errai.codegen.builder.callstack.AbstractCallElement.nextOrReturn(AbstractCallElement.java:46) [ERROR] at org.jboss.errai.codegen.builder.callstack.LoadVariable.handleCall(LoadVariable.java:122) [ERROR] at org.jboss.errai.codegen.builder.impl.AbstractStatementBuilder.generate(AbstractStatementBuilder.java:61) [ERROR] at org.jboss.errai.codegen.BlockStatement.generate(BlockStatement.java:90) [ERROR] at org.jboss.errai.codegen.builder.impl.AnonymousClassStructureBuilderImpl$2$1.doGenerate(AnonymousClassStructureBuilderImpl.java:111) [ERROR] at org.jboss.errai.codegen.builder.impl.AnonymousClassStructureBuilderImpl.doGenerate(AnonymousClassStructureBuilderImpl.java:186) [ERROR] at org.jboss.errai.codegen.builder.impl.AnonymousClassStructureBuilderImpl.access$200(AnonymousClassStructureBuilderImpl.java:43) [ERROR] at org.jboss.errai.codegen.builder.impl.AnonymousClassStructureBuilderImpl$3.generate(AnonymousClassStructureBuilderImpl.java:152) [ERROR] at org.jboss.errai.codegen.builder.impl.ObjectBuilder$2.doDeferred(ObjectBuilder.java:173) [ERROR] at org.jboss.errai.codegen.builder.callstack.DeferredCallElement.handleCall(DeferredCallElement.java:42) [ERROR] at org.jboss.errai.codegen.builder.impl.AbstractStatementBuilder.generate(AbstractStatementBuilder.java:61) [ERROR] at org.jboss.errai.codegen.builder.impl.ObjectBuilder.generate(ObjectBuilder.java:181) [ERROR] at org.jboss.errai.codegen.builder.impl.FieldBuilder$1.generate(FieldBuilder.java:123) [ERROR] at org.jboss.errai.codegen.meta.impl.build.BuildMetaField.toJavaString(BuildMetaField.java:219) [ERROR] at org.jboss.errai.codegen.meta.impl.build.BuildMetaClass.membersToString(BuildMetaClass.java:721) [ERROR] at org.jboss.errai.codegen.meta.impl.build.BuildMetaClass.toJavaString(BuildMetaClass.java:662) [ERROR] at org.jboss.errai.codegen.meta.impl.build.BuildMetaClass.toJavaString(BuildMetaClass.java:562) [ERROR] at org.jboss.errai.codegen.builder.impl.ClassBuilder.toJavaString(ClassBuilder.java:495) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCBootstrapGenerator.generateBootstrappingClassSource(IOCBootstrapGenerator.java:341) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCBootstrapGenerator.generate(IOCBootstrapGenerator.java:144) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCGenerator.generate(IOCGenerator.java:68) [ERROR] at org.jboss.errai.config.rebind.AbstractAsyncGenerator$1.call(AbstractAsyncGenerator.java:42) [ERROR] at org.jboss.errai.config.rebind.AbstractAsyncGenerator$1.call(AbstractAsyncGenerator.java:39) [ERROR] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:166) [ERROR] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [ERROR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [ERROR] at java.lang.Thread.run(Thread.java:722) [ERROR] Caused by: java.lang.RuntimeException: Problem was caused by this call [ERROR] at org.jboss.errai.codegen.builder.callstack.AbstractCallElement.<init>(AbstractCallElement.java:33) [ERROR] at org.jboss.errai.codegen.builder.callstack.MethodCall.<init>(MethodCall.java:46) [ERROR] at org.jboss.errai.codegen.builder.impl.ContextualStatementBuilderImpl.invoke(ContextualStatementBuilderImpl.java:60) [ERROR] Caused by: java.lang.RuntimeException: External call to API [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.async.AsyncProviderInjector.getBeanInstance(AsyncProviderInjector.java:78) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.basic.QualifiedTypeInjectorDelegate.getBeanInstance(QualifiedTypeInjectorDelegate.java:98) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.AsyncInjectUtil.getInjectorOrProxy(AsyncInjectUtil.java:344) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.AsyncInjectUtil.getInjectorOrProxy(AsyncInjectUtil.java:315) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.api.AsyncInjectionTask.doTask(AsyncInjectionTask.java:164) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.AsyncInjectUtil.handleAsyncInjectionTasks(AsyncInjectUtil.java:203) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.AsyncInjectUtil.access$000(AsyncInjectUtil.java:62) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.AsyncInjectUtil$2.generateConstructor(AsyncInjectUtil.java:174) [ERROR] at org.jboss.errai.ioc.rebind.ioc.injector.async.AsyncTypeInjector.renderProvider(AsyncTypeInjector.java:158) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCConfigProcessor$3.handle(IOCConfigProcessor.java:411) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCConfigProcessor$7.process(IOCConfigProcessor.java:650) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCConfigProcessor.process(IOCConfigProcessor.java:596) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCBootstrapGenerator.generateBootstrappingClassSource(IOCBootstrapGenerator.java:297) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCBootstrapGenerator.generate(IOCBootstrapGenerator.java:144) [ERROR] at org.jboss.errai.ioc.rebind.ioc.bootstrapper.IOCGenerator.generate(IOCGenerator.java:68) [ERROR] at org.jboss.errai.config.rebind.AbstractAsyncGenerator$1.call(AbstractAsyncGenerator.java:42) [ERROR] at org.jboss.errai.config.rebind.AbstractAsyncGenerator$1.call(AbstractAsyncGenerator.java:39) [ERROR] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:166) [ERROR] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [ERROR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [ERROR] at java.lang.Thread.run(Thread.java:722)
.....
INFO] [ERROR] Errors in PATH_NAME\.generated\org\jboss\errai\ioc\client\BootstrapperImpl.java' [INFO] [ERROR] Line 1236: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1236: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1429: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1429: Syntax error on token "@", invalid AssignmentOperator [INFO] [ERROR] Line 1622: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1622: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1815: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 1815: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 3477: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 3477: Syntax error on token "@", . expected [INFO] [ERROR] Line 4125: Syntax error on tokens, delete these tokens [INFO] [ERROR] Line 4125: Syntax error on tokens, delete these tokens
We got a multi project setup with a lot of Producers, IOCProviders and even Singletons.
Most of the time we can solve the errors by refactoring the creation of instances by using a different "injection approach". e.g. Producers instead of @Singleton.
Currently this can costs us hours of "random" refactoring...
Is there any better way to find out what causes the actual problem?