tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Howard Lewis Ship <hls...@gmail.com>
Subject Re: JPA / method annotations
Date Wed, 20 Apr 2011 22:43:28 GMT
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
<igor.drobiazko@gmail.com> 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 <hlship@gmail.com>
> 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
>> <igor.drobiazko@gmail.com> 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 <hlship@gmail.com>
>> > 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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message