I had thought that Eoghan's original objection was that a Conduit, implied the use of a Client when he needed Decoupled Endpoints, because Dan want's the Client to manage Decoupled Endpoints, and Eoghan wants the Conduit to handle them.

Maybe we need just another abstraction in the middle to satisfy both parties?

It seems to me that a Conduit is merely a "one-way" "client" side way of talking to an Endpoint. Somethings need to be configured on it, so that it does certain things according to protocol, and handles responses(if any).

There might be another entity that handles two-way communication on which you can set destinations, decoupled endpoints, that use a conduit (or something else?) in the client-to-server direction. This entity would be better suited to following security/assurance policies regarding two-way communication. Like using a "secure" conduit, with a "secure" decoupled endpoint.

A Client can use that entity in a specific default way. And Eoghan can use this entity without specifying a Client, but still have the flexibility he desires, and the user can still have some opportunity to configure/check that things are on the up'n'up.

Does that seem like a plausible approach?

Cheers,
-Polar

Dan Diephouse wrote:


Just because you see this as the way to solve your use case doesn't
necessarily mean it is the way we should support. I'm certainly want to
support this scenario and I'm sure we will come to some agreement about how
to best support it. BUT, there are other goals as well though - like
simplicity and coherency. If we've already got mechanisms for this type of
thing, why go inventing others?

Do you agree that it is possible to delay the addition of Binding
interceptors to the chain inside the Client? Would it maybe be better to
delay this decision until later in the chain? This would avoid the
introduction of a flag mechanism.

If so, then why don't we just allow users to select a different Binding up to POST_LOGICAL phase? For instance, the ObjectBinding interceptors could be added if that person wanted to do a local invocation. They could also select
a new Conduit up to this point as well. If the user doesn't select a
different binding or conduit, then we'll just use the default ones.

In addition to allowing your use case of allowing the interceptor to
control the binding, this makes the URI based approach much easier as well.



One last addition, because I didn't address getting the part about getting
the Conduit up front.

Let me sidestep first to your questions of why your proposal is getting so
much scrutiny - well there are conflated discussions of whether or not
Conduits are needed for in process dispatching and whether or not we should adopt my proposed client changes. If we say that a Conduit is optional for
invocations, then that has big ramifications in those areas.

If all we're trying to decide on is creating a way to avoid initializing a
Conduit by default, then I only have two questions before adopting your
approach:
- Why should we have a ConduitInitiatorStrategy as opposed to just setting a
flag on the Conduit? If someone sets the flag to false the
MessageSenderInterceptor can always fall back and init a Conduit later using
the EndpointInfo.
- Is your only objection that we may not always need the specific Conduit
that is inited? And that this may consume resources? Or is the motivation
for this approach that you just don't want to use a Conduit at all. It seems
like it is mostly the later, which is what all my hubbub is about.

- Dan


Reply via email to