The solution is quite simple. Ask the following questions: - Do you use assisted inject (the new version) in a critical code path to instantiate object hundreds of times a minute? - Do you use assisted inject to create objects every now and then, or as singletons?
If you answered: no, yes, no no, you are fine. If you answered yes, no, then you have a problem. But you should verify with profiling tools before you believe you are actually seeing this issue. Otherwise as jesse says, the simple solution is use the @AssistedInject annotation for assisted inject objects (instead of just @Inject). Dhanji. On Wed, Nov 4, 2009 at 7:45 PM, Karthik Krishnan <[email protected]>wrote: > I should have included my code in my previous post > > My module: > @Override > protected void configure() { > MapBinder<String, DelegateFactory> mapBinder = > MapBinder.newMapBinder(binder(), String.class, > DelegateFactory.class); > // Implementation that is responsible for fetching the three tiered > // client type. > mapBinder.addBinding("CLIENT_TYPE") // Constructor key attribute > .toProvider(FactoryProvider.newFactory( > DelegateFactory.class, > Delegate.class)); > // Implementation that is responsible for fetching the credit > product > // type. > mapBinder.addBinding("CP_TYPE") > .toProvider(FactoryProvider.newFactory( > DelegateFactory.class, > Delegate.class)); > // Implementation that is responsible for fetching the report type. > mapBinder.addBinding("REPORT_TYPE") > .toProvider(FactoryProvider.newFactory( > DelegateFactory.class, > Delegate.class)); > } > > Constructor > > @Inject > public Delegate(@Assisted String key) { > this.key = key; > } > > @Inject > public void setFactory(Map<String, DelegateFactory> factory) { > this.factory = factory; > this.delegate = factory.get("CLIENT_TYPE").create("CLIENT_TYPE"); > } > > Invocation > > Injector injector = Guice.createInjector(new DelegateModule()); > injector.injectMembers(this); > > > > On Wed, Nov 4, 2009 at 12:09 AM, Karthik Krishnan <[email protected] > > wrote: > >> I am not sure how to reproduce the lock contention. I used this code >> sample as a reference http://pastie.org/453944 to build my own map >> binder. Would this work? >> >> >> On Tue, Nov 3, 2009 at 6:59 PM, Dhanji R. Prasanna <[email protected]>wrote: >> >>> I wouldn't worry about this unless you are *actually* seeing the lock >>> contention problem I describe. >>> >>> Furthermore, if you are mainly using assisted inject for long lived >>> objects you will be fine. =) >>> >>> Dhanji. >>> >>> >>> On Wed, Nov 4, 2009 at 1:56 PM, [email protected] <[email protected]>wrote: >>> >>>> >>>> We're working on this. For now, use the old form of assisted inject >>>> with the "@AssistedInject" annotation rather than the "@Inject" >>>> annotation. >>>> >>>> On Nov 3, 1:38 pm, Karthik Krishnan <[email protected]> wrote: >>>> > Hi All, >>>> > >>>> > I am using AssistedInject to inject Strings with variable values into >>>> > an object. I am using MapBinder to map the implementation to the type >>>> > of instance. We are able to get an instance of the class with the >>>> > injected string value. On an off chance, I looked at issue 435 that >>>> > mentions lock contentionhttp:// >>>> code.google.com/p/google-guice/issues/detail?id=435 >>>> > with assisted inject. >>>> > >>>> > We would not want the issue cropping up in our application. Is there a >>>> > work around or an emergency patch we should incorporate in our >>>> > application. >>>> >>>> >>> >>> >>> >> > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
