]
Antoine Sabot-Durand commented on CDI-414:
------------------------------------------
bq.Not sure it is really worth all the hassle. At the end this feature is very rarely
used.
It is not used since it's not possible today. It's a new feature proposal
bq. Of course it IS used and sometimes needed. But for those occasions there is the
well-known pattern of simply using self-injection manually.
IMO Self-Injection is not a design pattern, it's a smelly trick introduced to EJB
implementation limitation
The number of average joe who think that interceptor will be triggered from internal call
is countless. Check on Stack Overflow
bq. PS: 'business method' is a well defined term in the EJB spec.
What's the interest of this remark? CDI is not EJB and had to give its own definition
of "business method" since Interceptor spec doesn't.
Support for "self" injection or intercepted self
invocation
-----------------------------------------------------------
Key: CDI-414
URL:
https://issues.jboss.org/browse/CDI-414
Project: CDI Specification Issues
Issue Type: Bug
Components: Resolution
Reporter: arjan tijms
Fix For: 2.0 (discussion)
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).