Thank you Stanton for the hint.
I went with the static field approach, since I do not explicitly
initialize UserDb class.
Best
Evgeny
On 22.12.11 14:49, Stanton Sievers wrote:
Here are two options I can come up with off the top of my head, assuming I
understand your problem correctly.
You can do a static injection of UserDb in the JPASocialModule which means
the field will have to be static. Or, you can modify the @Injected
constructor for PersonServiceDb to have an
@Named("shindig.signing.global-callback-url") param that you can then pass
along to UserDb when you instanstiate it, assuming you are instanstiating
it. If UserDb is a singleton then I would go with the static injection
approach.
Best regards,
-Stanton
From: Evgeny Bogdanov<evgeny.bogda...@epfl.ch>
To: dev@shindig.apache.org,
Date: 12/22/2011 08:42
Subject: Re: Guice problem in persistence
On 22.12.11 13:53, Stanton Sievers wrote:
Hi,
How is your UserDb class being injected? Make sure it's not being
injected before the PropertiesModule, which by default is injected via
the
web.xml.
The thing is I am not very comfortable with Guice injection mechanism.
So I do not know if it is injected or not. This I have currently
1. In web.xml (JPA module is after Properties)
org.apache.shindig.common.PropertiesModule:
org.apache.shindig.gadgets.DefaultGuiceModule:
org.apache.shindig.social.core.config.SocialApiGuiceModule:
org.apache.shindig.graaasp.jpa.spi.JPASocialModule:
2. In JPA I have explicit injection
bind(PersonService.class).to(PersonServiceDb.class).in(Scopes.SINGLETON);
3. In PersonServiceDb I import the class UserDb.java:
import org.apache.shindig.social.core.model.UserDb;
So, I believe it does not do any injection for UserDb this way.
Then the question is how do I inject UserDb or how do I pass the data
from PropertiesModule
to my UserDb.java class.
If your class isn't being injected at all you can request a static
injection in an existing guice module (or your own).
requestStaticInjection(UserDb.class)
I tried to add it in JPASocialModule, but it does not seem to be
working. The field CALLBACK_URL is still null.
I also prefer method injection to field injection for setting values.
I'm
not sure if one is preferred over the other in the broader community or
not.
Could you give a small example how you do it.
-Stanton
From: Evgeny Bogdanov<evgeny.bogda...@epfl.ch>
To: dev@shindig.apache.org,
Date: 12/22/2011 06:30
Subject: Guice problem in persistence
Hi
I have small problem, maybe somebody can point out where it is.
I have this line in shindig.properties:
shindig.signing.global-callback-url=http://localhost:8080/gadgets/oauthcallback
I want to access it from my db class.
Properties file is read in PropertiesModule.java and Guice's Named
annotation is created with
Names.bindProperties(this.binder(), getProperties());
Then I try to access it as following in my UserDb.java class
@Transient
@Inject @Named("shindig.signing.global-callback-url") String
CALLBACK_URL;
For some reason, it is always null.
Could somebody explain why I can't do it? What is the workaround. I
don't want to read properties file again,
since it's done in PropertiesModule.java already.
Any suggestions?
Best
Evgeny