Kelven,

That makes sense.  I'm not a committer so I'll probably be working off
my github account, but I'll base my branch off of javelin.

Darren




> -------- Original Message --------
> Subject: Re: CS -> Spring
> From: Kelven Yang <kelven.y...@citrix.com>
> Date: Sat, August 18, 2012 7:31 pm
> To: "cloudstack-dev@incubator.apache.org"
> <cloudstack-dev@incubator.apache.org>
> 
> 
> Darren,
> 
> I'll start some coding on architecture refactoring work at "javelin"
> branch, and I'll use Spring too. Should we share the same branch? I've
> pushed the branch to the ASF repo already
> 
> Kelven
> 
> 
> On 8/18/12 6:59 PM, "Darren Shepherd" <dar...@godaddy.com> wrote:
> 
> >Alex,
> >
> >This is definitely post-4.0.  I'm just throwing the info out there of
> >what I'm thinking of doing just to see if there are any major
> >objections.
> >
> >Regarding maven, I responded on the main thread for this just now, so
> >refer to that.  Basically I've been waiting for a decision.  I hadn't
> >been following the mailing list most of the week and therefore wasn't
> >too sure what was up with that.
> >
> >Darren
> >
> >
> >
> >
> >> -------- Original Message --------
> >> Subject: RE: CS -> Spring
> >> From: Alex Huang <alex.hu...@citrix.com>
> >> Date: Sat, August 18, 2012 12:46 pm
> >> To: "cloudstack-dev@incubator.apache.org"
> >> <cloudstack-dev@incubator.apache.org>
> >> 
> >> 
> >> Darren,
> >> 
> >> 
> >> 
> >> This is not going into 4.0 release right?
> >> 
> >> 
> >> 
> >> Also between maven and spring framework which one are you planning to
> >>do first?  The other thread regarding build system seems to be coming to
> >>a consensus when the 4.0 release date is pushed back.
> >> 
> >> 
> >> 
> >> --Alex
> >> 
> >> 
> >> 
> >> > -----Original Message-----
> >> 
> >> > From: Darren Shepherd [mailto:dar...@godaddy.com]
> >> 
> >> > Sent: Saturday, August 18, 2012 10:16 AM
> >> 
> >> > To: cloudstack-dev@incubator.apache.org
> >> 
> >> > Subject: CS -> Spring
> >> 
> >> > 
> >> 
> >> > I'm going to be starting the effort of moving CloudStack to be Spring
> >> 
> >> > managed as this is an absolute must for me (and my day job).  I
> >>wanted to
> >> 
> >> > share some of the high level points and the scope as I see it today.
> >> 
> >> > 
> >> 
> >> > Moving to Spring should not impact much code (except swapping
> >> 
> >> > annotations in a lot of places) as the CS code base is already
> >>written in a
> >> 
> >> > IoC/DI style (kudos to past developers who put that in place).
> >> 
> >> > Here's some of the ground rules I've use with Spring in the past and
> >>will be
> >> 
> >> > applying to this effort.
> >> 
> >> > 
> >> 
> >> > 1. "If you import org.springframework you've done something wrong." -
> >>You
> >> 
> >> > should have no code dependency on Spring itself (including
> >>annotations!).
> >> 
> >> > The only place code dependency makes sense is in
> >>bootstrap/initialization
> >> 
> >> > code and extending container features like custom namespace handlers
> >>and
> >> 
> >> > what not.  If there is any compile time dependency on spring it
> >>should be a
> >> 
> >> > separate spring specific module so that other modules have Spring
> >> 
> >> > dependencies as <scope>runtime</scope> and not
> >> 
> >> > <scope>compile</scope>.
> >> 
> >> > 
> >> 
> >> > 2. JSR250 and JSR330 should be used for annotations.  So specifically
> >>this
> >> 
> >> > means using the standard @Inject, @PostConstruct, @PreDestroy
> >> 
> >> > annotations.
> >> 
> >> > 
> >> 
> >> > 3. Autowiring by type can/should be used.  If there is no unique
> >> 
> >> > dependencies, named dependencies can be specified with the standard
> >> 
> >> > @Resource annotation, or @Qualifier (following JSR330) should be used.
> >> 
> >> > 
> >> 
> >> > 4. Component scanning should not be used - This means no auto
> >>discovery of
> >> 
> >> > beans using the @Named (@Bean for the spring specific annotation)
> >> 
> >> > annotation.  This is typically a controversial point.  A lot of
> >>people like
> >> 
> >> > component scanning as you can avoid registering beans in XML (and
> >> 
> >> > everybody hates XML).  The problem with component scanning is that for
> >> 
> >> > large projects with a lot of developers it tends to be too much magic
> >>and
> >> 
> >> > confuses most developers when debugging.  At runtime a component gets
> >> 
> >> > injected and they have no clue where it came from or what it is.
> >> 
> >> > So still using XML to register beans is very helpful for people to
> >>understand
> >> 
> >> > the system.  Additionally its annoying when one want to not register
> >>a bean
> >> 
> >> > and than means removing it from the classpath (typically, I'm sure
> >>their are
> >> 
> >> > other hooks)
> >> 
> >> > 
> >> 
> >> > 5. Spring is not the center of the world! - Just because we use
> >>Spring IoC
> >> 
> >> > doesn't mean that every other spring framework (Spring-WS, Spring
> >>Securiy,
> >> 
> >> > Spring Integration, etc) is somehow the best choice for the project.
> >>Spring
> >> 
> >> > based frameworks need to be evaluated on their own merits and not
> >>only on
> >> 
> >> > the fact that it's name starts with "Spring".
> >> 
> >> > 
> >> 
> >> > 
> >> 
> >> > The scope of changes will mostly be around the ComponentLocator.  The
> >> 
> >> > ComponentLocator currently does instantiation, lifecycle,
> >>configuration
> >> 
> >> > injecting, AOP, and probably some other stuff.  So all of these
> >>feature
> >> 
> >> > already exist in Spring in some fashion.  So I'll be dissecting the
> >> 
> >> > ComponentLocator and removing functionality that Spring will do.  I'm
> >>still
> >> 
> >> > toying with what to do with the Manager and Adapter interfaces as
> >>these
> >> 
> >> > primarily just define lifecycle methods.  Spring will apply lifecycle
> >>to all beans
> >> 
> >> > (using the normal @PostConstruct, @PreDestroy) so those interface
> >> 
> >> > methods don't provide much value.  The configure() method can also be
> >> 
> >> > done in a more generic fashion also.  So Adapter and Manager may just
> >> 
> >> > become marker interfaces.
> >> 
> >> > 
> >> 
> >> > Moving to Spring also starts laying the foundation for a simpler
> >>component
> >> 
> >> > and plugin model.  With Spring we can easily get to the point where
> >> 
> >> > somebody builds a plug-in as a jar and puts it on the classpath and
> >>Spring
> >> 
> >> > finds it and registers it as a plugin.  I have plenty of thoughts
> >>around this, but
> >> 
> >> > I'll leave that for later.
> >> 
> >> > 
> >> 
> >> > Darren
> >> 
> >> > 
> >> 
> >> > 
> >> 
> >> >

Reply via email to