Adrian Crum wrote:
> --- On Sat, 1/30/10, Adam Heath <doo...@brainfood.com> wrote:
>> From: Adam Heath <doo...@brainfood.com>
>> Subject: Re: svn commit: r904921 - in 
>> /ofbiz/trunk/framework/base/src/org/ofbiz/base: test/BaseUnitTests.java 
>> util/string/UelUtil.java
>> To: dev@ofbiz.apache.org
>> Date: Saturday, January 30, 2010, 5:28 PM
>> Adrian Crum wrote:
>>> --- On Sat, 1/30/10, Adam Heath <doo...@brainfood.com>
>> wrote:
>>>> From: Adam Heath <doo...@brainfood.com>
>>>> Subject: Re: svn commit: r904921 - in
>> /ofbiz/trunk/framework/base/src/org/ofbiz/base:
>> test/BaseUnitTests.java util/string/UelUtil.java
>>>> To: dev@ofbiz.apache.org
>>>> Date: Saturday, January 30, 2010, 4:57 PM
>>>> Adrian Crum wrote:
>>>>>> If you really need to modify variable,
>> then change
>>>> the
>>>>>> generics markup
>>>>>> on context.
>>>>> I appreciate the review and comments, but I
>> think
>>>> you're not understanding the integration. I can't
>> change the
>>>> method signature because it is part of the JSR
>> 245
>>>> specification, and yes, I really need to write to
>> the
>>>> context because that is the whole point of the
>> integration.
>>>> Well, then, the integration is wrong.  If
>> that method
>>>> signature is
>>>> part of the spec, then you can't just go and do an
>> end run
>>>> around it
>>>> because you feel like it.
>>> The context Map that is passed around the framework
>> (in services, mini-lang, and screen widgets) is referred to
>> as Map<String, ? extends Object>. Yet some portions of
>> the framework need to write to that Map - it's their job to
>> do so. So, what do you suggest?
>>
>> Dig further.  You'll find that this supposed read-only
>> map is actually
>> already a copy in places, so if you really do write to it,
>> the changes
>> will just be thrown away anyways.
>>
>> In other cases, the original map that enters the system is
>> already a
>> throw-away.
>>
>> When I originally came up with the read-only generics for
>> service
>> engine calls, I tried to make the maps writable.  But
>> upon modifying
>> the entire stack, I discovered it wasn't possible. 
>> The service engine
>> made copies in some cases, so the underlying service
>> implementations
>> weren't able to send data back at all to the original
>> caller.  To
>> encapsulate this, I made the map read only, by using the ?
>> extends syntax.
>>
>> What kind of modifications do you need to do? 
>> Auto-vivification kinda
>> stuff?
> 
> No, basic OFBiz kinda stuff.
> 
> <set field="var" value="Hello World!"/>
> 
> I need to set the var Map element to "Hello World!" The Map I'm being handed 
> is read-only.
> 
> The nexus is FlexibleMapAccessor. Most of the framework uses it, and its 
> purpose is to update a Map or a List. But it gets handed a read-only Map. I 
> just pass the read-only Map on to the UEL stuff, and then convert it when I 
> actually need to change something in it.

So that needs to be writable, then the call sites need to be updated.

Do multiple(many) java-based services call FMA?  Or are there just a
few places that do a mass proxy around the other systems?  I'm
thinking that maybe we should make this more explicit, documentation
that service implementations can modify their context, but any such
changes will not be propagated back to callers.


> 
> 
> 
>       

Reply via email to