[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: JAVA-6: Proposed direction
1. Extend the definition of @AllowsPassByReference to make it apply to a client-side implementation class or an individual client reference. (This includes callback references.) Putting it on an implementation class means that all references within this class have AllowsPassByReference semantics. For a reference, AllowsPassByReference semantics are as follows: a. The client code using the reference will not modify passed parameters in a separate thread. b. The client code using the reference will not modify passed parameters in a callback. c. The client code using the reference will not modify parameters passed on one-way operations. d. The client code using the reference will not modify returned result objects. 2. Proxies injected into references that have AllowsPassbyReference semantics (as defined in point 1 above) have AllowsPassByReference semantics. Proxies injected into references that do not have AllowsPassbyReference semantics (as defined in point 1 above) do not have AllowsPassByReference semantics. 3. The SCA runtime MAY optimize a service call by passing parameters by reference if and only if both the proxy making the call and the implementation method being called have AllowsPassByReference semantics. 4. Add a new method boolean getAllowsPassByReference(); to the ServiceReference interface. The allowsPassByReference value of a service reference can be queried using this method. 5. Service references injected into references that have AllowsPassbyReference semantics (as defined in point 1 above) have an allowsPassByReference value of true. 6. Proxies obtained by calling ServiceReference.getService() have AllowsPassByReference semantics if and only if the service reference has an allowsPassByReference value of true. 7. Proxies obtained by calling ComponentContext.getService() or ComponentContext.getServices() have AllowsPassByReference semantics if and only if the named reference has AllowsPassByReference semantics. 8. Proxies obtained by calling RequestContext.getCallback() have AllowsPassByReference semantics if and only if the service implementation method has AllowsPassByReference semantics. 9. Proxies created by any means other than those stated in points 2, 6, 7 and 8 above do not have AllowsPassByReference semantics. 10. Service references obtained by casting proxies have an allowsPassByReference value of true if and only if the proxy has AllowsPassbyReference semantics. 11. Service references obtained by calling ComponentContext.getServiceReference() or ComponentContext.getServiceReferences() have AllowsPassByReference semantics if and only if the named reference has AllowsPassByReference semantics. 12. Service references obtained by calling RequestContext.getCallbackReference() have AllowsPassByReference semantics if and only if the service implementation method has AllowsPassByReference semantics. 13. Service references created by any means other than those stated in points 5, 10, 11 and 12 above (including Java deserialization or being passed across a remotable interface) have an allowsPassByReference value of false. Simon
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]