[
https://issues.jboss.org/browse/CDI-414?page=com.atlassian.jira.plugin.sy...
]
Jozef Hartinger commented on CDI-414:
-------------------------------------
Yes, Weld does not intercept self invocations. My comment only said that it would be
technically possible to support it without much trouble.
You are quoting an outdated version of the specification. The relevant quotes would be:
{quote}When the application invokes:
• a method of a bean via a contextual reference to the bean, as defined in Section
6.5.3,“Contextual reference for a bean”, or
• a method of a bean via a non-contextual reference to the bean, if the instance was
created by the container (e.g. using InjectionTarget.produce() or
UnmanagedInstance.produce()), or
• a business method of a session bean via an EJB remote or local reference,
the invocation is treated as a *business method invocation*.
{quote}
{quote}If, and only if, an invocation is a *business method invocation* it passes through
method interceptors and decorators{quote}
{quote}Otherwise, the invocation is treated as a normal Java method call and is not
intercepted by the container.
{quote}
Support for "self" injection
----------------------------
Key: CDI-414
URL:
https://issues.jboss.org/browse/CDI-414
Project: CDI Specification Issues
Issue Type: Bug
Components: Resolution
Reporter: arjan tijms
Many features of CDI and EJB work by means of a proxy that intercepts calls and adds
'aspects'. In Java it's however not possible to decorate the {{this}} pointer,
so methods called on the same bean instance from within a method in the bean do not get
their 'aspects' applied.
This is a well known limitation, but in EJB it's possible to work around this by
injecting a bean into itself. E.g.
{code}
@Stateless
public class Foo {
@EJB
private Foo self;
// ...
}
{code}
Also see
http://adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb
Unfortunately using CDI and {{@Inject}} this doesn't work. Weld for instance fails
the deployment and logs:
{noformat}
WELD-001443 Pseudo scoped bean has circular dependencies.
{noformat}
See also:
http://adam-bien.com/roller/abien/entry/inject_vs_ejb
Although there are workarounds, it would be great if {{@Inject}} in combination with CDI
could support self injection as well.
With that projects migrating from {{@EJB}} to {{@Inject}} can do so more easily and the
capability can be convenient for new projects as well (e.g. calling two separate
{{@Transactional}} methods from a single method without being required to create a new
bean).
--
This message was sent by Atlassian JIRA
(v6.2.6#6264)