<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Speeding up Spring, coupled to JBoss
</h3>
<span style="margin-bottom: 10px;">
    created by <a href="https://community.jboss.org/people/tmehta">Tejas Mehta</a> in <i>Snowdrop</i> - <a href="https://community.jboss.org/message/827646#827646">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hello all,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>We, the Snowdrop Dev team, have been trying to speed up Spring's Component Scanning.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Typically, Spring Applications make use of the context namespace to add beans to the Spring Container, example: &lt;context:component-scan base-package="foo.bar"/&gt;. In order to identify the beans it needs to initialize, Spring looks through the package and scans for @Component and its extensions. For packages with large number of Components, this process is fairly slow.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The specific steps are as follows:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>After bootstrapping, the set of application components and service that need to be created are identified. AbstractbeanDefinitionReader will read resource definitions. DefaultListableBeanFactorywill be used as default bean factory based on bean definition objects.XmlBeanDefinitionReader.loadBeanDefinitions() load bean definitions from the specified XML file in which the BeanDefinitionParser will identify the context namespaces and parses the applicationContext xml. The resources are identified by the implementation of ResourcePatternResolver:, ie PathMatchingResourcePatternResolver in which the location patterns are found like an ant-style. Internally it uses ClassLoader.getResources(String name) method which returns an Enumeration containing URLs representing classpath resources. Then the ComponentScanBeanDefinitionParser will parse through the context definition nodes.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>It is this last step that we want to speed up and to do so we are attempting to leverage JBoss' Jandex module.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>At the start of deployment in JBoss, the Jandex module scans the classes and creates an Annotation Index. We would like to be able to utilize this Index to skip the scanning step and just initialize the pre-identified components.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Potential Solution:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><span>Component-Scan within snowdrop's jboss namespace - </span><a class="jive-link-external-small" href="https://github.com/snowdrop/snowdrop/tree/CustomBeanScanner:" target="_blank">https://github.com/snowdrop/snowdrop/tree/CustomBeanScanner:</a></p><p>One option is to add our custom component scanner to snowdrop's namespace. So instead of &lt;context:component-scan base-package="foo.bar"/&gt;, the user would use: &lt;jboss:component-scan base-package="foo.bar"/&gt;.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>While this has the downside that the user has to change their application to make use of the feature, it forces the user to make a conscious decision. </p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>What do you think of this feature and of how it couples a Spring app with JBoss?&#160; Is the intentional coupling worth the speed increase?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks in advance for the feedback,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Tejas M. on behalf of the Snowdrop Team</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/827646#827646">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in Snowdrop at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2082">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>