On 14/07/2010, at 3:56 AM, Pete Muir wrote:

> 
> On 13 Jul 2010, at 00:45, Walter White wrote:
> 
>> Stuart,
>> 
>> Your idea sounds good as well.
>> 
>> I think my original motivation was when I first started with Spring in 2008, 
>> we proxied an abstract DAO if we didn't need custom functionality.  If we 
>> needed custom functionality, then we extended the abstract DAO making it 
>> concrete.  There was a configuration in spring that let you do that, but at 
>> that point in time, it was useful to avoid writing the same code again and 
>> again.
>> 
>> I need to play around with that more to have a better answer.
>> 
>> Walter
>> 
>> On 07/12/2010 06:05 PM, Stuart Douglas wrote:
>>> On 13/07/2010, at 2:20 AM, Pete Muir wrote:
>>> 
>>> 
>>>> 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?
>>>> 
>>> Looks good, I was planning on doing the meta-annotation stuff at some 
>>> point, and using AroundInvoke rather than implementing InvocationHandler is 
>>> certainly an improvement.
>>> 
>>> I don't see why getTarget should return null though. Even though having 
>>> access to the object may not be not particularly useful, I think that most 
>>> people would find this behaviour surprising. Also they may want to call 
>>> getClass() or use instanceof on the object to determine the exact type they 
>>> are dealing with.
> 
> What would getTarget return then? By definition there is no proxied object.

I would have it return the Proxy instance.

Stuart 

> 
>>> 
>>> Another point is that seeing as how we already have the Javassist 
>>> dependency should this be extended to work for abstract classes as well?
> 
> Yes, seems reasonable.
> 
>>> 
>>> Stuart
>>> 
>>> 
>>>> 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
>>>>> 
>>>> 
>>> 
>> 
> 


_______________________________________________
seam-dev mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-dev

Reply via email to