Adam Heath wrote:
> Adrian Crum wrote:
>> Adam Heath wrote:
>>> [email protected] wrote:
>>>> Author: adrianc
>>>> Date: Sun Aug  9 18:04:26 2009
>>>> New Revision: 802567
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=802567&view=rev
>>>> Log:
>>>> Refactored GenericDelegator:
>>>>
>>>> 1. Converted GenericDelegator to an interface. We already have
>>>> DelegatorInterface, but it isn't being used anywhere. Removed
>>>> DelegatorInterface.java.
>>>>
>>>> 2. Extracted the static, cached data from the GenericDelegator
>>>> implementation and put it in its own class - DelegatorData. The
>>>> GenericDelegator implementation holds a reference to the
>>>> DelegatorData instance. This makes it possible to have per-thread
>>>> instances of GenericDelegator.
>>>>
>>>> 3. Replaced the ThreadLocal variables with regular variables.
>>>> ThreadLocal variables are no longer needed. Client code doesn't need
>>>> to be concerned with pushing and popping the GenericDelegator state.
>>>>
>>>> This commit paves the way for the forthcoming ExecutionContext.
>>>>
>>>> User modifications will have to replace
>>>> GenericDelegator.getGenericDelegator(...) with
>>>> DelegatorFactory.getGenericDelegator(...). Also, replace the push
>>>> code with the new setXxx methods, and remove the pop code. If
>>>> modifications used DelegatorInterface, replace that with
>>>> GenericDelegator.
>>>>
>>>> Aside from those changes, this commit is backwards compatible.
>>> No, it is not backwards compatible.
>>>
>>> When a java class is compiled, the bytecode requests an interface
>>> named 'foo', or a class named 'foo'.  If 'foo' changes from class to
>>> interface, then pre-compiled classes will *not* load.
>>>
>>> Please, change GenericDelegator back to a class.
>>>
>>> If DelegatorInterface wasn't used, and was just not uptodate with the
>>> method signatures, wouldn't the simpler thing have been to improve
>>> DelegatorInterface, then to change the class itself?  It seems more
>>> work to change the class to an interface.
>>>
>>> I have external code(webslinger) that needs to support multiple
>>> versions of ofbiz(one all the way back to 512946).  This change makes
>>> that impossible.  I have to have multiple versions of ofbiz
>>> installed(pre/post this change), and compile the class once for each
>>> ofbiz version.
>> Which is easier: rewrite all your Webslinger code to reference
>> DelegatorInterface instead of GenericDelegator, or just recompile your
>> existing code without making any changes?
> 
> That's just it, I wouldn't have to recompile *at all*, if
> GenericDelegator stayed a class.  Nor would anyone else.
> 

Namely, it's a conflict with invokevirtual vs. invokeinterface.

   4:   invokevirtual   #45; //Method
org/ofbiz/entity/GenericDelegator.getCache:()Lorg/ofbiz/entity/cache/Cache;


Reply via email to