[cdi-dev] [JBoss JIRA] (CDI-414) Support for "self" injection or intercepted self invocation
Martin Kouba (JIRA)
issues at jboss.org
Fri Feb 19 05:03:00 EST 2016
[ https://issues.jboss.org/browse/CDI-414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13165602#comment-13165602 ]
Martin Kouba commented on CDI-414:
----------------------------------
{quote}
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
{quote}
I'm not really sure this "feature" would help ordinary users, we would basically replace self-injection trick with annotation trick (of course, except it's easier to use) - the feature will be disabled by default, right? Also I'm not sure it's a good idea to reuse the {{@AllowProxy}} (or whatever the name would be) annotation.
> 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).
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the cdi-dev
mailing list