<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 04:14:57 CET 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MAGNOLIA-6483] Introduce ReloadableClassFactory interface</title>
                <link>https://jira.magnolia-cms.com/browse/MAGNOLIA-6483</link>
                <project id="10000" key="MAGNOLIA">Magnolia</project>
                    <description>&lt;p&gt;Before M4.5 objects were instantiated using a &lt;tt&gt;ComponentProvider&lt;/tt&gt; which eventually delegated to  &lt;tt&gt;Classes.getClassFactory().newInstance()&lt;/tt&gt;. With M4.5 IoC was introduced and the current &lt;tt&gt;ComponentProvider&lt;/tt&gt; &lt;tt&gt;info.magnolia.objectfactory.guice.GuiceComponentProvider&lt;/tt&gt; is no longer aware of the &lt;tt&gt;ClassFactory&lt;/tt&gt;. However, as the &lt;tt&gt;DefaultClassFactory&lt;/tt&gt; can be replaced with a custom one (like e.g. our Groovy module does) that means that instantiating new objects with a custom class factory no longer works. This particularly affects the Groovy module and its ability to replace Java classes in config with Groovy ones and hot deploy and change them on the fly.&lt;/p&gt;

&lt;p&gt;It was decided to make our current default &lt;tt&gt;ComponentProvider&lt;/tt&gt; aware of &lt;tt&gt;ClassFactory&lt;/tt&gt; again. This will happen through &lt;tt&gt;ObjectManufacturer&lt;/tt&gt; which is eventually used to create class instances. The new interface will be implemented by custom class factories and &lt;tt&gt;ObjectManufacturer&lt;/tt&gt; will call the interface&apos;s new method delegating to the custom cf which will try to re-load (by recompiling if necessary) the class. &lt;/p&gt;

&lt;p&gt;Some concerns were expressed as to a performance penalty due to this additional check but, as far as I could see in my basic measurements, the overload seems to be negligible. &lt;br/&gt;
Here I am comparing the execution time  of &lt;tt&gt;ObjectManufacturer.newInstance()&lt;/tt&gt; with and without my changes.  The table shows most of the classes instantiated by Magnolia  when rendering the home page of the travel demo. The largest numbers are of course for the Groovy &lt;tt&gt;foo.TestModel&lt;/tt&gt; class especially when it needs recompiling cause the source has changed (more precisely because it&apos;s newer).&lt;/p&gt;

&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Class name&lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt; execution time without changes&lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt; with changes &lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Groovy source changed (with changes)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.context.DefaultRepositoryStrategy &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.10556 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 1.553202 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.module.site.ExtendedAggregationState &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.023335 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.01753 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.context.SystemRepositoryStrategy &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.091537 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.096238 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.context.DefaultRepositoryStrategy &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.146448 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.049374 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.module.site.ExtendedAggregationState &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.014709 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;0.012665 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.rendering.util.FilteringAppendableWrapper &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.015895 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;0.023665 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.rendering.engine.FilteringResponseOutputProvider &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.119688 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;0.082204 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.rendering.listeners.AreaFilteringListener &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.122445 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;0.102501 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.rendering.model.RenderingModelImpl &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.676595 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.108454 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.context.SystemRepositoryStrategy &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.098068 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.501442 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.templating.elements.PageElement &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.144661 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.117432 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.templating.elements.AreaElement &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.218534 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.063254 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.rendering.model.RenderingModelImpl &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.150412 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;0.092489 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;info.magnolia.templating.elements.AreaElement &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.188307 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; 0.11792 ms&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&lt;b&gt;foo.TestModel&lt;/b&gt; &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; &lt;b&gt;0.393441 ms&lt;/b&gt;&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; &lt;b&gt;5.328067 ms (overhead due to check if needs recompilation)&lt;/b&gt; &lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&lt;b&gt;496.362892 ms (overhead due to check and recompilation)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</description>
                <environment></environment>
        <key id="49648">MAGNOLIA-6483</key>
            <summary>Introduce ReloadableClassFactory interface</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="3" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/major.svg">Major</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="fgrilli">Federico Grilli</assignee>
                                    <reporter username="fgrilli">Federico Grilli</reporter>
                        <labels>
                    </labels>
                <created>Tue, 5 Jan 2016 13:21:01 +0100</created>
                <updated>Wed, 2 Mar 2016 15:37:33 +0100</updated>
                            <resolved>Tue, 5 Jan 2016 13:57:49 +0100</resolved>
                                                    <fixVersion>5.4.5</fixVersion>
                                    <component>core</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                    <progress percentage="100">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="100" backgroundColor="#51a825"/>
                                                    <row percentage="0" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </progress>
                                    <aggregateprogress percentage="100">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="100" backgroundColor="#51a825"/>
                                                    <row percentage="0" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </aggregateprogress>
                                            <timeestimate seconds="0">0d</timeestimate>
                            <timespent seconds="57600">2d</timespent>
                                    <issuelinks>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="28363">MGNLGROOVY-68</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 2 Mar 2016 15:37:33 +0100</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>cmeier</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            8 years, 6 weeks, 5 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>fgrilli</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzzzzn:9a90vhlzy9000001x</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10220" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Release notes required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10490"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10245" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="172">Basel 27</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>3.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </customfields>
    </item>
</channel>
</rss>