I read virtually the whole Guice site, I guess I didn't connect right away to this page:

http://code.google.com/docreader/#p=google-guice&s=google-guice&t=ModulesShouldBeFastAndSideEffectFree

So basically it says that modules shouldn't DO any "real work" (like actually making connections). That leans more towards the fact that injected resources should be "free" to construct and then do the real init work when they are used (like a real pooling DataSource). I don't have a huge problem with this, and it makes sense.

But I don't think this totally answers my question. In the example on that page it calls a method "addShutdownHook", which I presume is intended to work like java.lang.Runtime.addShutdownHook(Thread). That's nice, if you want the overhead of a bunch of Thread hooks and you only want to release resources on shutdown. Except releasing connections on shutdown is the least important (since the OS will do that for you). What's more important is cleaning up resources used temporarily in a long-running application. I'm thinking back to my hypothetical app which does a lot of work but has a "connect to DB, backup and send over FTP" which has a lot of "per-operation" state that should be cleaned up.

Does anyone have a best-case practice to handle that using Guice? Custom scope? Child Injector? Right now I'm leaning towards:

Create a child injector with a task-specific module
Get the task entry point class from injector, tell it to do the task
Tell the task-specific module to clean up (which knows about the specific instances it bound that need a cleanup).

But this really doesn't fit with that page that says "Modules start up, but they don't shut down."

And it also doesn't fit into the whole point of Guice that you shouldn't be creating your own objects (creating your own injector seems like calling new but trying to pretend that you aren't). Maybe if the "Task Runner" is itself injected...

So I'm stuck at this stage of learning Guice. As an old C++ programmer I know "every new has a delete" and Guice is an expert at creating but gives you no means to destroy that I can see, so I am totally perplexed.

Jason

On 7/3/2010 4:41 PM, Jason Winnebeck wrote:
But, how do I shutdown that DataSource, or any other resource that I
acquire?

--
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.

Reply via email to