Markus Karg created CDI-735:
-------------------------------
Summary: Multiple Java SE Containers
Key: CDI-735
URL:
https://issues.jboss.org/browse/CDI-735
Project: CDI Specification Issues
Issue Type: Clarification
Components: Java SE Integration
Affects Versions: 2.0 .Final
Reporter: Markus Karg
Priority: Critical
CDI 13.1 says: "_An implementation does not need to support multiple calls of
SeContainerInitializer.initialize() method when the SeContainer is running._"
If a Java SE application wants to create distinct Containers containing beans from the
same JAR library, this effectively means, it MUST create multiple initializers, but the
initializers MAY share the same default ClassLoader, OR does that means that each
initializer MUST be given a separate ClassLoader, OR does that mean that it is IMPOSSIBLE
to create multiple SeContainers at the same time?
The answer to this question is crucial to the further adoption of CDI on Java SE, as
applications need to product multiple containers, but do neither want to rely on
proprietary features of particular implementations (like Weld) nor could add qualifiers to
the source code in case of assembling multiple binary (closed-source) libraries into one
single Java SE application. Example: Java SE boots JAX-RS (not Servlet, not EE server)
with two distinct applications on different ports. Application A uses Version 1 of a
Library, Application B uses Version 2. Version 1 and Version 2 are incompatible. Hence
injection into A MUST NOT be Version 2, and injection into B MUST NOT be Version 1. The
common bootstrap code which starts up Application A and B in JAX-RS MUST provide distinct
containers on the same Java SE VM as Applications A and B are binary JARs (not source
code), hence cannot get annotated.
But there is no guarantee in the CDI spec HOW EVERY CDI implementation will handle this
case. So effectivey at time of writing such an application CANNOT be written. Hence a
clarification is needed.
--
This message was sent by Atlassian JIRA
(v7.5.0#75005)