On Wed, Mar 3, 2010 at 4:18 PM, ant elder <[email protected]> wrote:
> On Wed, Mar 3, 2010 at 12:35 PM, Raymond Feng <[email protected]> wrote:
>> Hi,
>>
>> I have checked in the changes to allow us to map binding.sca to any of the
>> bindings by configuration.
>>
>> It turned out that the trick is as simple as follows:
>>
>> * Add a new utility SPI
>> org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper which contains
>> the following methods to map Endpoint or EndpointReference with binding.sca
>> to other bindings:
>>
>>   public RuntimeEndpoint map(RuntimeEndpoint endpoint);
>>   public RuntimeEndpointReference map(RuntimeEndpointReference
>> endpointReference);
>>   boolean isRemotable(); // Control if an binding.sca endpoint with
>> remotable interface should be published to the remote protocol
>>
>> * Provide a default implementation
>> org.apache.tuscany.sca.binding.sca.provider.DefaultSCABindingMapper
>>  * Receive the mapped binding QName via the
>> org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding
>> attribute or system property. By default, it's mapped to sca:binding.ws.
>>  * Create an instance of binding and copy all attributes from binding.sca
>> into the mapped binding (Simply speaking, <binding.sca/> is pretty much like
>> <binding.xyz/>)
>>  * Map endpoint and endpoint reference by replacing the SCABinding with the
>> mapped binding instance
>>  * Invoke the binding builder to build the mapped binding
>>  * Create delegating SCA reference/service provider that delegates the calls
>> to the mapped binding provider
>>
>> Now you can plug in binding.sca using one of the following ways:
>> * Set the binding type via
>> org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding
>> system property
>> * Set the binding type via
>> org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper.mappedBinding
>> attribute from the NodeFactory
>> * Add a new
>> META-INF/org.apache.tuscany.sca.binding.sca.provider.SCABindingMapper with
>> the mappedBinding attribute and higher ranking (this also allows a
>> customized SCABindingMapper to replace the default one from Tuscany).
>>
>> With this improvement, we can now remove the following modules (merging the
>> tests into itest) as well as DistributedSCABinding model.
>>
>> tuscany-binding-sca-axis2-runtime
>> tuscany-binding-sca-runtime-rmi
>> tuscany-sca-client-rmi
>>
>> If there is no objection, I'll clean them up as the next step.
>>
>> [1] http://svn.apache.org/viewvc?rev=918261&view=rev
>>
>
> Without having looked in detail that all sounds good to me. One thing
> that would be nice would be instead of having only the WS binding be
> the default would be to check that is available first and if not try
> something else like the RMI binding, so then it would still work
> automatically with no extra config needed even if the WS binding isn't
> available on the classpath but the RMI binding is (which makes simple
> demos easier as RMI has far fewer dependencies).
>
>   ...ant
>

I've updated this to automatically try using binding.rmi if binding.ws
isn't available.

It would also be nice to be able to set the default binding from a
NodeFactory config property instead of a System property so I'll look
at doing that too.

   ...ant

Reply via email to