Summary:
Issues with memory leaks when using multiple guice instances in succession
Scenario:
Bring up a guice container (instance1) and allow the application to run
with instance1, after some time bring up new guice container (guice2) and
if successful atomically switch the application to instance2. If instance2
fails to start for any reason then keep using instance1. Once the switch
is complete then let guice1 be garbage collected. After the application
run for a while with intance2 restart the whole process and bring up
instance4, then instance5 ...
Problem:
Guice filter always contains a reference to any new guice instance. In
this case the guice filter is included in the guice container instance so
each time guice starts a new guice fitler gets created and used correctly
since the application determines which guice filter to submit the request
to. In the case that instance2 failed to start then instance2 should be
garbage collected and not stored in guice filter.
Workaround:
1. use reflection to call GuiceFilter.reset This is a static method and
clears the unneeded reference. The guice filter still has reference to the
correct guice instance via the variable injectedPipeline
Source code of workaround:
Class guiceFilterClass = GuiceFilter.class;
Method[] methods = guiceFilterClass.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("reset")) {
method.setAccessible(true);
method.invoke(null);
break;
}
}
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-guice/d3c6677a-1488-4b22-9d98-d7c4e238c78f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.