[
https://issues.jboss.org/browse/CDI-127?page=com.atlassian.jira.plugin.sy...
]
Pete Muir edited comment on CDI-127 at 6/21/11 9:16 AM:
--------------------------------------------------------
h1. Notes
Enums are somewhat different to normal classes, as Java guarantees that any instances are
singletons. Therefore we cannot treat them as classes. Furthermore, do we want to support
them as beans, allowing them to be injected?
Differences are:
* No callback on instantiation, when do we inject?
* Shared between deployments as singletons, how do we handle dependent scoped injections?
* We do not control instantiation, cannot perform constructor injection
h1. Proposal
We should support enums as non-contextual objects, performing field and method injection
only. Enums should be assumed to be injected only after the application is fully
initialized for portability.
If an enum is on a shared classloader, any injections should correctly resolve to the
deployment of the calling context. In other words, if a shared library or installed
library has an enum A:
{code}
enum A {
FOO, BAR;
@Inject B b;
String getName() {
return b.name;
}
}
{code}
where B is a class defined in the shared library
{code}
@ApplicationScoped
class B {
String name;
}
{code}
Then assuming that the name has been set to Pete in deployment 1, and Marius in deployment
2, when the enum A is used in deployment 1, the method getName() should return Pete, and
in deployment 2 it should return Marius.
was (Author: petemuir):
h1. Notes
Enums are somewhat different to normal classes, as Java guarantees that any instances are
singletons. Therefore we cannot treat them as classes. Furthermore, do we want to support
them as beans, allowing them to be injected?
Differences are:
* No callback on instantiation, when do we inject?
* Shared between deployments as singletons, how do we handle dependent scoped injections?
* We do not control instantiation, cannot perform constructor injection
h1. Proposal
We should support enums as non-contextual objects, performing field injection only. Enums
should be assumed to be injected only after the application is fully initialized for
portability.
If an enum is on a shared classloader, any injections should correctly resolve to the
deployment of the calling context. In other words, if a shared library or installed
library has an enum A:
{code}
enum A {
FOO, BAR;
@Inject B b;
String getName() {
return b.name;
}
}
{code}
where B is a class defined in the shared library
{code}
@ApplicationScoped
class B {
String name;
}
{code}
Then assuming that the name has been set to Pete in deployment 1, and Marius in deployment
2, when the enum A is used in deployment 1, the method getName() should return Pete, and
in deployment 2 it should return Marius.
Add support for annotation scanning of Java enums
-------------------------------------------------
Key: CDI-127
URL:
https://issues.jboss.org/browse/CDI-127
Project: CDI Specification Issues
Issue Type: Feature Request
Components: Beans
Reporter: Brian Leathem
Assignee: Pete Muir
Fix For: 1.1 (Confirmed)
It would be useful if Java enums were included in the CDI annotation scan.
A use case for this is found in the Seam Faces project, where we would like to use
annotations on enums for configuration purposes. The annotation would look like:
@ViewConfig
public enum Pages {
...
}
It is my understanding that the current CDI specification (1.0) does not require scanning
of the enum and will not pick up the @ViewConfig annotation.
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira