Kelvin,

Also since I'm using dynamic proxies for AOP, spring is suppose to expose all 
interface of the target.  But I'll still dig in and make sure 100% this is all 
good.  

Darren

> On Oct 2, 2013, at 5:40 PM, Darren Shepherd <darren.s.sheph...@gmail.com> 
> wrote:
> 
> I know the majority of the polymorphic stuff is working fine right now.  But 
> now that you bring it up I'm kinda wondering why.   It very we'll be possible 
> that the way in which I'm discovering extensible types precludes it from AOP 
> matching the beans.   (Which isn't bad.  We should only use AOP for 
> declarative transaction management ideally.  AOP on a project this size is 
> most always a bad idea).  The AOP is far more selective now anyhow.  Only 
> beans of GenericDaoBase and those that have @ActionEvent are being matched 
> which isn't really any of the extensible types that require instanceof 
> checks.  Regardless I'll dig into exactly what is happening and give you an 
> answer to be sure that issue won't hit us.
> 
> I've done extensive profiling on this.  The heap and permgen are slightly 
> less than what they used to be.  I've been running -Xmx256mb for all my 
> testing.  Heap analysis shows that with all plugins (including noredist), 
> permgen is at about 120mb and heap usage is about 150mb.  
> 
> Regarding the start up time, it is slightly slower.  It's about 5 seconds 
> slower to start on my laptop than before.  I traced down the problem to AOP.  
> Because I'm selectively looking for @ActionEvent it has to evaluate every 
> method on every bean, which is slow.  I know how to optimize it such that the 
> startup can actually be faster than what it was before, but I really want to 
> focus on correctness over speed right now.  
> 
> Cglib is no longer used for AOP.  The only use of cglib now is in 
> GenericDaoBase when it creates the VOs and also in the async framework. 
> 
> I should point out all of these changes apply only to the mgmt server.  
> Awsapi and usage server are untouched.  I did not have time to convert them 
> too.  So those still use ACS AOP and the monolithic config (which uses 
> component scanning, so nobody remove @Component unless your really sure it's 
> not used).
> 
> Darren
> 
>> On Oct 2, 2013, at 4:39 PM, Kelven Yang <kelven.y...@citrix.com> wrote:
>> 
>> Darren,
>> 
>> This looks really nice. A few questions on Spring AOP replacement.
>> 
>> 1) Spring AOP is proxy-based, the reason we ended up of using customized
>> AOP is mainly due to that inside existing CloudStack codebase, we have
>> many places that are doing run-time type-casting, the code in these places
>> assumes a real object that implements all interfaces in the semantics
>> context. At the time when I initially converted to Spring, I couldn't
>> ensure that switching to proxy-based AOP can have 100% coverage for these
>> run-time cases. What is your approach to address this run-time
>> type-casting issue?
>> 
>> 2) We've run into a huge-memory footprint issue that may be caused by
>> conflicts of CGLIB usage in Spring AOP and the CGLIB usage in CloudStack
>> Dao layer. Do you have a chance to run a memory analysis in the heap after
>> management server is started.
>> 
>> I might be good to run BVT test on the branch before the merge, could
>> someone initiate the effort?
>> 
>> kelven
>> 
>> 
>> 
>>> On 10/2/13 3:48 PM, "Darren Shepherd" <darren.s.sheph...@gmail.com> wrote:
>>> 
>>> Not sure how this works...  I would like to merge in the new
>>> modularized Spring setup to master. There is info on the wiki about it
>>> [1] [2] [3].  The primary change is to break apart the monolithic
>>> applicationContext.xml and componentContext.xml files such that each
>>> plugin can maintain and contribute its own configuration.
>>> 
>>> In addition to breaking up the configuration we no longer use ACS
>>> custom AOP and it is now fully Spring AOP.
>>> 
>>> Now adding/removing a plug-in is a matter of just adding a jar to the
>>> classpath (exception being commands.properties, I'll address that in a
>>> different thread).  Unfortunately this branch does not have the
>>> changes to package things in different RPMs.  So it would be great if
>>> somebody could take up the packaging effort to split out all the
>>> plugins into different RPMs.
>>> 
>>> Darren
>>> 
>>> [1] 
>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Modularize+Spring
>>> [2] 
>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Plug-ins%2C+Modules
>>> %2C+and+Extensions
>>> [3] https://cwiki.apache.org/confluence/display/CLOUDSTACK/Extensions
>> 

Reply via email to