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

Reply via email to