[cdi-dev] [Vote] @ApplicationScoped and visibility
Mark Struberg
struberg at yahoo.de
Mon Nov 26 09:29:45 EST 2012
All current containers (EE and standalone, namely Weld, Glassfish, OpenWebBeans, JBossAS 6 and 7, WebSphere, TomEE) implement 1(b) as shown via the small example available at [1]
Thus taking 1.a would introduce heavy backward compatibility issues.
Therefore I VOTE for 1.b
As for question 2 I VOTE for 2.b as the 1-per-ear Scope already exists twice in the form of javax.ejb.Singleton and javax.inject.Singleton.
LieGrue,
strub
[1] https://github.com/struberg/cdi_eartest
----- Original Message -----
> From: Pete Muir <pmuir at redhat.com>
> To: cdi-dev at lists.jboss.org
> Cc:
> Sent: Monday, November 26, 2012 2:44 PM
> Subject: [cdi-dev] [Vote] @ApplicationScoped and visibility
>
> CDI EG members,
>
> Please vote on the following two issues by indicating whether you prefer either
> option (a) or (b) to both questions (1) and (2). Please vote asap, voting closes
> as soon as I have a complete set of votes from the EG or at COB (Eastern) on
> 30th Nov, whichever happens sooner :-)
>
> Question 1, Visibility
> ---------------------------
>
> The CDI 1.0 specification states that only beans whose bean class is accessible
> (using standard classloader visibility rules) can be injected into another bean.
> For example, if you have a bean A in WAR, assuming standard Java EE classloader
> structure, it wouldn't be available for injection in bean B, in an EJB
> modiule. This generally makes sense, as the type is not visible either.
>
> CDI also offers two options to replace bean implementations transparently,
> without explicitly selecting that implementation (either by type or using a
> qualifier) - alternatives and specialization.
>
>
> First, let's consider specialization. For example, if bean B, from the
> example above, is specialized by bean S in the WAR, and bean C in the same EJB
> module as B injects a type B, then what should be injected (if anything). The
> CDI 1.0 specification addresses this issue by disabling any bean which has been
> specialized across the entire application. Therefore, according to CDI 1.0, this
> would result in an deployment problem (as there would be an unsatisfied
> injection point).
>
> Alternatives are addressed a little differently in CDI 1.0. For example, if bean
> B has an alternative A packaged in the WAR, then if A is selected in the war
> only, then if bean C in the same EJB module as B injects a type B, it would be
> injected with C. However, if A is selected for the EJB module as well, then the
> deployment should fail as beans.xml of the EJB module references S which it
> cannot see. Note that we have also added global visibility for alternatives in
> CDI 1.1, which may need revising based on what is decided here.
>
> The EG has debated two options.
>
> (a) maintain the status quo, as described by the CDI 1.0 spec
> (b) take an approach where visibility is isolated according to the calling
> context. Thus, if a call originates via the WAR, then specialization and enabled
> alternatives in the WAR are visible to any bean which is called in that stack.
>
> Approximately, Weld takes approach (a), and OWB takes approach (b), so which
> approach is more backwards compatible here is debatable.
>
>
> Question 2, @ApplicationScoped
> ---------------------------------------------
>
> CDI implementations have not consistently shared @ApplicationScoped beans across
> all modules of an EAR. Weld, and app servers built on Weld (those that we have
> surveyed include JBoss AS, GlassFish, WebLogic) have shared application scoped
> beans across the EAR. OWB isolates @ApplicationScoped beans to the calling
> context of the WAR, however applications servers built on OWB have shared beans
> across all modules of an EAR (this is certainly true of WebSphere, and I believe
> it is true of TomEE).
>
> The EG has debated two options.
>
> (a) require @ApplicationScoped beans to be shared across all modules of an EAR
> (b) take an approach where @ApplicationScoped beans are isolated to the calling
> context
>
> Whichever approach is taken, the EG is agreed that a scope that addresses the
> other option should be introduced.
>
> So, please indicated which options you favour:
>
> Question 1: (a) OR (b)
> Question 2: (a) OR (b)
>
> Thanks,
>
> Pete
>
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
More information about the cdi-dev
mailing list