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

> David E Jones wrote:
>> 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!).
> 
> Yeah, that was me, and it is the caching stuff.  I agree about the
> shopping cart and order read header too.
> 
> In all honesty, I would use dynamic ecas to do the caching stuff now.

Do you mean like Entity ECAs? I'm not sure how that would work, but it would be 
an interesting way to externalize things.

As a side note that is somewhat related, I think reverse 
associations/injections in code (like aspect oriented stuff) is another great 
tool of obfuscation that if skillfully applied can not only grow the initial 
effort required for development, but can also explode the maintenance effort 
required. That's why so many of us consultants like it so much. ;)

-David

Reply via email to