I finished the changes this evening... Ignacio, you should be good to go with your changes.

Jim

On Sep 28, 2006, at 5:07 PM, Jim Marino wrote:

Ignacio, Greg, Dave, Jeremy, and myself had a discussion today about how thread dispatching for non blocking calls should work. We identified two basic use cases:

1. Component-to-Component (c2c)
2. Component-to-Reference (c2r)

In each case there is a per-operation interceptor chain associated with the source and target, outbound and inbound chains respectively. In the current architecture, for c2c non-blocking invocations, a thread is spawned in the target invoker after the message is flowed through both interceptor stacks. This means that both the inbound and outbound chains are called on the thread where the invocation originated. For c2r non-blocking invocations, it is up to the binding to perform whatever dispatch is required, so no thread is spawned by the reference target invoker.

Greg and Dave have brought up some good use cases and we came up with what we think is a better approach. For c2c non-blocking invocations, the target invoker will no longer be responsible for spawning threads. Instead, a bridging interceptor will be placed between the outbound and inbound chains that will perform the thread switch. Interceptors in the outbound chain will run on the same thread as the original invocation. Outbound interceptors may be responsible for placing context in a message (e.g. security, transaction ids). The non-blocking bridging interceptor will spawn a thread and continue the invocation on the target inbound chain.

For c2r non-blocking invocations, a thread will not be spawned as it is up to the binding to decide what needs to be done (it may rely on the binding api to do this if it is non-blocking). This means that both interceptor chains will be run on the same thread.

It will be up to the connector to make the determination of which type of bridging (blocking or non-blocking) to interpose as the outbound and inbound wires are fused. We are going to make these changes incrementally. I'm going to change the wiring infrastructure to support this, which shouldn't impact other subsystems or extensions except for async target invokers (they will just need to dispatch synchronously unless they are a special- case binding). We are then going to look at whether we need an async target invoker at all, but do this once we complete the first work item.

Jim



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to