Hi,

I added the support for AllowsByReference for the references as well as the 
implementation classes/methods based on the spec. Now I have some questions for 
the SCA spec (Ideally I should bring these questions to the SCA spec group but 
I don't have OASIS membership).

The following is quoted from the SCA spec:

The @AllowsPassByReference annotation allows service method implementations and 
client references to be marked as “allows pass by reference” to indicate that 
they use input parameters, return values and exceptions in a manner that allows 
the SCA runtime to avoid the cost of copying mutable objects when a remotable 
service is called locally within the same JVM.

230 2.3.4 Using “allows pass by reference” to Optimize Remotable Calls
231 The SCA runtime MAY use by-reference semantics when passing input 
parameters, return values or
232 exceptions on calls to remotable services within the same JVM if both the 
service method implementation
233 and the service proxy used by the client are marked “allows pass by 
reference”. [JCA20009]
234 The SCA runtime MUST use by-value semantics when passing input parameters, 
return values and
235 exceptions on calls to remotable services within the same JVM if the 
service method implementation is
236 not marked “allows pass by reference” or the service proxy used by the 
client is not marked “allows pass
237 by reference”. [JCA20010]

IIUC, now we need to mark both the reference AND service method implementation 
to "AllowsPassByReference" so that the runtime can optimize the in-vm calls 
over remotable interfaces using PBR. This seems to be too restrictive for the 
following use cases:

1. If the client component implementation knows that for a given reference, the 
operations are safe to PBR because the client side neither modifies the input 
parameters/return value/exceptions, nor does it care if the these data are 
modified by the service side. 
2. If the server component implementation knows that for a given service 
method, the operation is safe to PBR because the server side neither modifies 
the input parameters/return value/exceptions, nor does it care if the these 
data are modified by the client side. 

For case 1 and 2, the PBR can be enabled independently without knowing the 
counterpart. Does it make sense for SCA to allow PBR if either reference OR 
service method implementation is marked "AllowsPassByReference"?

Thanks,
Raymond
________________________________________________________________ 
Raymond Feng
rf...@apache.org
Apache Tuscany PMC member and committer: tuscany.apache.org
Co-author of Tuscany SCA In Action book: www.tuscanyinaction.com
Personal Web Site: www.enjoyjava.com
________________________________________________________________

Reply via email to