Fast @Converter loading in uber-jar
-----------------------------------

                 Key: CAMEL-4009
                 URL: https://issues.apache.org/jira/browse/CAMEL-4009
             Project: Camel
          Issue Type: Improvement
          Components: camel-core
            Reporter: Arkadi Shishlov
            Priority: Minor
         Attachments: 
apache-camel-r1127037-fast-TypeConverter-loading-in-uber-jar.diff

Currently, the @Converter converters are loaded as follows
{noformat}
for package in TypeConverter meta-inf resource
  get package url from classloader
  if url is jar
    for entries in jar
      if entry match package
        check annotation
{noformat}
This is very inefficient approach when application is packaged into uber-jar as 
expensive iteration is performed multiple times over same jar.
The attached patch changes loop into:
{noformat}
for package in TypeConverter meta-inf resource
  get package url from classloader
  create map url -> package names
  for url in distinct url
    if jar
      for entries in jar
        for package in packages
          if entry match package
            check annotation
{noformat}
With this patch I was able to cut startup time significantly from 15sec spent 
on @Converter-s load to 2sec on 45MB 29k entries uber-jar.

I understand that the solution is not pretty but resolves a very practical 
problem. Let me know if you want me to polish it and update the javadoc.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to