[seam-dev] Automatic proxying of interfaces in weld extensions

Walter White walterwhite at walterjwhite.com
Mon Jul 12 15:13:06 EDT 2010


Pete,

I agree, weld x would be the spot for it.

Walter


----- Original message -----
> We definitely want something like this in WeldX.
>
> However I would argue we should follow the design of interceptors much
> more closely.
>
> 1) The aroundInvoke method should take an InvocationContext, returning
> null for getTarget (what is the reason for passing the proxy into the
> method in the design below)? 2) Drop the interface implementation
> requirement, and use the @AroundInvoke annotation 3) Add an annotation
> used to find the handlers e.g. @ServiceHandler 4) Add a meta-annotation
> @ServiceBinding(QueryInvocationHandler.class) @interface QueryService {}
>
> WDYT?
>
> On 28 Jun 2010, at 08:54, Stuart Douglas wrote:
>
> > After some discussions with Walter White I have added some
> > experimental code to weld extensions to enable the automatic proxying
> > of interfaces.
> >
> > To demonstrate how this works, here is a sample:
> >
> > @AutoProxy(QueryInvocationHandler.class)
> > public interface QueryService<T> {};
> >
> > public interface UserQuery extends QueryService<User>
> > {
> >
> > @Query("select u from user u where u.username=:1")
> > public User findUserByUsername(String username);
> >
> > }
> >
> > public class QueryInvocationHandler implements InvocationHandler
> > {
> >
> > @Inject EntityManager entityManager;
> >
> > public Object invoke(Object proxy, Method method, Object[] args)
> >     throws Throwable
> > {
> > //run the query based on the annotations on the method
> > }
> >
> > }
> >
> > Any interface that extends QueryService will be automatically proxied
> > by the container, using the InvocationHander specified in the
> > @AutoProxy annotation. This proxy is registered as a bean, and if any
> > qualifiers are present on the Interface being proxied these are added
> > to the bean. It is also possible to inject into the InvocationHandler.
> >   I also plan to make @AutoProxy a meta annotation, so the above could
> > also be represented as:
> >
> >
> > @AutoProxy(QueryInvocationHandler.class)
> > public @interface QueryService{}
> >
> > @QueryService
> > public interface UserQuery
> > {
> >
> > @Query("select u from user u where u.username=:1")
> > public User findUserByUsername(String username);
> >
> > }
> >
> > Does all this sound ok, or does it not have a strong enough use case
> > to include it in Weld Extensions?
> >
> > Stuart
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/seam-dev/attachments/20100712/c0e8aa12/attachment-0001.html 


More information about the seam-dev mailing list