David, Can you remind me how you are going to deal with possible loops in transaction tree.
Consider this scenario: node A starts a transaction, does some work and calls node B. Node B does some more work and calls node A back. There is no way node B can know if the transaction has visited node A or not, and if I understood your design correctly node B will enlist node A into the transaction and create a loop. Of course, this is no big deal, all you have to do is to write TransactionImpl to re-entrant and make sure that TransactionImpl.prepare returns "read-only" if the transaction is already being prepared. Thanks in advance. > -----Original Message----- > From: David Jencks [mailto:[EMAIL PROTECTED] > Sent: Monday, February 24, 2003 2:11 PM > To: [EMAIL PROTECTED] > Subject: RE: [JBoss-dev] TxInterceptor split is still the best thing > since sliced bread > > > 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 > ------------------------------------------------------- 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