Thanks so much for the response. This is great information! You asked a bit about what I'm interested in and how I typically approach things. You are right that I'm primarily interested in runtime things. But, as to whether I approach things from the outside in, or vice versa, I would answer that this way. I am a firm believer that, in any subject, understanding the core "essence", or basic elements, of a subject is of highest importance. If a person knows, in depth, the essential, core building blocks, and the "why's" behind them, all the derivative techniques that arise out of them, along with the logical evolutions that will take place in the future, become naturally understood. So, I guess I would approach it as you do - from the inside out.
I am a jack of many trades and master of none, as I have to develop across all three tiers of the web architecture with no help for anything (including client-side graphics). So, I've had to find the fastest way to come up to speed on a lot of technologies. But, I hate to use things blindly without knowing the why's. So, thanks for the pointers. Ron Grimes -----Original Message----- From: Daniel Kulp [mailto:[email protected]] Sent: Wednesday, April 22, 2009 9:38 AM To: [email protected] Cc: Ron Grimes Subject: Re: Which Part of the Elephant First? On Tue April 21 2009 10:44:22 am Ron Grimes wrote: > I've decided that I would really like to gain a solid, in-depth > understanding of this stack, rather than just remaining happy knowing > my particular implementation of Spring/CXF. So, I guess my question is > this. Can some of you experts tell me the best way to tackle this > elephant? Wow. Speak about a broad request for information. That said, it's definitely a good request. :-) Hmm.... where to start...... >From a very high level perspective, I could ask: are you more interested in runtime things or tooling (wsdl2java/java2ws/maven plugins/etc...) type things? That type of question can drive starting points. Judging from your question, I'm going to assume runtime. Then the question comes down to "what kind of person are you?" Pretend the CXF core runtime is an onion. (I'm sure SOMEONE is going to tweet that CXF is an onion now that I said that) Are you the type of person that prefers to start on the outside examining and removing one layer at a time to achieve an understanding of what the onion is all about? Or are you the type of person that would chop the onion in half and examine the core and start seeing how the layers were layered on top one after another? I'm firmly in the latter category. Whenever I try the "outside in" approach, I keep asking questions like "why is this layer here" and such and I keep dropping into the core layers to answer my questions. Thus, for me "outside in" always ends up degrading into "inside out" anyway. However, other people do best with the outside in approach. They KNOW JAX-WS and JAXB and they KNOW SOAP and such and thus want to start off there where there is some stuff from their comfort zone. Anyway, since I'm an inside out person, my suggestion would be to setup eclipse and get a client or server running in eclipse. Put a breakpoint at line 236 of PhaseInterceptorChain. (it looks like: currentInterceptor.handleMessage(message);) and debug. At that breakpoint, take a look at the message, debug into some of the interceptors, see how the message changes as it gets passed, etc... If someone was going to ask me what is the CORE class of the CXF runtime, it's the PhaseInterceptorChain. That's the class that drives all message processing. It's a relatively simple thing (mostly just a while loop), but it really IS CXF. The rest of CXF falls mostly into 3 main categories: 1) Setting up the message/chain prior to starting the chain processing. The ClientImpl and destinations fall in here. Example: the http listener needs to setup a message by pulling stuff from the incoming request. 2) The actual interceptors. For example, soap processing is done by a collection of interceptors that live in various locations on the chain. 3) A LOT of "setup and configuration" code that examine the various locations of information to setup and provide information to the stuff in categories 1 and 2. Things like looking at annotations, processing the wsdl, figuring out it's the soap binding, etc.... Does that provide some information to get started? Dan > In other words, what would be the right order to try and get my arms > around all of this? What I'm looking for is something like, "Start off > with JAX-WS, then JAXB, then.....", as welll as maybe the best > resources to understand better how they couple together, etc. Also, I > would like to understand more about the thinking/rationale about how > this all came together, and why the choice of certain mechanisms such > as interceptors and such. > > Hopefull, you get my gist. > > Thanks for any direction you can give. > > > Ron Grimes -- Daniel Kulp [email protected] http://www.dankulp.com/blog
