>>> ==============================================================================
>>>
>>> ---
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>>> (original)
>>> +++
>>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>>> Thu Nov 19 17:26:03 2009
>>> @@ -1158,7 +1158,7 @@
>>>         return serviceResult;
>>>     }
>>>
>>> -    public static Map<String, Object>
>>> createInvoicesFromShipments(DispatchContext dctx, Map context) {
>>> +    public static Map<String, Object>
>>> createInvoicesFromShipments(DispatchContext dctx, Map<String, Object>
>>> context) {
>>>         Delegator delegator = dctx.getDelegator();
>>>         LocalDispatcher dispatcher = dctx.getDispatcher();
>>>         List<String> shipmentIds =
>>> UtilGenerics.checkList(context.get("shipmentIds"));
>>>
>>
>> Nope, this is wrong.
>>
>> Map<String, ? extends Object> context.
>>
>> THIS IS A BUG.  PLEASE REVERT UNTIL IT IS FIXED.
>>
>> The service engine *owns* the incoming context map.  Called services
>> are not allowed to change it *at all*.
>>
>> There are already plenty of existing examples.
>>
>> When I did similiar things to framework, I discovered several services
>> that modified the incoming context.  I then had to change their code
>> to deal with that problem.  This patch needs to have the same thing
>> done to it.
> 
> Hi Adam,
> 
> Could you explain a bit more?  When I look at the StandardJavaEngine
> class the serviceInvoker method is specifically passing a Map<String,
> Object> for the context.

serviceInvoker adds/removes things to this context, yes, so it has to
have that generics markup.  However, the things it calls *must* keep
it read-only, so that when several services in a chain are
called(think secas, service groups), once service can't affect another
in the set.

Reply via email to