You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/03/06 01:02:22 UTC

svn commit: r1297301 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Author: rmannibucau
Date: Tue Mar  6 00:02:21 2012
New Revision: 1297301

URL: http://svn.apache.org/viewvc?rev=1297301&view=rev
Log:
ability to get injection in dynamic proxy handler + implicit injection of the proxies interface

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1297301&r1=1297300&r2=1297301&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Tue Mar  6 00:02:21 2012
@@ -1279,11 +1279,27 @@ public class BeanContext extends Deploym
 
             // Create bean instance
             final Object beanInstance;
-            final InjectionProcessor injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), this.getInjections(), InjectionProcessor.unwrap(ctx));
+            final InjectionProcessor injectionProcessor;
             if (!isDynamicallyImplemented()) {
+                injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), getInjections(), InjectionProcessor.unwrap(ctx));
                 beanInstance = injectionProcessor.createInstance();
                 inject(beanInstance, creationalContext);
             } else {
+                // update target
+                final List<Injection> newInjections = new ArrayList<Injection>();
+                for (Injection injection : getInjections()) {
+                    if (beanClass.equals(injection.getTarget())) {
+                        final Injection updated = new Injection(injection.getJndiName(), injection.getName(), beanDefinition.getBeanClass());
+                        newInjections.add(updated);
+                    } else {
+                        newInjections.add(injection);
+                    }
+                }
+                injections.clear();
+                injections.addAll(newInjections);
+
+                injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), injections, InjectionProcessor.unwrap(ctx));
+                injectionProcessor.setProperty("implementingInterfaceClass", beanClass);
                 InvocationHandler handler = (InvocationHandler) injectionProcessor.createInstance();
                 beanInstance = DynamicProxyImplFactory.newProxy(this, handler);
                 inject(handler, creationalContext);



Re: svn commit: r1297301 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Posted by Romain Manni-Bucau <rm...@gmail.com>.
i don't use @Resource but a name convention. It is not perfect but as we
can inject Class<?> the only way could be to add a custom type which will
be useless.

- Romain


2012/3/9 David Blevins <da...@gmail.com>

>
> On Mar 9, 2012, at 1:46 AM, Romain Manni-Bucau wrote:
>
> > Hi David,
> >
> > it was not managed by CDI and injections was not working so well.
>
> Sounds like we need a JIRA for this titled "@Inject support for @Proxy
> bean handlers"
>
> A unit test might be great for that as well.  The loop that recreates all
> the injections looks a little fishy and could probably be improved, but I
> don't breaking the untested code.
>
> > i added too a way to inject the interface because when you are doing a
> > little bit generic handler you often need it.
>
> Are we reusing @Resource for that?  How do we identify the field to do the
> injection upon?
>
> > Do you see any issue with this change?
>
> Nope.  Just trying to understand.  With the volume of commits, there's no
> possible way I can fully digest them all in a short period of time, so
> asking questions :)
>
>
> -David
>
> > 2012/3/9 David Blevins <da...@gmail.com>
> >
> >> I thought we already supported injection on the handler.  What problem
> is
> >> this aimed at?
> >>
> >> -David
> >>
> >> On Mar 5, 2012, at 6:02 PM, rmannibucau@apache.org wrote:
> >>
> >>> Author: rmannibucau
> >>> Date: Tue Mar  6 00:02:21 2012
> >>> New Revision: 1297301
> >>>
> >>> URL: http://svn.apache.org/viewvc?rev=1297301&view=rev
> >>> Log:
> >>> ability to get injection in dynamic proxy handler + implicit injection
> >> of the proxies interface
> >>>
> >>> Modified:
> >>>
> >>
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> >>>
> >>> Modified:
> >>
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> >>> URL:
> >>
> http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1297301&r1=1297300&r2=1297301&view=diff
> >>>
> >>
> ==============================================================================
> >>> ---
> >>
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> >> (original)
> >>> +++
> >>
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> >> Tue Mar  6 00:02:21 2012
> >>> @@ -1279,11 +1279,27 @@ public class BeanContext extends Deploym
> >>>
> >>>            // Create bean instance
> >>>            final Object beanInstance;
> >>> -            final InjectionProcessor injectionProcessor = new
> >> InjectionProcessor(beanConstructor.create(creationalContext),
> >> this.getInjections(), InjectionProcessor.unwrap(ctx));
> >>> +            final InjectionProcessor injectionProcessor;
> >>>            if (!isDynamicallyImplemented()) {
> >>> +                injectionProcessor = new
> >> InjectionProcessor(beanConstructor.create(creationalContext),
> >> getInjections(), InjectionProcessor.unwrap(ctx));
> >>>                beanInstance = injectionProcessor.createInstance();
> >>>                inject(beanInstance, creationalContext);
> >>>            } else {
> >>> +                // update target
> >>> +                final List<Injection> newInjections = new
> >> ArrayList<Injection>();
> >>> +                for (Injection injection : getInjections()) {
> >>> +                    if (beanClass.equals(injection.getTarget())) {
> >>> +                        final Injection updated = new
> >> Injection(injection.getJndiName(), injection.getName(),
> >> beanDefinition.getBeanClass());
> >>> +                        newInjections.add(updated);
> >>> +                    } else {
> >>> +                        newInjections.add(injection);
> >>> +                    }
> >>> +                }
> >>> +                injections.clear();
> >>> +                injections.addAll(newInjections);
> >>> +
> >>> +                injectionProcessor = new
> >> InjectionProcessor(beanConstructor.create(creationalContext),
> injections,
> >> InjectionProcessor.unwrap(ctx));
> >>> +
> >> injectionProcessor.setProperty("implementingInterfaceClass", beanClass);
> >>>                InvocationHandler handler = (InvocationHandler)
> >> injectionProcessor.createInstance();
> >>>                beanInstance = DynamicProxyImplFactory.newProxy(this,
> >> handler);
> >>>                inject(handler, creationalContext);
> >>>
> >>>
> >>>
> >>
> >>
>
>

Re: svn commit: r1297301 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Posted by David Blevins <da...@gmail.com>.
On Mar 9, 2012, at 1:46 AM, Romain Manni-Bucau wrote:

> Hi David,
> 
> it was not managed by CDI and injections was not working so well.

Sounds like we need a JIRA for this titled "@Inject support for @Proxy bean handlers"

A unit test might be great for that as well.  The loop that recreates all the injections looks a little fishy and could probably be improved, but I don't breaking the untested code.

> i added too a way to inject the interface because when you are doing a
> little bit generic handler you often need it.

Are we reusing @Resource for that?  How do we identify the field to do the injection upon?

> Do you see any issue with this change?

Nope.  Just trying to understand.  With the volume of commits, there's no possible way I can fully digest them all in a short period of time, so asking questions :)


-David

> 2012/3/9 David Blevins <da...@gmail.com>
> 
>> I thought we already supported injection on the handler.  What problem is
>> this aimed at?
>> 
>> -David
>> 
>> On Mar 5, 2012, at 6:02 PM, rmannibucau@apache.org wrote:
>> 
>>> Author: rmannibucau
>>> Date: Tue Mar  6 00:02:21 2012
>>> New Revision: 1297301
>>> 
>>> URL: http://svn.apache.org/viewvc?rev=1297301&view=rev
>>> Log:
>>> ability to get injection in dynamic proxy handler + implicit injection
>> of the proxies interface
>>> 
>>> Modified:
>>> 
>> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
>>> 
>>> Modified:
>> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
>>> URL:
>> http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1297301&r1=1297300&r2=1297301&view=diff
>>> 
>> ==============================================================================
>>> ---
>> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
>> (original)
>>> +++
>> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
>> Tue Mar  6 00:02:21 2012
>>> @@ -1279,11 +1279,27 @@ public class BeanContext extends Deploym
>>> 
>>>            // Create bean instance
>>>            final Object beanInstance;
>>> -            final InjectionProcessor injectionProcessor = new
>> InjectionProcessor(beanConstructor.create(creationalContext),
>> this.getInjections(), InjectionProcessor.unwrap(ctx));
>>> +            final InjectionProcessor injectionProcessor;
>>>            if (!isDynamicallyImplemented()) {
>>> +                injectionProcessor = new
>> InjectionProcessor(beanConstructor.create(creationalContext),
>> getInjections(), InjectionProcessor.unwrap(ctx));
>>>                beanInstance = injectionProcessor.createInstance();
>>>                inject(beanInstance, creationalContext);
>>>            } else {
>>> +                // update target
>>> +                final List<Injection> newInjections = new
>> ArrayList<Injection>();
>>> +                for (Injection injection : getInjections()) {
>>> +                    if (beanClass.equals(injection.getTarget())) {
>>> +                        final Injection updated = new
>> Injection(injection.getJndiName(), injection.getName(),
>> beanDefinition.getBeanClass());
>>> +                        newInjections.add(updated);
>>> +                    } else {
>>> +                        newInjections.add(injection);
>>> +                    }
>>> +                }
>>> +                injections.clear();
>>> +                injections.addAll(newInjections);
>>> +
>>> +                injectionProcessor = new
>> InjectionProcessor(beanConstructor.create(creationalContext), injections,
>> InjectionProcessor.unwrap(ctx));
>>> +
>> injectionProcessor.setProperty("implementingInterfaceClass", beanClass);
>>>                InvocationHandler handler = (InvocationHandler)
>> injectionProcessor.createInstance();
>>>                beanInstance = DynamicProxyImplFactory.newProxy(this,
>> handler);
>>>                inject(handler, creationalContext);
>>> 
>>> 
>>> 
>> 
>> 


Re: svn commit: r1297301 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi David,

it was not managed by CDI and injections was not working so well.

i added too a way to inject the interface because when you are doing a
little bit generic handler you often need it.

Do you see any issue with this change?

- Romain


2012/3/9 David Blevins <da...@gmail.com>

> I thought we already supported injection on the handler.  What problem is
> this aimed at?
>
> -David
>
> On Mar 5, 2012, at 6:02 PM, rmannibucau@apache.org wrote:
>
> > Author: rmannibucau
> > Date: Tue Mar  6 00:02:21 2012
> > New Revision: 1297301
> >
> > URL: http://svn.apache.org/viewvc?rev=1297301&view=rev
> > Log:
> > ability to get injection in dynamic proxy handler + implicit injection
> of the proxies interface
> >
> > Modified:
> >
>  openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> >
> > Modified:
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> > URL:
> http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1297301&r1=1297300&r2=1297301&view=diff
> >
> ==============================================================================
> > ---
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> (original)
> > +++
> openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> Tue Mar  6 00:02:21 2012
> > @@ -1279,11 +1279,27 @@ public class BeanContext extends Deploym
> >
> >             // Create bean instance
> >             final Object beanInstance;
> > -            final InjectionProcessor injectionProcessor = new
> InjectionProcessor(beanConstructor.create(creationalContext),
> this.getInjections(), InjectionProcessor.unwrap(ctx));
> > +            final InjectionProcessor injectionProcessor;
> >             if (!isDynamicallyImplemented()) {
> > +                injectionProcessor = new
> InjectionProcessor(beanConstructor.create(creationalContext),
> getInjections(), InjectionProcessor.unwrap(ctx));
> >                 beanInstance = injectionProcessor.createInstance();
> >                 inject(beanInstance, creationalContext);
> >             } else {
> > +                // update target
> > +                final List<Injection> newInjections = new
> ArrayList<Injection>();
> > +                for (Injection injection : getInjections()) {
> > +                    if (beanClass.equals(injection.getTarget())) {
> > +                        final Injection updated = new
> Injection(injection.getJndiName(), injection.getName(),
> beanDefinition.getBeanClass());
> > +                        newInjections.add(updated);
> > +                    } else {
> > +                        newInjections.add(injection);
> > +                    }
> > +                }
> > +                injections.clear();
> > +                injections.addAll(newInjections);
> > +
> > +                injectionProcessor = new
> InjectionProcessor(beanConstructor.create(creationalContext), injections,
> InjectionProcessor.unwrap(ctx));
> > +
>  injectionProcessor.setProperty("implementingInterfaceClass", beanClass);
> >                 InvocationHandler handler = (InvocationHandler)
> injectionProcessor.createInstance();
> >                 beanInstance = DynamicProxyImplFactory.newProxy(this,
> handler);
> >                 inject(handler, creationalContext);
> >
> >
> >
>
>

Re: svn commit: r1297301 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java

Posted by David Blevins <da...@gmail.com>.
I thought we already supported injection on the handler.  What problem is this aimed at?

-David

On Mar 5, 2012, at 6:02 PM, rmannibucau@apache.org wrote:

> Author: rmannibucau
> Date: Tue Mar  6 00:02:21 2012
> New Revision: 1297301
> 
> URL: http://svn.apache.org/viewvc?rev=1297301&view=rev
> Log:
> ability to get injection in dynamic proxy handler + implicit injection of the proxies interface
> 
> Modified:
>    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> 
> Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1297301&r1=1297300&r2=1297301&view=diff
> ==============================================================================
> --- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java (original)
> +++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java Tue Mar  6 00:02:21 2012
> @@ -1279,11 +1279,27 @@ public class BeanContext extends Deploym
> 
>             // Create bean instance
>             final Object beanInstance;
> -            final InjectionProcessor injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), this.getInjections(), InjectionProcessor.unwrap(ctx));
> +            final InjectionProcessor injectionProcessor;
>             if (!isDynamicallyImplemented()) {
> +                injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), getInjections(), InjectionProcessor.unwrap(ctx));
>                 beanInstance = injectionProcessor.createInstance();
>                 inject(beanInstance, creationalContext);
>             } else {
> +                // update target
> +                final List<Injection> newInjections = new ArrayList<Injection>();
> +                for (Injection injection : getInjections()) {
> +                    if (beanClass.equals(injection.getTarget())) {
> +                        final Injection updated = new Injection(injection.getJndiName(), injection.getName(), beanDefinition.getBeanClass());
> +                        newInjections.add(updated);
> +                    } else {
> +                        newInjections.add(injection);
> +                    }
> +                }
> +                injections.clear();
> +                injections.addAll(newInjections);
> +
> +                injectionProcessor = new InjectionProcessor(beanConstructor.create(creationalContext), injections, InjectionProcessor.unwrap(ctx));
> +                injectionProcessor.setProperty("implementingInterfaceClass", beanClass);
>                 InvocationHandler handler = (InvocationHandler) injectionProcessor.createInstance();
>                 beanInstance = DynamicProxyImplFactory.newProxy(this, handler);
>                 inject(handler, creationalContext);
> 
> 
>