--- On Sat, 1/30/10, David E Jones <d...@me.com> wrote:
> From: David E Jones <d...@me.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, 7:02 PM
> 
> On Jan 30, 2010, at 8:30 PM, Adrian Crum wrote:
> 
> > --- On Sat, 1/30/10, David E Jones <d...@me.com>
> wrote:
> >> From: David E Jones <d...@me.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:37 PM
> >> 
> >> On Jan 30, 2010, at 7:28 PM, Adam Heath wrote:
> >>> 
> >>> 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.
> >> 
> >> Maybe this is not the best way to look at it. The
> point is
> >> not that you can't change the context, it is just
> that any
> >> changes to the context are local to the service
> itself.
> >> 
> >> If I had the service engine to design again I'd
> consider
> >> having it be more like the screen widget with the
> >> hierarchical context, and with the context as the
> local
> >> variable space (for all services except those
> written in
> >> plain Java where you can't inject into the
> variable space on
> >> the stack (not that I know of anyway... maybe
> there is a way
> >> and that would be cool).
> > 
> > When I first got involved with OFBiz, I would write to
> the service context Map because I didn't know any better.
> Then when I got to know OFBiz better, I still wrote to the
> service context Map because I was lazy. Now I always copy
> the service context Map into a local Map if I want to change
> things.
> > 
> > The moral of the story is: developers shouldn't be
> allowed to write to the service context Map. If a service
> needs a Map for local storage, then it should create one.
> 
> That's kind of interesting.
> 
> What got me thinking is that the normal practice for Java
> service is to create a local variable for pretty much
> everything in the context anyway (ie like: String partyId =
> (String) context.get("partyId");), and there are things like
> that all over the place.
> 
> As far as not being to write to the context... why not?
> Sometimes it's handy to use the current context as the basis
> for calling another service. There are certainly other ways
> to go about that... but...

In those cases you can use ModelService to create a new Map for the new service 
based on the Map from the current service.

Even mini-lang has a set-service-fields element to do that.




Reply via email to