fwiw, i used almost the exact same pattern, using the SPI to load guice
modules at startup, but i didnt run into this issue because i have multiple
injectors that are only responsible for their part of the app, and the
module interfaces are very targeted so we don't run into the kinds of
problems you're hitting where an overloaded module has all the bindings for
one thing, or the other, but not both.

you might consider finer-grained modules.  we get a lot of mileage out of
Modules.override and installing modules w/in other modules as start time.



On Thu, Sep 19, 2013 at 3:39 PM, Eric Tschetter <eched...@gmail.com> wrote:

> Hello Guicers,
>
> I'm running into a bit of a problem that I was wondering if someone from
> the Guice community might have some great insight into how to deal with it.
>
> I have a project that is an open distributed analytical data store (
> http://www.druid.io) and I've been guicifying it in order to better
> accommodate plugins.
>
> I'm basically using SPI to find instances of a "DruidModule" interface
> that I created in the classpath of extensions, I then add those modules
> into the main Guice injector and I'd added an external module to the
> system.  Or, at least, that's the theory.
>
> This is generally working, however, I have a number of different node
> types that each have different object graph requirements.  Right now, each
> node type creates its own injector with modules that build up only the
> object graph required by that node type.
>
> This is causing a problem for my extensions, because I'm only creating a
> single module in the extension, which can get added to any of the injectors
> on any of the processes.  Specifically, I have a "broker" node and a
> "historical" node.  The extension I'm working with is meaningful in both
> contexts, but only a subset of the classes are actually used on the
> "broker" node, while all of them are relevant to the "historical" node.
>
> The problem is, the one class that is only used on the historical node
> (i.e. it is bound by the module, but never instantiated on the broker
> node), depends on something that the broker node does not have a binding
> for.  Even though the broker node never instantiates the thing that
> requires the missing binding, Guice still fails because, if it did need it,
> it wouldn't be there.
>
> I've been wondering if there's a way to actively turn off the checking
> there and force it to be lazy.  I don't actually leverage Guice except in
> the bootstrap phase of my application, so I don't gain any extra benefit
> from how Guice enforces fail-fast behavior and thus the check right now is
> only serving as an annoyance :).
>
> The only other work-around I can see for this is to basically build one
> big Guice injector with full bindings for use across all node types.  The
> only differentiation between the node types being the set of objects that
> actually get instantiated on startup.  If I were to do that, I would work
> around this, but it would also open the door to having weird things
> accidentally instantiated at weird points, so I'm a little reluctant to do
> it.  If this is the only option, I will switch to this model, just hoping
> there are other options as well.
>
> Does that all make sense?
>
> --Eric
>
> --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to google-guice+unsubscr...@googlegroups.com.
> To post to this group, send email to google-guice@googlegroups.com.
> Visit this group at http://groups.google.com/group/google-guice.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-guice+unsubscr...@googlegroups.com.
To post to this group, send email to google-guice@googlegroups.com.
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to