Publish with GEP takes minutes, while deploy takes seconds
----------------------------------------------------------

                 Key: GERONIMODEVTOOLS-608
                 URL: https://issues.apache.org/jira/browse/GERONIMODEVTOOLS-608
             Project: Geronimo-Devtools
          Issue Type: Bug
          Components: eclipse-plugin
    Affects Versions: 2.2.0
         Environment: GEP 2.2 installed in Eclipse (galileo-SR1).
            Reporter: Boes
            Assignee: Delos Dai


Publishing an Enterprise Application (EAR) with GEP to Geronimo takes much more 
time then deploying the same EAR to Geronimo using the console. See 
http://n3.nabble.com/Publish-with-GEP-takes-minutes-while-deploy-takes-10-seconds-td684484.html

After doing some research I found that EAR's that have dependencies in 
geronimo-application.xml take a lot of time to publish. This is caused by the 
very inefficient implementation of the reorderModules method in the 
org.apache.geronimo.st.core.internal.DependencyHelper class.

I installed a GEP development environment and put on tracing. It tested an EAR 
with 3 WAR's in it. In the EAR's geronimo-application.xml I added dependency 
tags for 4 libraries. Tracing shows that this results in parsing the 
geronimo-application.mxl 1092 (!) times. In code this means that a call to 
DependencyHelper.getEnvironment is made 1092 times.

Another inefficient part in the reorderModules method is that the call to 
DeploymentUtils.isInstalledModule is repeatedly made for the same module. In 
the test I found it was called at least 3 times for each dependent library. 
These calls result in a request to Geronimo and take almost a second each.

The best way to solve this bug is to redesign the reordering process and make 
it work in a way that both DependencyHelper.getEnvironment and 
DeploymentUtils.isInstalledModule are not called more often then needed. I 
wonder why DeploymentUtils.isInstalledModule is called at all.

What I did to fix this problem and make GEP workable again for me is:
- made sure the DeploymentUtils.isInstalledModule is never called twice for the 
same module. Once the DeploymentUtils.isInstalledModule is called for a certain 
module, I add this module to a list. Before a next call to 
DeploymentUtils.isInstalledModule I verify if the call has been made before. If 
so, it doesn't need to be called again.
- reduced the number of times the xml is parsed. I put the results of the 
DependencyHelper.getEnvironment for a certain module in a hashmap. Next time 
the DependencyHelper.getEnvironment is called for the same module, I return the 
result stored in the hashmap.

After these two modifications GEP is up to speed again.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to