[
https://jira.jboss.org/jira/browse/WELD-469?page=com.atlassian.jira.plugi...
]
Wolfgang Frech commented on WELD-469:
-------------------------------------
I wrote this from memory, so here is the more detailed report:
1) JSR-299 as of 10 November 2009 specifies that a scope type is, among other Annotations,
marked as @Target({METHOD)} (2.4.2, page 15)
2) JSR-299 mandates a definition error to be detected at container initialization time,
and that the container must abort initialization. (2.8, p. 20)
3) A scope type definition without method target violates the specification, and a bean
using this invalid scope type as well, thus the container must abort initialization. The
definition of definition errors as "violates the rules of this specification"
is rather broad, but looks reasonable to me.
4) JSR-299 does not specify an exception with any particular message, but I would think
that "abort" implies that.
5) JSR-299 permits a "non-portable mode for development", where the container
may try to initialize even with definition errors present. Again, the specification is not
explicit about modes. I would expect that the container is in normal mode if no
development mode is configured.
6) Weld 1.0.1 ScopeModel.initValid tests for Target and the expected values, including
METHOD. If missing, the scope type is invalid.
7) Weld logs a _debug_ message, but does not throw an exception. Debug messages are not
visible in normal development configuration.
8) BeanManager.getReference creates a client proxy only if isProxyRequired, that is if the
scope type is normal, that is if it is valid. No exception here or logging either.
So I would suggest:
a) throw an exception for invalid scope types at initialization time, with the message
that is now in the debug log.
b) define a development mode (with a config switch for it), log the message as a _warning_
and complete initalization, just as now.
c) develop an Eclipse plugin that detects this problem and gives a Quick Fix "add
missing METHOD to @Target"; well, maybe not for this, but in general for common
definition errors.
Exception in normal mode for incompletly annotated custom scopes.
-----------------------------------------------------------------
Key: WELD-469
URL:
https://jira.jboss.org/jira/browse/WELD-469
Project: Weld
Issue Type: Bug
Affects Versions: 1.0.1.Final
Environment: n/a
Reporter: Wolfgang Frech
If a custom scope is incomplete, say without the target annotation for field and type,
but without method, Weld now
- logs a warning
- uses the context for that scope
- marks the scope as invalid
- returns only Java, not ClientProxy refs for Beans.
According to the spec,the container must detect the missing annotation.
It should not complete the initialization.
In addition to that behavior, it may treat it on a best-effort basis, but only in
development mode.
In normal mode, the container should throw an exception that cannot be missed.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira