Raymond Feng wrote:
----- Original Message ----- From: "Jean-Sebastien Delfino"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, February 06, 2008 9:56 AM
Subject: Re: Bypassing unnecessary transforms by Tuscany databinding
framework
Raymond Feng wrote:
I was initially thinking about the interceptors. But I realized that
service binding providers usually don't add an interceptor to the
invocation chain. Instead, they register a listener to the binding
protocol layer to route the call into SCA. If the service provider
receives data from a transport and it knows the data won't be mutated
by reference, it should be able to express it to help the runtime to
bypass PBV.
Thanks,
Raymond
I was envisioning a simpler scheme, the main questions would be:
a) is the business data in a message a copy of user data or not?
b) is the piece of code getting the business data altering it?
We'd track that with:
1. a boolean in Message to cover (a)
2. a boolean on Interceptor to cover (b)
To be precise, flag (a) should tell if the business data in the message
is safe to be altered. Flag (b) should tell if the code will keep the
input business data untouched and if it's safe to have the output data
to be altered by others.
Yes, that's a better definition of (a) and (b).
That would provide enough info to decide whether to copy/transform the
data or not.
And we would let the interceptors, invokers or binding listeners drive
that copy/transform explicitly instead of having it auto-magically
called in the invocation chain, which seems more difficult to control.
I guess now the question is whether we need to have the generic PBV
interceptor to be inserted if a==false and
none of the interceptors/invokers claim it's PBV garaunteed (I still
don't know how we test accross the invokers in the invocation chain).
Interceptors are chained so here's a simple idea:
- an interceptor should consider the value of flag (b) on the next
interceptor (or whatever code it's calling) to respond to isB():
boolean isB() {
return isB && next.isB();
}
- as a user of the invocation chain you don't need to test across all
the interceptors, you just ask the isB() question to the interceptor at
the head of the chain.
--
Jean-Sebastien
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]