You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by Stanton Sievers <ss...@us.ibm.com> on 2011/10/31 13:11:49 UTC
Injecting global config contributors for the default config process
Hi everyone,
I've recently been looking at the ConfigContributor and ConfigProcessor
code and the workflow for getting configuration code the JavaScript side
of things. In DefaultConfigProcessor there is a setGlobalContributors
method that is injectable and takes a List<ConfigContributor> as a
parameter. How is this injectable via Guice? I thought it could be done
with Multibinder but that only seems to allow Set contributions. What is
the intended way to contribute a List<ConfigContributor> (or any List for
that matter) with Guice?
I found this issue, however, the solution seems to be Multibinder. :)
http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
If there's no good way to do this, I propose changing
setGlobalContributors to take a Set<ConfigContributor> so that Multibinder
can be used. I don't think order or duplicate entries really matter for
this use case, so I don't see why a Set wouldn't work....
Thanks,
-Stanton
Re: Injecting global config contributors for the default config process
Posted by Stanton Sievers <ss...@us.ibm.com>.
Hi Henry,
I don't think I have a particular scenario for global contributors. I was
simply playing around with the code to further my understanding. As part
of that I ran into this problem.
Thanks,
-Stanton
From: Henry Saputra <he...@gmail.com>
To: dev@shindig.apache.org,
Date: 11/02/2011 14:17
Subject: Re: Injecting global config contributors for the default
config process
Hi Stanton,
I dont think the order of the contributors is necessary here so change
it to Set should be fine. What scenario you have in mind to do this?
- Henry
On Wed, Nov 2, 2011 at 4:09 AM, Stanton Sievers <ss...@us.ibm.com>
wrote:
> Thanks for finding that thread. That is the exact problem I'm running
> into. As the thread suggests and as I've confirmed with some simple
> testing, annotations solve the problem.
>
> -Stanton
>
>
>
> From: "Ciancetta, Jesse E." <jc...@mitre.org>
> To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
> Date: 11/02/2011 01:04
> Subject: RE: Injecting global config contributors for the default
> config process
>
>
>
>>-----Original Message-----
>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>Sent: Monday, October 31, 2011 2:26 PM
>>To: dev@shindig.apache.org
>>Subject: RE: Injecting global config contributors for the default config
> process
>>
>>I just noticed one caveat with using the Multibinder. I'm doing this:
>>
>> Multibinder<ConfigContributor> configBinder =
> Multibinder.newSetBinder
>>(binder(), ConfigContributor.class);
>> configBinder.addBinding().to(GlobalConfigContributor.class);
>>
>>Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
>>GlobalConfigContributor class I've bound here as well as all of the
> values
>>of the MapBinder for String->ConfigContributor that is bound in the
>>DefaultConfigContributorModule. I have to add an Annotation when I do
>>Multibinder.newSetBinder to keep that from happening. This doesn't
> happen
>>when I remove my Multibinder and only have the MapBinder... odd. It's
>>like the MapBinder values are getting added to the Multibinder config
>>automatically.
>
> It sounds like this might be a bug in Guice -- I found this thread on
the
> Guice discussion board which sounds similar to what you're describing:
>
>
http://groups.google.com/group/google-guice/browse_thread/thread/934e30b7ed0da98f
>
>
>>Maybe that's why the original code is a List instead of a Set that uses
>>Multibinder.
>>
>>-Stanton
>>
>>
>>
>>From: "Ciancetta, Jesse E." <jc...@mitre.org>
>>To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
>>Date: 10/31/2011 12:30
>>Subject: RE: Injecting global config contributors for the default
>>config process
>>
>>
>>
>>>-----Original Message-----
>>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>>Sent: Monday, October 31, 2011 8:12 AM
>>>To: dev@shindig.apache.org
>>>Subject: Injecting global config contributors for the default config
>>process
>>>
>>>Hi everyone,
>>>
>>>I've recently been looking at the ConfigContributor and ConfigProcessor
>>>code and the workflow for getting configuration code the JavaScript
side
>>>of things. In DefaultConfigProcessor there is a setGlobalContributors
>>>method that is injectable and takes a List<ConfigContributor> as a
>>>parameter. How is this injectable via Guice? I thought it could be
> done
>>>with Multibinder but that only seems to allow Set contributions. What
> is
>>>the intended way to contribute a List<ConfigContributor> (or any List
> for
>>>that matter) with Guice?
>>
>>It looks like you can use a TypeLiteral to do this:
>>
>>http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
>>
>>And if you search the Shindig codebase for usages of TypeLiteral you'll
>>find a few examples of where it is indeed being used to setup List's for
>>Guice injection.
>>
>>However this doesn't seem as flexible as using a Multibinder with a Set
>>though since with Multibinder it seems you can append to the Set across
>>any number of different Guice modules, and with the TypeLiteral approach
> I
>>don't think that's possible.
>>
>>I'm far from a Guice expert though so if someone has a better solution
>>please chime in.
>>
>>>I found this issue, however, the solution seems to be Multibinder. :)
>>>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>>>
>>>If there's no good way to do this, I propose changing
>>>setGlobalContributors to take a Set<ConfigContributor> so that
>>Multibinder
>>>can be used. I don't think order or duplicate entries really matter
for
>>>this use case, so I don't see why a Set wouldn't work....
>>
>>Even though there does seem to be a workaround available I don't see any
>>reason why this shouldn't be a Set -- and by making it a Set we can use
>>Multibinder and gain the additional flexibility that buys us in terms of
>>being able to add to the bindings across multiple Guice modules.
>>
>>>Thanks,
>>>-Stanton
>>
>>
>>
>
>
>
>
>
Re: Injecting global config contributors for the default config process
Posted by Henry Saputra <he...@gmail.com>.
Hi Stanton,
I dont think the order of the contributors is necessary here so change
it to Set should be fine. What scenario you have in mind to do this?
- Henry
On Wed, Nov 2, 2011 at 4:09 AM, Stanton Sievers <ss...@us.ibm.com> wrote:
> Thanks for finding that thread. That is the exact problem I'm running
> into. As the thread suggests and as I've confirmed with some simple
> testing, annotations solve the problem.
>
> -Stanton
>
>
>
> From: "Ciancetta, Jesse E." <jc...@mitre.org>
> To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
> Date: 11/02/2011 01:04
> Subject: RE: Injecting global config contributors for the default
> config process
>
>
>
>>-----Original Message-----
>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>Sent: Monday, October 31, 2011 2:26 PM
>>To: dev@shindig.apache.org
>>Subject: RE: Injecting global config contributors for the default config
> process
>>
>>I just noticed one caveat with using the Multibinder. I'm doing this:
>>
>> Multibinder<ConfigContributor> configBinder =
> Multibinder.newSetBinder
>>(binder(), ConfigContributor.class);
>> configBinder.addBinding().to(GlobalConfigContributor.class);
>>
>>Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
>>GlobalConfigContributor class I've bound here as well as all of the
> values
>>of the MapBinder for String->ConfigContributor that is bound in the
>>DefaultConfigContributorModule. I have to add an Annotation when I do
>>Multibinder.newSetBinder to keep that from happening. This doesn't
> happen
>>when I remove my Multibinder and only have the MapBinder... odd. It's
>>like the MapBinder values are getting added to the Multibinder config
>>automatically.
>
> It sounds like this might be a bug in Guice -- I found this thread on the
> Guice discussion board which sounds similar to what you're describing:
>
> http://groups.google.com/group/google-guice/browse_thread/thread/934e30b7ed0da98f
>
>
>>Maybe that's why the original code is a List instead of a Set that uses
>>Multibinder.
>>
>>-Stanton
>>
>>
>>
>>From: "Ciancetta, Jesse E." <jc...@mitre.org>
>>To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
>>Date: 10/31/2011 12:30
>>Subject: RE: Injecting global config contributors for the default
>>config process
>>
>>
>>
>>>-----Original Message-----
>>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>>Sent: Monday, October 31, 2011 8:12 AM
>>>To: dev@shindig.apache.org
>>>Subject: Injecting global config contributors for the default config
>>process
>>>
>>>Hi everyone,
>>>
>>>I've recently been looking at the ConfigContributor and ConfigProcessor
>>>code and the workflow for getting configuration code the JavaScript side
>>>of things. In DefaultConfigProcessor there is a setGlobalContributors
>>>method that is injectable and takes a List<ConfigContributor> as a
>>>parameter. How is this injectable via Guice? I thought it could be
> done
>>>with Multibinder but that only seems to allow Set contributions. What
> is
>>>the intended way to contribute a List<ConfigContributor> (or any List
> for
>>>that matter) with Guice?
>>
>>It looks like you can use a TypeLiteral to do this:
>>
>>http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
>>
>>And if you search the Shindig codebase for usages of TypeLiteral you'll
>>find a few examples of where it is indeed being used to setup List's for
>>Guice injection.
>>
>>However this doesn't seem as flexible as using a Multibinder with a Set
>>though since with Multibinder it seems you can append to the Set across
>>any number of different Guice modules, and with the TypeLiteral approach
> I
>>don't think that's possible.
>>
>>I'm far from a Guice expert though so if someone has a better solution
>>please chime in.
>>
>>>I found this issue, however, the solution seems to be Multibinder. :)
>>>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>>>
>>>If there's no good way to do this, I propose changing
>>>setGlobalContributors to take a Set<ConfigContributor> so that
>>Multibinder
>>>can be used. I don't think order or duplicate entries really matter for
>>>this use case, so I don't see why a Set wouldn't work....
>>
>>Even though there does seem to be a workaround available I don't see any
>>reason why this shouldn't be a Set -- and by making it a Set we can use
>>Multibinder and gain the additional flexibility that buys us in terms of
>>being able to add to the bindings across multiple Guice modules.
>>
>>>Thanks,
>>>-Stanton
>>
>>
>>
>
>
>
>
>
RE: Injecting global config contributors for the default config process
Posted by Stanton Sievers <ss...@us.ibm.com>.
Thanks for finding that thread. That is the exact problem I'm running
into. As the thread suggests and as I've confirmed with some simple
testing, annotations solve the problem.
-Stanton
From: "Ciancetta, Jesse E." <jc...@mitre.org>
To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
Date: 11/02/2011 01:04
Subject: RE: Injecting global config contributors for the default
config process
>-----Original Message-----
>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>Sent: Monday, October 31, 2011 2:26 PM
>To: dev@shindig.apache.org
>Subject: RE: Injecting global config contributors for the default config
process
>
>I just noticed one caveat with using the Multibinder. I'm doing this:
>
> Multibinder<ConfigContributor> configBinder =
Multibinder.newSetBinder
>(binder(), ConfigContributor.class);
> configBinder.addBinding().to(GlobalConfigContributor.class);
>
>Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
>GlobalConfigContributor class I've bound here as well as all of the
values
>of the MapBinder for String->ConfigContributor that is bound in the
>DefaultConfigContributorModule. I have to add an Annotation when I do
>Multibinder.newSetBinder to keep that from happening. This doesn't
happen
>when I remove my Multibinder and only have the MapBinder... odd. It's
>like the MapBinder values are getting added to the Multibinder config
>automatically.
It sounds like this might be a bug in Guice -- I found this thread on the
Guice discussion board which sounds similar to what you're describing:
http://groups.google.com/group/google-guice/browse_thread/thread/934e30b7ed0da98f
>Maybe that's why the original code is a List instead of a Set that uses
>Multibinder.
>
>-Stanton
>
>
>
>From: "Ciancetta, Jesse E." <jc...@mitre.org>
>To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
>Date: 10/31/2011 12:30
>Subject: RE: Injecting global config contributors for the default
>config process
>
>
>
>>-----Original Message-----
>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>Sent: Monday, October 31, 2011 8:12 AM
>>To: dev@shindig.apache.org
>>Subject: Injecting global config contributors for the default config
>process
>>
>>Hi everyone,
>>
>>I've recently been looking at the ConfigContributor and ConfigProcessor
>>code and the workflow for getting configuration code the JavaScript side
>>of things. In DefaultConfigProcessor there is a setGlobalContributors
>>method that is injectable and takes a List<ConfigContributor> as a
>>parameter. How is this injectable via Guice? I thought it could be
done
>>with Multibinder but that only seems to allow Set contributions. What
is
>>the intended way to contribute a List<ConfigContributor> (or any List
for
>>that matter) with Guice?
>
>It looks like you can use a TypeLiteral to do this:
>
>http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
>
>And if you search the Shindig codebase for usages of TypeLiteral you'll
>find a few examples of where it is indeed being used to setup List's for
>Guice injection.
>
>However this doesn't seem as flexible as using a Multibinder with a Set
>though since with Multibinder it seems you can append to the Set across
>any number of different Guice modules, and with the TypeLiteral approach
I
>don't think that's possible.
>
>I'm far from a Guice expert though so if someone has a better solution
>please chime in.
>
>>I found this issue, however, the solution seems to be Multibinder. :)
>>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>>
>>If there's no good way to do this, I propose changing
>>setGlobalContributors to take a Set<ConfigContributor> so that
>Multibinder
>>can be used. I don't think order or duplicate entries really matter for
>>this use case, so I don't see why a Set wouldn't work....
>
>Even though there does seem to be a workaround available I don't see any
>reason why this shouldn't be a Set -- and by making it a Set we can use
>Multibinder and gain the additional flexibility that buys us in terms of
>being able to add to the bindings across multiple Guice modules.
>
>>Thanks,
>>-Stanton
>
>
>
RE: Injecting global config contributors for the default config
process
Posted by "Ciancetta, Jesse E." <jc...@mitre.org>.
>-----Original Message-----
>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>Sent: Monday, October 31, 2011 2:26 PM
>To: dev@shindig.apache.org
>Subject: RE: Injecting global config contributors for the default config process
>
>I just noticed one caveat with using the Multibinder. I'm doing this:
>
> Multibinder<ConfigContributor> configBinder = Multibinder.newSetBinder
>(binder(), ConfigContributor.class);
> configBinder.addBinding().to(GlobalConfigContributor.class);
>
>Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
>GlobalConfigContributor class I've bound here as well as all of the values
>of the MapBinder for String->ConfigContributor that is bound in the
>DefaultConfigContributorModule. I have to add an Annotation when I do
>Multibinder.newSetBinder to keep that from happening. This doesn't happen
>when I remove my Multibinder and only have the MapBinder... odd. It's
>like the MapBinder values are getting added to the Multibinder config
>automatically.
It sounds like this might be a bug in Guice -- I found this thread on the Guice discussion board which sounds similar to what you're describing:
http://groups.google.com/group/google-guice/browse_thread/thread/934e30b7ed0da98f
>Maybe that's why the original code is a List instead of a Set that uses
>Multibinder.
>
>-Stanton
>
>
>
>From: "Ciancetta, Jesse E." <jc...@mitre.org>
>To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
>Date: 10/31/2011 12:30
>Subject: RE: Injecting global config contributors for the default
>config process
>
>
>
>>-----Original Message-----
>>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>>Sent: Monday, October 31, 2011 8:12 AM
>>To: dev@shindig.apache.org
>>Subject: Injecting global config contributors for the default config
>process
>>
>>Hi everyone,
>>
>>I've recently been looking at the ConfigContributor and ConfigProcessor
>>code and the workflow for getting configuration code the JavaScript side
>>of things. In DefaultConfigProcessor there is a setGlobalContributors
>>method that is injectable and takes a List<ConfigContributor> as a
>>parameter. How is this injectable via Guice? I thought it could be done
>>with Multibinder but that only seems to allow Set contributions. What is
>>the intended way to contribute a List<ConfigContributor> (or any List for
>>that matter) with Guice?
>
>It looks like you can use a TypeLiteral to do this:
>
>http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
>
>And if you search the Shindig codebase for usages of TypeLiteral you'll
>find a few examples of where it is indeed being used to setup List's for
>Guice injection.
>
>However this doesn't seem as flexible as using a Multibinder with a Set
>though since with Multibinder it seems you can append to the Set across
>any number of different Guice modules, and with the TypeLiteral approach I
>don't think that's possible.
>
>I'm far from a Guice expert though so if someone has a better solution
>please chime in.
>
>>I found this issue, however, the solution seems to be Multibinder. :)
>>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>>
>>If there's no good way to do this, I propose changing
>>setGlobalContributors to take a Set<ConfigContributor> so that
>Multibinder
>>can be used. I don't think order or duplicate entries really matter for
>>this use case, so I don't see why a Set wouldn't work....
>
>Even though there does seem to be a workaround available I don't see any
>reason why this shouldn't be a Set -- and by making it a Set we can use
>Multibinder and gain the additional flexibility that buys us in terms of
>being able to add to the bindings across multiple Guice modules.
>
>>Thanks,
>>-Stanton
>
>
>
RE: Injecting global config contributors for the default config process
Posted by Stanton Sievers <ss...@us.ibm.com>.
I just noticed one caveat with using the Multibinder. I'm doing this:
Multibinder<ConfigContributor> configBinder = Multibinder.newSetBinder
(binder(), ConfigContributor.class);
configBinder.addBinding().to(GlobalConfigContributor.class);
Now in DefaultConfigProcessor.setGlobalContributors, I'm getting the
GlobalConfigContributor class I've bound here as well as all of the values
of the MapBinder for String->ConfigContributor that is bound in the
DefaultConfigContributorModule. I have to add an Annotation when I do
Multibinder.newSetBinder to keep that from happening. This doesn't happen
when I remove my Multibinder and only have the MapBinder... odd. It's
like the MapBinder values are getting added to the Multibinder config
automatically.
Maybe that's why the original code is a List instead of a Set that uses
Multibinder.
-Stanton
From: "Ciancetta, Jesse E." <jc...@mitre.org>
To: "dev@shindig.apache.org" <de...@shindig.apache.org>,
Date: 10/31/2011 12:30
Subject: RE: Injecting global config contributors for the default
config process
>-----Original Message-----
>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>Sent: Monday, October 31, 2011 8:12 AM
>To: dev@shindig.apache.org
>Subject: Injecting global config contributors for the default config
process
>
>Hi everyone,
>
>I've recently been looking at the ConfigContributor and ConfigProcessor
>code and the workflow for getting configuration code the JavaScript side
>of things. In DefaultConfigProcessor there is a setGlobalContributors
>method that is injectable and takes a List<ConfigContributor> as a
>parameter. How is this injectable via Guice? I thought it could be done
>with Multibinder but that only seems to allow Set contributions. What is
>the intended way to contribute a List<ConfigContributor> (or any List for
>that matter) with Guice?
It looks like you can use a TypeLiteral to do this:
http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
And if you search the Shindig codebase for usages of TypeLiteral you'll
find a few examples of where it is indeed being used to setup List's for
Guice injection.
However this doesn't seem as flexible as using a Multibinder with a Set
though since with Multibinder it seems you can append to the Set across
any number of different Guice modules, and with the TypeLiteral approach I
don't think that's possible.
I'm far from a Guice expert though so if someone has a better solution
please chime in.
>I found this issue, however, the solution seems to be Multibinder. :)
>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>
>If there's no good way to do this, I propose changing
>setGlobalContributors to take a Set<ConfigContributor> so that
Multibinder
>can be used. I don't think order or duplicate entries really matter for
>this use case, so I don't see why a Set wouldn't work....
Even though there does seem to be a workaround available I don't see any
reason why this shouldn't be a Set -- and by making it a Set we can use
Multibinder and gain the additional flexibility that buys us in terms of
being able to add to the bindings across multiple Guice modules.
>Thanks,
>-Stanton
RE: Injecting global config contributors for the default config
process
Posted by "Ciancetta, Jesse E." <jc...@mitre.org>.
>-----Original Message-----
>From: Stanton Sievers [mailto:ssievers@us.ibm.com]
>Sent: Monday, October 31, 2011 8:12 AM
>To: dev@shindig.apache.org
>Subject: Injecting global config contributors for the default config process
>
>Hi everyone,
>
>I've recently been looking at the ConfigContributor and ConfigProcessor
>code and the workflow for getting configuration code the JavaScript side
>of things. In DefaultConfigProcessor there is a setGlobalContributors
>method that is injectable and takes a List<ConfigContributor> as a
>parameter. How is this injectable via Guice? I thought it could be done
>with Multibinder but that only seems to allow Set contributions. What is
>the intended way to contribute a List<ConfigContributor> (or any List for
>that matter) with Guice?
It looks like you can use a TypeLiteral to do this:
http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions
And if you search the Shindig codebase for usages of TypeLiteral you'll find a few examples of where it is indeed being used to setup List's for Guice injection.
However this doesn't seem as flexible as using a Multibinder with a Set though since with Multibinder it seems you can append to the Set across any number of different Guice modules, and with the TypeLiteral approach I don't think that's possible.
I'm far from a Guice expert though so if someone has a better solution please chime in.
>I found this issue, however, the solution seems to be Multibinder. :)
>http://code.google.com/p/google-guice/issues/detail?id=37&can=2&q=
>
>If there's no good way to do this, I propose changing
>setGlobalContributors to take a Set<ConfigContributor> so that Multibinder
>can be used. I don't think order or duplicate entries really matter for
>this use case, so I don't see why a Set wouldn't work....
Even though there does seem to be a workaround available I don't see any reason why this shouldn't be a Set -- and by making it a Set we can use Multibinder and gain the additional flexibility that buys us in terms of being able to add to the bindings across multiple Guice modules.
>Thanks,
>-Stanton