On Jan 15, 2010, at 2:12 PM, Adam Heath wrote:

> Adrian Crum wrote:
>> Adam Heath wrote:
>>> Adam Heath wrote:
>>>> T result = Controller.runWith(data, new Callable<T>() {
>>>>    public T call() throws Exception {
>>>>        // code
>>>>        return null;
>>>>    }
>>>> });
>>> 
>>> I've actually attempted this, and while I think the implementation of
>>> this pattern is simple, actually *using* it in higher-level code ends
>>> up making things rather verbose.
>> 
>> I just added your idea to the branch, and it *is* simple. Let's say we
>> want to make incoming requests a security-aware artifact:
>> 
>> org.ofbiz.webapp.control.ControlServlet
>> 
>> public void doGet(HttpServletRequest request, HttpServletResponse
>> response) throws ServletException, IOException {
>>    try {
>>        ThreadContext.runExecutionArtifact(new RequestArtifact(request,
>> response));
>>    } catch (Throwable t) {
>>        // Do something with t
>>    }
>> }
> 
> If you were *really* hot stuff, you'd use APT, annotations, and
> directly modify the code at compile time.
> 
> @ThreadContext(RequestArtifact.class)
> public void doGet(HttpServletRequest request, HttpServletResponse
> response) {
>    if (request.getAttribute()) {
>        // ...
>    }
> }

Yes, please... let's make this as obfuscated and impossible to maintain as 
possible.

This may be a community driven project, but job security should still be our #1 
priority. On the other hand, I think it was Adam who said that after a couple 
of years he couldn't even follow his own code in parts of the Entity Engine 
(yes, stuff I've been tempted to rewrite since it's so tedious to trace 
through, though I think the ShoppingCart and related objects are still worse!).

-David


Reply via email to