Bill, what I find really boring and unpleasant about this discussion is
that I can't find any evidence that you read most of my posts, or that you
remember the reasons for my design decisions for more than about 5 minutes.
 I've written fairly detailed explanations of my views of both interceptor
architecture and corba integration and asked for comments or whether you
agree or disagree.  I haven't seen any direct responses.

At this point I don't want to read the same argument from you again. 
Please implement your idea for how dtm will work so we can discuss
something concrete.

thanks
david


On 2003.02.24 13:37 Bill Burke wrote:
> Sure.  The TxSupport class is a nice change and makes the code much more
> readable.  I have stated this before.  But....
> 
> Merge TxSupport.clientInvoke and serverInvoke into one method.  Remove
> all
> logic from client interceptor except TX propagation.  Propagate the TX
> always.   Again, my reasoning is to isolate the EJB container from the
> transport mechanism.  Currently, in 3.2, you can invoke on an EJB from
> any
> protocol at the same time.  With David's change, non-Java clients that
> support TX propagation would require that TxSupport.clientInvoke be run
> on
> the server thus requiring us to have transport specific server-sdie
> interceptor chains and a change to the current architecture.  I think
> that
> this creates further complication in the server-side architecture and
> will
> further bloat configuration.  All just to save a tx propagation for
> NotSupported and RequiresNew methods.
> 
> Or are you talking about the AOP stuff?  Well, it is implemented, I do
> have
> an API.  I have written the AOP Tx interceptor and it is tested within
> the
> testsuite.  I am working on the Security one.  So far, my design seems to
> fit.   The real test will be with the persistence metadata since this is
> much more complicated.  I've made an attempt to explain my design with
> the
> bootcamp slides and the crappy documentation I put together on the
> website
> /developers/projects/jboss/aop.jsp.
> 
> 
> Bill
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] Behalf Of Dain
> > Sundstrom
> > Sent: Monday, February 24, 2003 12:36 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [JBoss-dev] TxInterceptor split is still the best thing
> > since sliced bread
> >
> >
> > Bill,
> >
> > Where is you design?  David's design looks totally obvious to me.  It
> > is well understood, and based on our existing "real-world" experiences.
> >   To me it looks like you are the one invent "the perfect design/API".
> > So can you present you invocation chain as did and show us the error in
> > our logic?
> >
> > -dain
> >
> > On Monday, February 24, 2003, at 09:39 AM, Bill Burke wrote:
> >
> > >
> > >
> > >> -----Original Message-----
> > >> From: [EMAIL PROTECTED]
> > >> [mailto:[EMAIL PROTECTED] Behalf Of
> > >> David
> > >> Jencks
> > >> Sent: Saturday, February 22, 2003 11:48 AM
> > >> To: [EMAIL PROTECTED]
> > >> Subject: RE: [JBoss-dev] TxInterceptor split is still the best thing
> > >> since sliced bread
> > >>
> > >>
> > >> This is really boring and unpleasant, bill.  We don't seem to
> > >
> > > I am sorry I am boring you.  Summarized, my major concern with the TX
> > > refactor is that it will not work for clients that cannot have
> > > interceptor
> > > chains (i.e. non-Java), but support Tx propagation (CORBA) for all
> > > trans-attributes (specifically, NotSupported, and RequiresNew).  I
> > > thought
> > > Marc's vision for creating these generic, transport specific invokers
> > > was to
> > > isolate the EJB Container from the transport layer, and I see this
> > > refactor
> > > as breaking this vision.
> > >
> > > The only way I see this working is if we have separate
> > > transport-specific
> > > interceptor chains on the server to support non-Java clients.  I
> > > wanted to
> > > avoid this because this is what has happened when I put in support
> for
> > > multiple invokers.  Client-side interceptor configuration became
> > > bloated.
> > > All this to avoid creating and passing over a TxId.  See my point
> now?
> > >
> > > ===========================
> > >
> > > As far as AOP goes, I'm hoping that as we implement services on top
> of
> > > the
> > > Framework and apply the framework to JMX and remoting, the
> > > requirements and
> > > API will be fleshed out as we iterate.  I'd like the design of AOP to
> > > be
> > > driven by "real-world" requirements and applications rather than what
> > > we
> > > might think as the perfect (and probably bloated) design/API might be
> > > currently.  I'm not afraid of throwing code out or having to modify
> > > huge
> > > amounts of code to iterate.  Iteration is key.  Allows us to get to
> > > market
> > > quick and to quickly notice bad designs.  Didn't somebody say
> "Release
> > > early, release often"?
> > >
> > > Bill
> > >
> > >
> > >> have a shared
> > >>  understanding of how interceptors ought to work with local and
> remote
> > >> calls.  Most of your comments make no sense to me, and I think
> > >> contrariwise.  I'll try to explain my view one more time, and
> > >> I'll write an
> > >> interceptor framework that satisfies my understanding of what is
> > >> needed for
> > >> mbeans, ejbs, remoting, and aop (which I don't understand all that
> > >> well).
> > >> If you don't like it and I can't understand your objections, I'll
> let
> > >> you
> > >> indulge your previously expressed wish to write a transaction
> > >> manager.  You
> > >> might also get that wish fulfilled if you say the following is
> > >> obvious.  I
> > >> thought it was, but I don't think we have agreed on it.  I'm writing
> > >> it
> > >> down to try to form a basis for discussion, which is currently
> > >> missing.
> > >>
> > >> ==========================
> > >>
> > >> Dave's mental model for invocations.
> > >>
> > >> Lets assume first you already have something representing the object
> > >> you
> > >> are interested in (such as an ejb Remote interface object, mbean
> > >> thingy,
> > >> aop-ized object, or some kind of proxy).  Items marked with a *
> might
> > >> be
> > >> removed for non-remotable objects.
> > >>
> > >> Key to symbols:
> > >>
> > >>    \/  interceptor chain "invokeNext()" calls.
> > >>
> > >>
> > >>    \/
> > >>    ||  method/field access/... calls whose nature may vary
> > >> depending on the
> > >> application  and that are not part of the interceptor/invocation
> > >> framework.
> > >>
> > >>    \/
> > >>    \/  calls between "segments".  These are of the form
> > >> invoke(invocation)
> > >> on a particular object found by the current interceptor.
> > >>
> > >> .......... sequence of interceptors in a chain.
> > >>
> > >>    ||
> > >>    ||  transport mechanism.  For a  remote object, this is the
> > >> boundary
> > >> between client and server.
> > >>
> > >>
> > >> ===========================
> > >>
> > >>
> > >> Some program does something on the  "object"
> > >>
> > >>    \/
> > >>    ||
> > >>
> > >> The Object
> > >>
> > >>    \/
> > >>    ||
> > >>
> > >> Something that knows about interceptor chains and metadata.  It
> looks
> > >> at
> > >> the method (or field access, ...) call and its environment and
> > >> determines
> > >> what interceptor chain to use.  It constructs an Invocation object
> > >> that
> > >> includes an iterator over the selected chain, the method call data,
> > >> and
> > >> some metadata.  Then it starts the invocation down the chain.  I
> will
> > >> call
> > >> this a Container.  I believe it corresponds to your aop Advisor(s).
> > >>
> > >>    \/
> > >>
> > >> Several interceptors  (client side interceptors specific to the
> > >> object/class you are calling)
> > >>
> > >> .....
> > >>
> > >>    \/
> > >>
> > >> * Transport selector interceptor.  This examines the metadata and
> > >> picks a
> > >> transport endpoint.  It calls invoke(invocation) on the selected
> > >> transport
> > >> endpoint. It does not call invocation.invokeNext(), so this may be
> > >> the end
> > >> of the use of the original interceptor iterator.
> > >>
> > >>    \/
> > >>    \/
> > >>
> > >> * Transport endpoint.  If this is a local "do nothing" transport, 
> it
> > >> may
> > >> simply call invocation.invokeNext().  Otherwise, it replaces the
> > >> interceptor iterator with one for the client side transport
> > >> interceptor
> > >> stack.
> > >>
> > >>    \/
> > >>
> > >> * Several interceptors (client side interceptors specific to the
> > >> transport
> > >> endpoint you are calling.  Examples would include the XAResource
> > >> representing a remote jboss instance (whenever the branch is
> created,
> > >> you
> > >> still need an XAResource, and it needs to know about the method
> > >> calls), and
> > >> the clustering thingy that picks a remote server)
> > >>
> > >>    \/
> > >>
> > >> * client side end of the transport.  I believe this is essentially
> the
> > >> remoting framework.
> > >>    ||
> > >>    ||
> > >>    ||
> > >> * server side end of the transport.  This may include some kind of
> > >> relationship with a thread pool.  Lets assume the work is
> > >> dispatched with a
> > >> thread, no matter how it is picked and how
> > >> synchronous/asynchronous it is.
> > >> Anyway, the reconstituted invocation object has its interceptor
> > >> iterator
> > >> replaced with one for the transport specific server side
> interceptors
> > >>
> > >>    \/
> > >>
> > >> *  Several interceptors (server side interceptors specific to the
> > >> transport.  In my current dtm implementation, one of these would
> > >> import an
> > >> xid in the invocation into the server side tm)
> > >>
> > >>   .....
> > >>
> > >> * Target selector.   Based on the metadata, this interceptor picks
> and
> > >> locates a target object, and calls invoke(invocation) on it.  This
> is
> > >> the
> > >> end of the  transport specific server side interceptor chain.
> > >>
> > >>    \/
> > >>    \/
> > >>
> > >> * Server side target object.  This is analogous to the  current
> > >> server side
> > >> ejb Container object.  It replaces the invocation's interceptor
> > >> iterator
> > >> and starts it off by calling invocation.invokeNext().
> > >>
> > >>    \/
> > >>
> > >> Server side interceptors.  For non remotable objects and for "no
> > >> transport"
> > >> local remotable objects, the original interceptor chain would
> continue
> > >> here.
> > >>
> > >> .......
> > >>
> > >>    \/
> > >>
> > >> Final interceptor.  This uses the metadata and the method
> > >> information to do
> > >> something to the actual object instance we are working with.
> > >>
> > >>    \/
> > >>    ||
> > >>
> > >> object of interest.
> > >>
> > >>
> > >>
> > >> Note that this requires, for remotable objects, being able to get
> two
> > >> interceptor iterators: one for the client side iterators, and one
> for
> > >> the
> > >> server side iterators.  For  "local only" objects, you only need one
> > >> interceptor iterator.  For objects that can be local or remote,
> > >> looking up
> > >> the server side target object can be avoided if the client side
> > >> interceptor
> > >> iterator also includes all the server side interceptors: the (client
> > >> side)
> > >> Transport Endpoint would (after determining that the call is local)
> > >> simply
> > >> call invokeNext() on the invocation.
> > >>
> > >>
> > >> Lets see if we can come to an agreement on this much before we
> > >> consider
> > >> constructors or how to get something representing a remote object.
> > >>
> > >> Please remember  that I consider this very obvious, but I don't
> think
> > >> we
> > >> agree on it: I think if we did your comments would make sense to
> > >> me, and so
> > >> far they don't.  Saying something like "don't be obvious" will
> > >> indicate to
> > >> me that you are not interested in discussing this aspect of jboss
> > >> architecture with me, so I will take your recommendation and stop
> > >> working
> > >> with interceptors, at least until my curiousity gets the better of
> my
> > >> sense.
> > >>
> > >> david
> > >>
> > >>
> > >> -------------------------------------------------------
> > >> This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
> > >> The most comprehensive and flexible code editor you can use.
> > >> Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day
> Trial.
> > >> www.slickedit.com/sourceforge
> > >> _______________________________________________
> > >> Jboss-development mailing list
> > >> [EMAIL PROTECTED]
> > >> https://lists.sourceforge.net/lists/listinfo/jboss-development
> > >
> > >
> > >
> > > -------------------------------------------------------
> > > This sf.net email is sponsored by:ThinkGeek
> > > Welcome to geek heaven.
> > > http://thinkgeek.com/sf
> > > _______________________________________________
> > > Jboss-development mailing list
> > > [EMAIL PROTECTED]
> > > https://lists.sourceforge.net/lists/listinfo/jboss-development
> >
> >
> >
> > -------------------------------------------------------
> > This sf.net email is sponsored by:ThinkGeek
> > Welcome to geek heaven.
> > http://thinkgeek.com/sf
> > _______________________________________________
> > Jboss-development mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/jboss-development
> 
> 
> 
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
> 
> 


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to