Interceptors seem reasonable, as long as there are no hidden costs behind them. Why not keep them seperated and more flexible? Also allows invokers to become a little bit simpler. The only down (aside from any performance & client-side class loading issues) are the read code as a story fluff which some of us have been pimping from day one. So that really isn't a down after all since I never bought into that garbage in the first place ;)
So are there any performance or other negative side effects which would be undesirable by making this seperation? If not, then the more flexible and pluggable the better I say. But then again what do I know, I haven't touched a bit of code in months :( Only evil servers to deal with... --jason On Tue, 25 Feb 2003, David Jencks wrote: > On 2003.02.25 02:58 Sacha Labourey wrote: > > Hello, > > > > This discussion is somehow strange because, and I agree with David: you > > don't seem to be speaking about the same thing at the same time... > > Asynchronous argumentation is hard to follow... > > > > - I think we should have interceptors > > - Yes, but the sky is blue > > - No! Invokers can't handle DTM in this case > > - You mean AOP? > > > > I understand David's point of view. David loves orthogonal designs and > > the > > idea to have somehow symetric interceptors (between the client and the > > server), possibly with a null invoker in the middle of the chain makes > > his > > design pleaseant. Nevertheless, where I think I agree with Bill is that > > we > > first have to check if we don't go too far just for the beauty of it. > > Let's > > take IIOP as an example. In the general case, IIOP can only transport the > > same kind of data: > > - invocations information (method name, arguments, etc.) > > - arbitrary context information > > > > In the arbitrary payload, you may find security information, transaction > > information, etc. The question is: at the end of the day, do we really > > need > > a stack of interceptors just to extract this set of information and > > populate > > a JBoss invocation object? Couldn’t we more simply just extract "all this > > stuff" and put it in the Invocation Object (and the server side Invoker > > could do that). > > > > I agree, it would look much smarter to have this "separation of concern" > > and > > have each interceptor from a virtual-client-stack (i.e. client side > > interceptors living on the server and mimic-ing client-side behaviour) > > put > > only what is needed inside the JBoss invocation object. NEVERTHELESS, as > > this information will always be similar, why not simply do that in a > > generic > > way inside the invoker: in-mass population of the invocation with > > well-known > > key names for well-known invocation content. > > > > If you think about it, the invoker already does that: it extracts the > > target > > MBean ObjectName from the invocation and push the invocation to it: if > > you > > push your reasoning far enough, that's already a concern that shouldn't > > be > > put in a pure "transport-focused invoker". But I agree, and as French > > say: > > "Je pousse mémé dans les ortilles". Translation left as an exercise. > > well, aside from my and babelfish's inability to translate that... > > 1. I was planning to move the invocation reassembly and targeting into a > bunch of interceptors on the server side. > > 2. I think your argument applies with exactly equal force to the client > side interceptors and if we put the functionality for IIOP into the invoker > on the server side we should for exactly the same reason eliminate client > side interceptors everywhere and put them in the client side of "more > capable" (than IIOP) invokers. Just because we haven't used the client > interceptors for any customization doesn't mean they aren't a good idea. > If we ever found a use for including additional context information, we > would be able to include it in all transports simply be writing one client > and one server interceptor and adding it to the chains for the objects we > wanted it for. For IIOP, I think this would result in the fewest changes: > I think basically we'd just have to add the C++ (or whatever) code to send > the additional context info. > > thanks > david > > > > > > Cheers, > > > > > > Sacha > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] On > > > Behalf Of David Jencks > > > Sent: lundi, 24. février 2003 21:02 > > > To: [EMAIL PROTECTED] > > > Subject: RE: [JBoss-dev] TxInterceptor split is still the > > > best thing since sliced bread > > > > > > > > > On 2003.02.24 14:35 Bill Burke wrote: > > > > > > > > > > > > > > > > > > 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 > > > > > > > > Ditto. > > > > > > > > I thought I did read your stuff and replied appropriately. Maybe I > > > > missed > > > > something. What I saw you propose for non-Java and I'll quote you: > > > > > > > > "outside world >>> something corba and proxy-like > ci1 > > > > ci2 > some kind > > > > of > > > > invoker-like thing > si1 > si2 > actual target object" > > > > > > > > My argument against this was that you would have to > > > maintain 2 separate > > > > interceptor chains on the server. > > > > > > > > For IIOP the chain would be (as you stated) > > > > > > > > IIOPInvoker > ci1 > ci2 > si1 > si2 > actual target object. > > > > > > > > For RMI/Java the chain would be > > > > > > > > DP > ci1 > ci2 > ---- network --- JRMPInvoker > si1 > si2 > > > > > > > > I voiced a similar problem with AOP where the AOP > > > interceptors would have > > > > to > > > > know whether the call had traveled through a remote proxy object. > > > > > > I wrote the lengthy description/picture below in an attempt > > > to find out > > > what you are talking about, since this argument doesn't make > > > sense to me. > > > I didn't see any response from you about it. > > > > > > I'll try to explain why, specifically, your argument makes no > > > sense to me. > > > > > > I think interceptors all implement required functionality. > > > If you put them > > > in the chain, it's for a reason: they are doing something you need. > > > Therefore, however many transport steps are in the middle, > > > any invocation > > > should go through the same (target specific) interceptors. > > > (IMO transport > > > layer interceptors on both ends are a good idea too, but > > > that's a separate > > > argument). If the interceptor chains have different > > > interceptors, you will > > > get different behavior, and you should be getting that > > > through other means > > > such as additional deployments. > > > > > > Therefore, for a conceptual interceptor chain of ci1 > ci2 > > > > si1 > si2, > > > this might end up as > > > > > > ci1 > ci2 > ||transport from client machine to server || > si1 > si2 > > > > target object. > > > > > > or > > > > > > ci1 > ci2 > ||do nothing "transport" on same machine || > si1 > si2 > > > > target object. > > > > > > It might be possible to arrange for > > > > > > ci1 > ci2 > si1 > si2 > target object but I don't see why > > > you'd want to > > > particularly. > > > > > > Furthermore, for corba, > > > > > > java-corba-endpoint on server > ci1 > ci2 > || possible "transport" > > > translation layer whose need is questionable || > si1 > si2 > target > > > object. > > > > > > To me these are all the same interceptor chain: they all have the same > > > members, with the exception of the one missing any kind of > > > transport. The > > > chain has 2 entry points: ci1 and si1. If you regard this as > > > more than one > > > interceptor chain please explain your point of view. As I > > > understand it, > > > this is also essentially how we handle ejbs today: certainly > > > we maintain > > > both the client and server interceptor stacks on the server. > > > > > > It occurs to me that what you write is consistent with not > > > having client > > > side interceptors for aop. Is this your plan? If so, how > > > will you gather > > > the context information for the invocation? If not, why do > > > you want to > > > put limits on what the client side interceptors can do? > > > > > > > > > thanks > > > david > > > > > > > > > > > > > > > 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. > > > > > > > > > > > > > I think I already have (see below), but will reread your > > > posts to make > > > > sure. > > > > > > > > Bill > > > > > > > > > > > > > > > > > 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 > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > 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