On Sat, Dec 15, 2012 at 3:41 PM, Dirk Nimerem <[email protected]>wrote:
> Hello,
>
> I'am developing an extension for the commercial Polarion ALM system. In my
> extension I'am using Google Guice for dependeny injection and I'am very
> satisfied with it. But I have one problem:
>
> I have an Interface ISingleton (just for demonstration) in my extension,
> which is specified as followed:
>
> @ImplementedBy(Singleton.class)
> public interface ISingleton {
> public int getUniqueNumber();
> }
>
> My implementation for the Singleton (also just for demonstration) is the
> following:
>
> @Singleton
> public class Singleton implements ISingleton {
> private final int uniquenumber = (int) (Math.random() * 10000);
>
> @Override
> public int getUniqueNumber() {
> return uniquenumber;
> }
> }
>
> Any classes which depends on the ISingleton get an instance to this via
> constructor injection. That works fine - in all my classes the Singleton
> hashcode is the same, also the unique number. At least for one part of my
> application- any SampleClass gets the same singleton:
>
> public class SampleClass {
> private final ISingleton singleton;
>
> @Inject
> public SampleClass(ISingleton singleton) {
> this.singleton = singleton;
> }
> }
>
> But the problem is: My application consists of two parts: The first part
> is called from the Polarion application at Startup. I create my guice
> injector at this point. As mentioned above, that works fine, any class
> needing an ISingleton get the same Singleton instance.
>
> On the other hand my application also contains a servlet. If I initiate
> some SampleClass
> objects, all of them have another instance of the singleton. That means i
> have two instances of my singleton which is not acceptable for me.
>
> What can I do here? If i consult the injector created and temporarely
> stored at the startup within my servlet,
I'm not familiar with the Polarion ALM framework and so sorry for the
fundamental question, but how is the servlet created (through a different
injector, reflection, something else)?
Another alternative in a pinch is to use a jvm-wide static instance of the
singleton, though it might not be ideal.
Something like:
class YourModule extends AbstractModule {
// Downside is that this doesn't use Guice to be created
private static final ISingleton singleton = new Singleton(...);
@Override protected void configure() {
bind(ISingleton.class).toInstance(singleton);
..
}
}
Fred
i get the correct instance. But i want to use constructor injection and
> keeping a reference to the injector isn't a good idea. How can i solve it?
>
> Thank you in advance,
> Dirk
>
> --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/google-guice/-/0jsOnAocBpQJ.
> 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.
>
--
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.