Re: The complete patch for TUSCANY-1341 is available

2007-07-03 Thread Simon Nash

Thanks to all who provided feedback.  I plan to go with approach "3"
for all the provider SPI additions.  So there will be new interfaces
ReferenceBindingProvider2 and ServiceBindingProvider2 that extend
ReferenceBindingProvider and ServiceBindingProvider respectively,
and all the new methods that I had previously addded to
ReferenceBindingProvider and ServiceBindingProvider will be part of
ReferenceBindingProvider2 and ServiceBindingProvider2 instead.

If anyone does not think this is the right approach, please speak up
now before I go further down this path.  Thanks.

  Simon

Venkata Krishnan wrote:


Hi,

I really like the approach mentioned under '3'.  While the SPIs might
undergo changes sometime, this is probably too early, especially now 
that we

have promised for its stability from Release 0.90.  Thats just about my
opinion.  Thanks

- Venkat

On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:



I'd like to get some other views on this before I spend a lot of
time reworking this patch.  Please see my comments inline below.

   Simon

ant elder wrote:

> On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:
>
>>
>> I am reconsidering the changes made in stage 2 of this patch, which
>> added two new methods to the Binding SPI interface.
>>
>> I made these changes for the reasons stated in
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
>> and
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19308.html
>> These methods allow bindings to be marked as either callback or
>> forward bindings.  This allows callback binding semantics to be
>> supported correctly with relatively little change to the core runtime.
>>
>> Unfortunately these is a flip side to these benefits.  Adding these
>> methods changes the current published stable Binding SPI, and
>> (probably worse) introduces "pollution" of the Binding SPI to carry
>> information that is there for the convenience of the core runtime,
>> rather than an intrinsic part of the binding semantics.
>>
>> The alternative is to keep the Binding SPI as it was, and make more
>> extensive changes in the core runtime to use the more correct version
>> of the model as proposed in
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
>>
>> I will look at the impact to the core runtime of the alternative
>> approach that keeps the Binding SPI unchanged and I will post my
>> findings back to this list.
>>
>> This discussion only affects the Binding SPI changes in stage 2 of
>> the patch.  It does not affect the provider SPI changes in stage 1
>> of the patch.
>>
>> I'd be interested in any comments on the above or on any other aspects
>> of this patch.
>
>
>
> It sounds good the binding SPI can remain unchanged, it also sounded
like
> from the other thread that it should be possible to avoid some of the
other
> SPI changes in "stage 1" as well which would be good.
>
I'm getting on quite well with reworking the code that currently depends
on the changes to the binding SPI.  There's one slightly ugly area, but I
think I'll be able to get around it without too much hackery.

The provider SPI changes can't be avoided, though they can be deferred.
In the short term this may seem attractive because it gets something
working with less new code.  However, the total amount of work will be
greater since my patch already contains all the necessary collateral
changes for code that's impacted by the provider SPI changes.  I would
have to do significant rework on the patch to remove these for now, then
repeat much of this work to recreate a smilar set of collateral changes
when we finally adopt these new SPIs.

> How about trying to get as much as this going with as few changes to 
the

> existing SPI as possible for now even if doing that requires some less
then
> perfect code in the runtime impl and axis2 binding, and then once we
have
> call backs and async working well with axis2 and ws-addressing and
ideally
> at least another extension or two then look at what the best way to
change
> the SPIs might be?
>
I think there's pretty much a straight trade-off between how many of
these SPI changes are deferred and the amount of temporary workaround
code that would be needed in the core to compensate for this.

Let's take the provider SPI changes one by one, in approximate order of
increasing difficulty for working around not having them.

1. Not including the change to remove the redundant isCallback parameter
from ReferenceBindingProvider.createInvoker() doesn't cause any
significant problems in the core.  The core can always pass the
meaningless extra parameter, and the providers can always ignore it.
This does incur the collateral rework costs that I mentioned above
for when we get around to cleaning this one up.

2. Not including the supportsAsyncOneWayInvocation() methods on
ReferenceBindingProvider and ServiceBindingProvider presents a bit
more of a challenge.  One possibility is to create a new mar

Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread Venkata Krishnan

Hi,

I really like the approach mentioned under '3'.  While the SPIs might
undergo changes sometime, this is probably too early, especially now that we
have promised for its stability from Release 0.90.  Thats just about my
opinion.  Thanks

- Venkat

On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:


I'd like to get some other views on this before I spend a lot of
time reworking this patch.  Please see my comments inline below.

   Simon

ant elder wrote:

> On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:
>
>>
>> I am reconsidering the changes made in stage 2 of this patch, which
>> added two new methods to the Binding SPI interface.
>>
>> I made these changes for the reasons stated in
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
>> and
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19308.html
>> These methods allow bindings to be marked as either callback or
>> forward bindings.  This allows callback binding semantics to be
>> supported correctly with relatively little change to the core runtime.
>>
>> Unfortunately these is a flip side to these benefits.  Adding these
>> methods changes the current published stable Binding SPI, and
>> (probably worse) introduces "pollution" of the Binding SPI to carry
>> information that is there for the convenience of the core runtime,
>> rather than an intrinsic part of the binding semantics.
>>
>> The alternative is to keep the Binding SPI as it was, and make more
>> extensive changes in the core runtime to use the more correct version
>> of the model as proposed in
>>   http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
>>
>> I will look at the impact to the core runtime of the alternative
>> approach that keeps the Binding SPI unchanged and I will post my
>> findings back to this list.
>>
>> This discussion only affects the Binding SPI changes in stage 2 of
>> the patch.  It does not affect the provider SPI changes in stage 1
>> of the patch.
>>
>> I'd be interested in any comments on the above or on any other aspects
>> of this patch.
>
>
>
> It sounds good the binding SPI can remain unchanged, it also sounded
like
> from the other thread that it should be possible to avoid some of the
other
> SPI changes in "stage 1" as well which would be good.
>
I'm getting on quite well with reworking the code that currently depends
on the changes to the binding SPI.  There's one slightly ugly area, but I
think I'll be able to get around it without too much hackery.

The provider SPI changes can't be avoided, though they can be deferred.
In the short term this may seem attractive because it gets something
working with less new code.  However, the total amount of work will be
greater since my patch already contains all the necessary collateral
changes for code that's impacted by the provider SPI changes.  I would
have to do significant rework on the patch to remove these for now, then
repeat much of this work to recreate a smilar set of collateral changes
when we finally adopt these new SPIs.

> How about trying to get as much as this going with as few changes to the
> existing SPI as possible for now even if doing that requires some less
then
> perfect code in the runtime impl and axis2 binding, and then once we
have
> call backs and async working well with axis2 and ws-addressing and
ideally
> at least another extension or two then look at what the best way to
change
> the SPIs might be?
>
I think there's pretty much a straight trade-off between how many of
these SPI changes are deferred and the amount of temporary workaround
code that would be needed in the core to compensate for this.

Let's take the provider SPI changes one by one, in approximate order of
increasing difficulty for working around not having them.

1. Not including the change to remove the redundant isCallback parameter
from ReferenceBindingProvider.createInvoker() doesn't cause any
significant problems in the core.  The core can always pass the
meaningless extra parameter, and the providers can always ignore it.
This does incur the collateral rework costs that I mentioned above
for when we get around to cleaning this one up.

2. Not including the supportsAsyncOneWayInvocation() methods on
ReferenceBindingProvider and ServiceBindingProvider presents a bit
more of a challenge.  One possibility is to create a new marker
interface that can be implemented by providers that support
asynchronous one-way invocation.  The core could test for this marker
interface and omit the thread switch if the provider implements it.
I'm not really convinced that this is cleaner (it's probably a bit
more tricky to explain than just having methods for this as we do
everywhere else in the SPI), but it would get around the need for a
breaking SPI change now.  What do people think about this approach?

3. Not including the createCallbackInvoker() method on
ServiceBindingProvider.
seems at first sight to make it im

Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread Mike Edwards

Folks,

I tend to favour this more conservative approach.  There may be a 
problem longer term in explaining the interfaces to writers of new 
binding types and implementation types, but the mess caused to existing 
implementation types and existing binding types by breaking changes in 
the SPI is not worth it, based on my experiences.


My 2 cents,

Mike.

ant elder wrote:

On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:



1. Not including the change to remove the redundant isCallback parameter


from ReferenceBindingProvider.createInvoker() doesn't cause any
significant problems in the core.  The core can always pass the
meaningless extra parameter, and the providers can always ignore it.
This does incur the collateral rework costs that I mentioned above
for when we get around to cleaning this one up.




+1, this sounds a good approach to me

2. Not including the supportsAsyncOneWayInvocation() methods on


ReferenceBindingProvider and ServiceBindingProvider presents a bit
more of a challenge.  One possibility is to create a new marker
interface that can be implemented by providers that support
asynchronous one-way invocation.  The core could test for this marker
interface and omit the thread switch if the provider implements it.
I'm not really convinced that this is cleaner (it's probably a bit
more tricky to explain than just having methods for this as we do
everywhere else in the SPI), but it would get around the need for a
breaking SPI change now.  What do people think about this approach?




+1, I like it a lot

3. Not including the createCallbackInvoker() method on


ServiceBindingProvider.
seems at first sight to make it impossible for callbacks to work.
But there is (as always with software) another way.  We could
introduce
a new interface ServiceBindingCallbackProvider that extends
ServiceBindingProvider and adds the createCallbackInvoker() method.
Providers that support callbacks would implement this interface,
and providers that don't support callbacks could continue to
implement ServiceBindingProvider.  Again, this seems slightly tricky
but it would work and it wouldn't need a breaking SPI change.




+1 again

Now I'll circle back to 1 again.  The proposal for 3 has inspired me


to imagine a new interface that just contains the new method signature
for createInvoker().  New providers can implement this interface and
the new signature, and old providers can continue with the old signature,
with the core being smart enough to understand both forms and call the
signature that is available.




Another +1



My opinion is that the long term solution is likely


to be the one I have currently implemented, so the work to change other
affected code will need to be done anyway at some point.




I also agree the end result is likely to be similar but IMHO the 
benefits of

keeping things separate and stable for the time being far out way the extra
work of at some point cleaning up all the SPIs (which we're going to 
have to

do anyway).

  ...ant



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



Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread ant elder

On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:



1. Not including the change to remove the redundant isCallback parameter

from ReferenceBindingProvider.createInvoker() doesn't cause any
significant problems in the core.  The core can always pass the
meaningless extra parameter, and the providers can always ignore it.
This does incur the collateral rework costs that I mentioned above
for when we get around to cleaning this one up.



+1, this sounds a good approach to me

2. Not including the supportsAsyncOneWayInvocation() methods on

ReferenceBindingProvider and ServiceBindingProvider presents a bit
more of a challenge.  One possibility is to create a new marker
interface that can be implemented by providers that support
asynchronous one-way invocation.  The core could test for this marker
interface and omit the thread switch if the provider implements it.
I'm not really convinced that this is cleaner (it's probably a bit
more tricky to explain than just having methods for this as we do
everywhere else in the SPI), but it would get around the need for a
breaking SPI change now.  What do people think about this approach?



+1, I like it a lot

3. Not including the createCallbackInvoker() method on

ServiceBindingProvider.
seems at first sight to make it impossible for callbacks to work.
But there is (as always with software) another way.  We could
introduce
a new interface ServiceBindingCallbackProvider that extends
ServiceBindingProvider and adds the createCallbackInvoker() method.
Providers that support callbacks would implement this interface,
and providers that don't support callbacks could continue to
implement ServiceBindingProvider.  Again, this seems slightly tricky
but it would work and it wouldn't need a breaking SPI change.



+1 again

Now I'll circle back to 1 again.  The proposal for 3 has inspired me

to imagine a new interface that just contains the new method signature
for createInvoker().  New providers can implement this interface and
the new signature, and old providers can continue with the old signature,
with the core being smart enough to understand both forms and call the
signature that is available.



Another +1



My opinion is that the long term solution is likely

to be the one I have currently implemented, so the work to change other
affected code will need to be done anyway at some point.



I also agree the end result is likely to be similar but IMHO the benefits of
keeping things separate and stable for the time being far out way the extra
work of at some point cleaning up all the SPIs (which we're going to have to
do anyway).

  ...ant


Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread Simon Nash

I'd like to get some other views on this before I spend a lot of
time reworking this patch.  Please see my comments inline below.

  Simon

ant elder wrote:


On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:



I am reconsidering the changes made in stage 2 of this patch, which
added two new methods to the Binding SPI interface.

I made these changes for the reasons stated in
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
and
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19308.html
These methods allow bindings to be marked as either callback or
forward bindings.  This allows callback binding semantics to be
supported correctly with relatively little change to the core runtime.

Unfortunately these is a flip side to these benefits.  Adding these
methods changes the current published stable Binding SPI, and
(probably worse) introduces "pollution" of the Binding SPI to carry
information that is there for the convenience of the core runtime,
rather than an intrinsic part of the binding semantics.

The alternative is to keep the Binding SPI as it was, and make more
extensive changes in the core runtime to use the more correct version
of the model as proposed in
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html

I will look at the impact to the core runtime of the alternative
approach that keeps the Binding SPI unchanged and I will post my
findings back to this list.

This discussion only affects the Binding SPI changes in stage 2 of
the patch.  It does not affect the provider SPI changes in stage 1
of the patch.

I'd be interested in any comments on the above or on any other aspects
of this patch.




It sounds good the binding SPI can remain unchanged, it also sounded like
from the other thread that it should be possible to avoid some of the other
SPI changes in "stage 1" as well which would be good.


I'm getting on quite well with reworking the code that currently depends
on the changes to the binding SPI.  There's one slightly ugly area, but I
think I'll be able to get around it without too much hackery.

The provider SPI changes can't be avoided, though they can be deferred.
In the short term this may seem attractive because it gets something
working with less new code.  However, the total amount of work will be
greater since my patch already contains all the necessary collateral
changes for code that's impacted by the provider SPI changes.  I would
have to do significant rework on the patch to remove these for now, then
repeat much of this work to recreate a smilar set of collateral changes
when we finally adopt these new SPIs.


How about trying to get as much as this going with as few changes to the
existing SPI as possible for now even if doing that requires some less then
perfect code in the runtime impl and axis2 binding, and then once we have
call backs and async working well with axis2 and ws-addressing and ideally
at least another extension or two then look at what the best way to change
the SPIs might be?


I think there's pretty much a straight trade-off between how many of
these SPI changes are deferred and the amount of temporary workaround
code that would be needed in the core to compensate for this.

Let's take the provider SPI changes one by one, in approximate order of
increasing difficulty for working around not having them.

1. Not including the change to remove the redundant isCallback parameter
   from ReferenceBindingProvider.createInvoker() doesn't cause any
   significant problems in the core.  The core can always pass the
   meaningless extra parameter, and the providers can always ignore it.
   This does incur the collateral rework costs that I mentioned above
   for when we get around to cleaning this one up.

2. Not including the supportsAsyncOneWayInvocation() methods on
   ReferenceBindingProvider and ServiceBindingProvider presents a bit
   more of a challenge.  One possibility is to create a new marker
   interface that can be implemented by providers that support
   asynchronous one-way invocation.  The core could test for this marker
   interface and omit the thread switch if the provider implements it.
   I'm not really convinced that this is cleaner (it's probably a bit
   more tricky to explain than just having methods for this as we do
   everywhere else in the SPI), but it would get around the need for a
   breaking SPI change now.  What do people think about this approach?

3. Not including the createCallbackInvoker() method on ServiceBindingProvider.
   seems at first sight to make it impossible for callbacks to work.
   But there is (as always with software) another way.  We could introduce
   a new interface ServiceBindingCallbackProvider that extends
   ServiceBindingProvider and adds the createCallbackInvoker() method.
   Providers that support callbacks would implement this interface,
   and providers that don't support callbacks could continue to
   implement ServiceBindingProvider.  Again, this seems sl

Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread ant elder

On 7/2/07, Simon Nash <[EMAIL PROTECTED]> wrote:


I am reconsidering the changes made in stage 2 of this patch, which
added two new methods to the Binding SPI interface.

I made these changes for the reasons stated in
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
and
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19308.html
These methods allow bindings to be marked as either callback or
forward bindings.  This allows callback binding semantics to be
supported correctly with relatively little change to the core runtime.

Unfortunately these is a flip side to these benefits.  Adding these
methods changes the current published stable Binding SPI, and
(probably worse) introduces "pollution" of the Binding SPI to carry
information that is there for the convenience of the core runtime,
rather than an intrinsic part of the binding semantics.

The alternative is to keep the Binding SPI as it was, and make more
extensive changes in the core runtime to use the more correct version
of the model as proposed in
  http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html

I will look at the impact to the core runtime of the alternative
approach that keeps the Binding SPI unchanged and I will post my
findings back to this list.

This discussion only affects the Binding SPI changes in stage 2 of
the patch.  It does not affect the provider SPI changes in stage 1
of the patch.

I'd be interested in any comments on the above or on any other aspects
of this patch.



It sounds good the binding SPI can remain unchanged, it also sounded like
from the other thread that it should be possible to avoid some of the other
SPI changes in "stage 1" as well which would be good.

How about trying to get as much as this going with as few changes to the
existing SPI as possible for now even if doing that requires some less then
perfect code in the runtime impl and axis2 binding, and then once we have
call backs and async working well with axis2 and ws-addressing and ideally
at least another extension or two then look at what the best way to change
the SPIs might be?

There's a few other unrelated changes we probably need to do in the  SPI as
well, maybe we can save them all up and then have a single separate release
specially for all these breaking changes and deprecate things so its really
clear how/what/why things changed.

  ...ant


Re: The complete patch for TUSCANY-1341 is available

2007-07-02 Thread Simon Nash

I am reconsidering the changes made in stage 2 of this patch, which
added two new methods to the Binding SPI interface.

I made these changes for the reasons stated in
 http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html
and
 http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19308.html
These methods allow bindings to be marked as either callback or
forward bindings.  This allows callback binding semantics to be
supported correctly with relatively little change to the core runtime.

Unfortunately these is a flip side to these benefits.  Adding these
methods changes the current published stable Binding SPI, and
(probably worse) introduces "pollution" of the Binding SPI to carry
information that is there for the convenience of the core runtime,
rather than an intrinsic part of the binding semantics.

The alternative is to keep the Binding SPI as it was, and make more
extensive changes in the core runtime to use the more correct version
of the model as proposed in
 http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg19305.html

I will look at the impact to the core runtime of the alternative
approach that keeps the Binding SPI unchanged and I will post my
findings back to this list.

This discussion only affects the Binding SPI changes in stage 2 of
the patch.  It does not affect the provider SPI changes in stage 1
of the patch.

I'd be interested in any comments on the above or on any other aspects
of this patch.

  Simon

Simon Nash wrote:

Please review and apply the patch for TUSCANY-1341 which I have
attached to the JIRA in 7 parts as follows.

Stages 1, 2 and 3 contain new SPIs and bug fixes that are needed
to support callbacks across bindings.  They do not have cross-
dependencies and can be applied in any order.

Stage 4 depends on the previous stages and provides core runtime
enablement for the new callback functionality.

Stage 5 depends on the previous stages and provides callback support
in the Web Service binding.

Stage 6 provides a new sample to illustrate this capability.

Stage 7 makes this new sample part of the build.

See my comments in the JIRA for the above patches for more details
of what they contain.

  Simon




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



The complete patch for TUSCANY-1341 is available

2007-07-01 Thread Simon Nash

Please review and apply the patch for TUSCANY-1341 which I have
attached to the JIRA in 7 parts as follows.

Stages 1, 2 and 3 contain new SPIs and bug fixes that are needed
to support callbacks across bindings.  They do not have cross-
dependencies and can be applied in any order.

Stage 4 depends on the previous stages and provides core runtime
enablement for the new callback functionality.

Stage 5 depends on the previous stages and provides callback support
in the Web Service binding.

Stage 6 provides a new sample to illustrate this capability.

Stage 7 makes this new sample part of the build.

See my comments in the JIRA for the above patches for more details
of what they contain.

  Simon



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