In case of spring-integration I was using Tapestry IoC to build the routes.
So, spring-integration was working on proxies.

I think also tynamo guys rely on annotations being copied to proxies. I
remember Alejandro Scandroli requested this feature.

On Thu, Apr 21, 2011 at 12:43 AM, Howard Lewis Ship <[email protected]>wrote:

> Right, but how does that intersect with Tapestry IoC?  Anything that
> scans the classpath for classes won't see any proxy classes, just the
> original classes.
>
> On Wed, Apr 20, 2011 at 2:39 PM, Igor Drobiazko
> <[email protected]> wrote:
> > Any library which scans the classpath for their specific annotations
> fails
> > while the annotations are lost. Here are some examples:
> >
> > http://download.oracle.com/javaee/5/api/javax/jws/WebService.html
> > http://download.oracle.com/javaee/6/api/javax/ws/rs/Path.html
> >
> > In the past I had also a lot of problems integrating spring-integration
> into
> > a Tapestry app.
> >
> > http://www.springsource.org/spring-integration
> >
> > If you want to use annotations to mark you services as routers, splitter
> > transformers and endpoints, you are lost:
> >
> >
> http://static.springsource.org/spring-integration/api/org/springframework/integration/annotation/Router.html
> >
> http://static.springsource.org/spring-integration/api/org/springframework/integration/annotation/Splitter.html
> >
> http://static.springsource.org/spring-integration/api/org/springframework/integration/annotation/Transformer.html
> >
> > The issue is that third party libraries need to read the annotations from
> > classes. They just don't know what to do with ServiceResources.
> >
> > On Wed, Apr 20, 2011 at 10:46 PM, Howard Lewis Ship <[email protected]>
> > wrote:
> >>
> >> Can you give me a specific example of the problem integrating with a
> >> REST lib?  I'm trying to find where an interface point would exist
> >> that has access to the proxy, but not to the ServiceResources object.
> >>
> >> On Wed, Apr 20, 2011 at 1:14 PM, Igor Drobiazko
> >> <[email protected]> wrote:
> >> > I would hate to move away from copying annotation to proxies. It would
> >> > definitely break some of the existing apps. It would also a very big
> >> > limitation for creating integrations with libraries which need to read
> >> > annotations from classes. A good example a REST libs.
> >> >
> >> > If I recall it correctly, when implementing the copying annotations
> with
> >> > Javassist there was an issue with the abstract class named
> >> > AbstractInvocation. It doesn't implement the getMethodAnnotation
> method
> >> > because it is generated somewhere. For components it is in
> >> > InternalClassTransformationImpl. I don't recall the place for the
> >> > service
> >> > layer. Might it be the issue with plastic?
> >> >
> >> > On Wed, Apr 20, 2011 at 9:14 PM, Howard Lewis Ship <[email protected]>
> >> > wrote:
> >> >>
> >> >> Been struggling with this.  I must have screwed up the logic that
> >> >> mixes-and-matches annotations from the implementation class with
> >> >> annotations from the interface.
> >> >>
> >> >> The problems with JPA are caused by this code from
> >> >> CommitAfterMethodAdvice:
> >> >>
> >> >>    private EntityTransaction getTransaction(final Invocation
> >> >> invocation)
> >> >>    {
> >> >>        final PersistenceContext annotation = invocation
> >> >>                .getMethodAnnotation(PersistenceContext.class);
> >> >>
> >> >>        EntityManager em = JpaInternalUtils.getEntityManager(manager,
> >> >> annotation);
> >> >>
> >> >>        if (em == null)
> >> >>            return null;
> >> >>
> >> >>        return em.getTransaction();
> >> >>    }
> >> >>
> >> >>
> >> >> The annotation is always null.  Tracing with the debugger shows that
> >> >> the method being invoked is a method on the Plastic Proxy class.
> >> >>
> >> >> What I'm having trouble figuring out is why things worked when using
> >> >> ClassFactory and not PlasticProxyFactory. Did I miss some code
> >> >> somewhere that copied annotations from the interface into the proxy?
> >> >> Normally, when you look at a method of a class, you see just the
> >> >> annotations on that method, even if the method itself is an
> >> >> implementation of an interface method that does have annotations:
> >> >>
> >> >> public class Experiment
> >> >> {
> >> >>    public interface Foo
> >> >>    {
> >> >>        @Deprecated
> >> >>        void foo();
> >> >>    }
> >> >>
> >> >>    public static class FooImpl
> >> >>    {
> >> >>        public void foo()
> >> >>        {
> >> >>
> >> >>        }
> >> >>    }
> >> >>
> >> >>    public static void main(String[] args) throws SecurityException,
> >> >> NoSuchMethodException
> >> >>    {
> >> >>        System.out.println("Foo    : " +
> >> >> Foo.class.getMethod("foo").getAnnotation(Deprecated.class));
> >> >>        System.out.println("FooImpl: " +
> >> >> FooImpl.class.getMethod("foo").getAnnotation(Deprecated.class));
> >> >>    }
> >> >> }
> >> >>
> >> >> Output:
> >> >>
> >> >> Foo    : @java.lang.Deprecated()
> >> >> FooImpl: null
> >> >>
> >> >>
> >> >> ... I wonder if it is not too late to find a way to expose method
> >> >> annotations via the AnnotationProvider interface; this would make it
> >> >> much easier, as we already have AnnotationProvider and idea like
> >> >> AnnotationProviderChain.  It would be very nice if we could move away
> >> >> from copying annotation from one class to another.
> >> >>
> >> >>
> >> >> --
> >> >> Howard M. Lewis Ship
> >> >>
> >> >> Creator of Apache Tapestry
> >> >>
> >> >> The source for Tapestry training, mentoring and support. Contact me
> to
> >> >> learn how I can get you up and productive in Tapestry fast!
> >> >>
> >> >> (971) 678-5210
> >> >> http://howardlewisship.com
> >> >
> >> >
> >> >
> >> > --
> >> > Best regards,
> >> >
> >> > Igor Drobiazko
> >> > http://tapestry5.de
> >> >
> >>
> >>
> >>
> >> --
> >> Howard M. Lewis Ship
> >>
> >> Creator of Apache Tapestry
> >>
> >> The source for Tapestry training, mentoring and support. Contact me to
> >> learn how I can get you up and productive in Tapestry fast!
> >>
> >> (971) 678-5210
> >> http://howardlewisship.com
> >
> >
> >
> > --
> > Best regards,
> >
> > Igor Drobiazko
> > http://tapestry5.de
> >
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
>
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
>
> (971) 678-5210
> http://howardlewisship.com
>



-- 
Best regards,

Igor Drobiazko
http://tapestry5.de

Reply via email to