At some point, I had this issue noted somewhere. I guess I never brought it up on the ML.
The behavior of the RI makes no sense IMHO. If someone else calls initialize of the CDIProvider I'm working on, now my state is all messed up. Not good behavior.
Anyways, if we do #1 it's clear that this initialization doesn't belong in CDIProvider.
If we do #2, it'll be bad experience for whoever's using the provider.
I'd prefer a third option. Revert the change that allows you to call initialize() multiple times, and instead add a CDIProviderFactory (or equivalent) that creates new CDIProviders. You may call initialize on those instances to get new containers. Oh then shutdown can go back on the CDIProvider as well.
John