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