Hi,
To my understanding, bindings can apply to services and references of a
composite. A binding can be used for:
1) Both services and references
2) References only
3) Services only
In some cases, a binding may take different set of metadata depending on
whether it's used by a service or a reference. For example, for a TCP/IP
binding, the reference needs to know the host name and port number of the
target TCP/IP server. But if you wants to publish your component as a service
over TCP/IP, maybe only the port number (hostname is always localhost) is good
enough.
<reference>
<tcpip:binding.tcpip host="a.com" port="8888"/>
</reference>
<service>
<tcpip:binding.tcpip port="8888"/>
</service>
What's the best practice here to model TCP/IP binding? I can imagine three ways:
1) One TCP/IP binding to contain all properties required for both services and
references
2) One base TCP/IP binding and two sub types: TCP/IP reference binding and
TCP/IP service binding
3) Two different TCP/IP bindings, one for references and one for services
What's the implication on the BindingBuilder SPI if the binding is asymetric
for references and services? I assume one of the following build() methods will
be NOP if a given binding can only be used by either references or services.
public interface BindingBuilder<B extends Binding> {
SCAObject build(CompositeComponent parent,
BoundServiceDefinition<B> boundServiceDefinition,
DeploymentContext deploymentContext);
SCAObject build(CompositeComponent parent,
BoundReferenceDefinition<B> boundReferenceDefinition,
DeploymentContext deploymentContext);
}
Please clarify if I misunderstand something here.
Thanks,
Raymond