Hi All,
I have tried debugging this for a few hours, and for the life of me I can't
figure out what's going wrong. I know how to workaround it, but I don't
understand why its happening, which has me scared that it may happen in
other places.
The scenario is: We create a parent injector for the core and a child
injector for the UI. The child injector has an odd set of injectable
objects that have the following dependencies: A requires B requires C
requires D requires Provider<A>. All of them are singletons. D does not
call Provider<A>.get() in the constructor. If I change the child injector's
module to have an explicit bind of A, B, C or D then the problem goes away.
I don't understand why that's necessary though -- D should be visible to
child injectors even it was a jit-binding added to the parent (through use
in a child). Neither A, B or C are required by anything else. D is
required by one other class (E), but if I explicitly bind E the problem
still exists.
I'm very willing to debug more... but I could use some guidance on where to
look. I've tried reproducing the problem in a smaller testcase that plays
this exact scenario out, but it won't reproduce (even though this happens
100% of the time on our code).
This is the particular exception:
com.google.inject.CreationException: Guice creation errors:
1) Error in custom provider, java.lang.IllegalStateException: Constructor
not ready
while locating org.limewire.ui.swing.friends.chat.ChatFramePanel
for parameter 0 at
org.limewire.ui.swing.friends.chat.ChatModel.<init>(ChatModel.java:45)
while locating org.limewire.ui.swing.friends.chat.ChatModel
for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatFriendListPane.<init>(ChatFriendListPane.java:122)
while locating org.limewire.ui.swing.friends.chat.ChatFriendListPane
Caused by: java.lang.IllegalStateException: Constructor not ready
at
com.google.inject.internal.Preconditions.checkState(Preconditions.java:142)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:123)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:201)
at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:197)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:801)
at
com.google.inject.internal.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:195)
at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:177)
at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
2) Error in custom provider, java.lang.IllegalStateException: Constructor
not ready
while locating org.limewire.ui.swing.friends.chat.ChatFramePanel
for parameter 0 at
org.limewire.ui.swing.friends.chat.ChatModel.<init>(ChatModel.java:45)
while locating org.limewire.ui.swing.friends.chat.ChatModel
for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatFriendListPane.<init>(ChatFriendListPane.java:122)
while locating org.limewire.ui.swing.friends.chat.ChatFriendListPane
for parameter 1 at
org.limewire.ui.swing.friends.chat.ChatPanel.<init>(ChatPanel.java:51)
while locating org.limewire.ui.swing.friends.chat.ChatPanel
Caused by: java.lang.IllegalStateException: Constructor not ready
at
com.google.inject.internal.Preconditions.checkState(Preconditions.java:142)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:123)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:79)
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:127)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:43)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:808)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.Scopes$1$1.get(Scopes.java:51)
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:44)
at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:201)
at
com.google.inject.internal.InjectorBuilder$1.call(InjectorBuilder.java:197)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:801)
at
com.google.inject.internal.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:195)
at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:177)
at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
2 errors
at
com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:358)
at
com.google.inject.internal.InjectorBuilder.injectDynamically(InjectorBuilder.java:180)
at
com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:114)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:137)
at
com.google.inject.internal.InjectorImpl.createChildInjector(InjectorImpl.java:144)
at
org.limewire.ui.swing.mainframe.AppFrame.createUiInjector(AppFrame.java:312)
at org.limewire.ui.swing.mainframe.AppFrame.startup(AppFrame.java:156)
at org.jdesktop.application.Application$1.run(Application.java:171)
... 8 more
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---