Comments inline, thanks for some of the clarifications...
On Jul 5, 2006, at 12:43 PM, Jean-Sebastien Delfino wrote:
Jim Marino wrote:
On Jul 3, 2006, at 5:34 AM, ant elder wrote:
One of the big reasons for me is summed up well in Sebastien's
proposal:
"This will get our community members involved in building the
runtime
together and will lead to a wider knowledge base that makes it
possible to
quickly implement new functionality in the future. It will also
build a
community knowledge base that is ready to help new community
members come on
board quickly."
I struggle with understanding the what and why of parts of the
sandbox code
and hope bringing small bits over one step at a time will help
with this.
Could you outline specifically what you don't understand. Perhaps
we could do another code walkthrough like we did about a month ago?
Why don't you like this approach? Sure it may take a bit more
time but if in
the long run we end up with more people understanding the runtime
that seems
like time well spent even if we end up with most of the trunk
being just
whats in the sandbox today.
The key point is I like Jeremy's approach better. The thought of
merging M1 with the sandbox code (Sebastien's proposal) doesn't
seem to fit based on my technical knowledge of both code bases.
More importantly, Jeremy's approach strike me as better. Since I
have outlined my reasoning in previous posts (not just technical)
why I think it is better,I won't repeat them here, as it will just
confuse the ongoing threads.
My proposal is not to merge M1 and the core2 sandbox. I am
proposing to start a new fresh code stream and build the runtime
through baby steps. We may be able to reuse some pieces of existing
code, but more important is to engage our community in this
exercise and integrate the new ideas that will emerge from this.
Here's an example where I'm struggling with both M1 and the core2
sandbox and thinking that we can do better if we start with a new
fresh stream: our (recursive) assembly metadata model.
- M1 does not implement the recursive composition model and would
require significant changes to support it. Core2 is an attempt to
implement it but I'm not sure it's quite right, and also think that
it can be simplified.
It may be able to use a bit of simplification, but why is that an
argument to start over? Why not have the community leverage and
refactor it? That would seem to be much more inclusive since it would
allow a lot of the existing initiatives to proceed and be used to
help drive the simplification.
- M1 used Lists to represent relationships, Core2 uses Maps, I
think M1 was better since it allowed to keep the order in the
relationships.
Some specific reasons would be good here. Also, I hardly think this
is a reason to start over.
- Core2 only defines implementation classes for the model, I think
we should have interfaces + default implementation classes instead,
like we had in M1, to allow for alternate implementations of the
model.
The model contains no implementation behavior, it's just a set of
dumb data objects, so interfaces seem superfluous. If you really
wanted to override setter/getter behavior (perhaps for notification,
although I don't understand why one would do that in a runtime as
opposed to tooling) the classes can always be subclassed. Regarding
alternative implementations of the model, what use cases do you have
in mind? The base SCA model shouldn't change that much (it's in the
specification) so I imagine most people will just use the loaders
that come with Tuscany do load the non-extension parts. And when the
spec model does change, writing StAX loaders is dead trivial and well
understood by Java developers (StAX is being included in the JDK).
For extensions, configuration, etc., the framework Jeremy created
supports a pluggable databinding mechanism so SDO, JAXB, XStream,
etc. can *all* be used to load extensions.
Again, though, the fact that the model does not use interfaces is not
a reason to jettison the substantial amount of capability already in it.
- Over usage of Java Generics breaks flexibility in some cases, for
example Component<I extends Implementation> will force you to
recreate an instance of Component to swap its implementation with
an implementation of a different type (and lose all the wires going
in/out of the component).
Not at runtime. This will work fine. Could you outline the specific
use-case you have in mind?
- Core2 defines ReferenceDefinitions (without bindings) and
BoundReferenceDefinitions (with bindings). IMO there are Reference
types and Reference instances and both can have bindings.
or Reference.
Great. Why can't we work on a "proposal"/modification to extend/
change core2 and see what it looks like together?
- I think that Remotable should be on Interface and not Service.
Service can be on both I believe. Unfortunately, annotations cannot
be restricted to interfaces in Java, though.
- Scope should be defined in the Java component implementation,
separate from the core model.
No, scopes are a general and very useful concept across
implementation types, e.g. I may want to have a Groovy script that is
conversational, bound to a session or module scoped. In the spec
group, we also decided to keep a general concept of scopes and leave
the specifics to individual language bindings. That's kind of what we
have in core2 today. I say "kind of" since our intent is to provide a
fully extensible set of scope containers. The one issue we are having
that needs fixing is Scope is an Enum and those can't be extended in
Java, so we need to look for an alternative.
If you have some thoughts on how to solve this issue, I'd be
interested in talking about them.
- Java and WSDL interfaces should be defined separate from the core
model, we need to support multiple interface definition languages
supported by plugins, not in the core.
Yep that's been brought up and a good way to engage. Jeremy and Ant
had some ideas on this so perhaps the three of you could work
together on that?
- Implementation should extend ComponentType IMO instead of
pointing to it, and we may even be able to simplify and just remove
Implementation. Also I am not sure why we need to distinguish
between AtomicImplementation and CompositeImplementation.
All great feedback for improving core2. Jeremy had some reasons for
this so I'll let him speak up.
- Support for Composite Includes is missing, this is a significant
part of the recursive composition model (half of it, one of the two
ways to nest composites).
Yes, because those were a recent addition to the spec. Again, this
would be a fantastic way to add value to core2. Can you help?
This list is not exhaustive... Another idea would be to externalize
support for Composites in a separate plugin not part of the core
service model (since there may be other ways to compose services in
addition to an SCA composite, with Spring or other similar
programming models), I'd like to know what people think about that.
Yes we have a specialized Spring composite type. We could entertain
making composite a separate implementation type, although I think
that may blow the complexity of the core through the proverbial roof.
Let's try it though. Maybe the best way to do this is make a copy of
core2 and start moving packages around and set what happens? My one
recommendation on this would be do first look at separating API from
SPI per Jeremy's suggestion posted in a previous email.
I just checked in sandbox/sebastien/m2-design/model.spi a set of
new interfaces. This is just an initial strawman to trigger a
constructive discussion and ideas on how to best represent the
recursive model. I also need help to define a scenario (not unit
test cases, but an end to end sample application) to help put the
recursive composition model in perspective and make sure we all
understand it the same way.
Comments, feedback and help are welcome...
Great, why don't we compare that model and try and see what happens
when we fit it into core2? Could you summarize the main differences?
To summarize, I think all of the issues you laid out are a reason to
engage and start from core2, not afresh. By doing so, I'm sure your
suggestions will lead to substantial improvements in what we have
today and help the broader community implement things they are
interested in.
Jim
So, to turn it around a bit, as I've already outlined some of my
reasons for liking Jeremy's approach more, do you have additional
reasons other than you are having difficulty understanding the
sandbox code and your feeling it will be a worthwhile exercise in
knowledge sharing? Regarding the later, I think it's better (and
more inclusive) to make a concerted effort to modularize and bring
people into the sandbox code as that will allow all of the ongoing
initiatives (particularly the ones showing Tuscany value add) to
continue alongside the knowledge transfer.
Regarding the former, could you outline specifically what you are
having difficulty following in the sandbox code so I can try and
address it either through explanation or simplification of the code?
...ant
On 7/3/06, Jim Marino <[EMAIL PROTECTED]> wrote:
Why would we try this approach as opposed to the one Jeremy
proposed,
i.e. moving what is already in sandbox to a branch or even trunk?
Since there are a number of initiatives people are already
working on
in the sandbox codebase (e.g. Spring support, deployment,
conversations, data binding, OSGi support, support for new Java C&I
annotations, support for pluggable annotations) it is seems that
making improvements to that according to scenarios people are
interested in will be a nice way to move things forward
involving as
many as possible.
Jim
On Jul 3, 2006, at 4:45 AM, ant elder wrote:
> On 6/30/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
> <snip/>
>
> 2. Stage the assembly of our M2 runtime.
>> I propose that we start a fresh stream for M2 and build the
runtime
>> through
>> baby steps, in parallel with the scenario work. This will get
our
>> community
>> members involved in building the runtime together and will
lead to
>> a wider
>> knowledge base that makes it possible to quickly implement new
>> functionality
>> in the future. It will also build a community knowledge base
that is
>> ready to
>> help new community members come on board quickly.
>
>
> This approach appeals to me. Could we just give it a try for a
> little while
> when everyone is back on Wednesday? If it doesn't work out
then all
> the
> other code will still be available in SVN to try another
approach.
>
> ...ant
-------------------------------------------------------------------
--
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]
--
Jean-Sebastien
---------------------------------------------------------------------
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]