<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 04:15:20 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-6523] Refactor ClasspathResourceOrigin and stabilise its hot resource modification support</title>
                <link>https://jira.magnolia-cms.com/browse/MAGNOLIA-6523</link>
                <project id="10000" key="MAGNOLIA">Magnolia</project>
                    <description>&lt;p&gt;&lt;tt&gt;ClasspathResourceOrigin&lt;/tt&gt; suffers from several problems which are very hard to overcome without significant modifications of current implementation. The list of topics which needs attention includes:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;&lt;b&gt;development time resource reloading&lt;/b&gt;,&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;retrieval of classpath resource contents&lt;/b&gt;,&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;classpath configuration flexibility&lt;/b&gt;,&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;classpath file/folder hierarchy maintenance&lt;/b&gt;&lt;/li&gt;
	&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Main issue as it appears is related to how classpath resources are retrieved at the moment. We &lt;b&gt;heavily rely&lt;/b&gt; on the context &lt;tt&gt;ClassLoader&lt;/tt&gt; to provide resource URLs, last modified dates and &lt;tt&gt;InputStreams&lt;/tt&gt;. While such an approach works well for the case of &lt;em&gt;production mode&lt;/em&gt; (i.e. classloader doesn&apos;t do and never needs to do any reloading), in &lt;em&gt;dev mode&lt;/em&gt;  when we can deliberately &lt;b&gt;&lt;em&gt;update, remove or add&lt;/em&gt;&lt;/b&gt; a resource - class loader may or may not be able to resolve it (similar how IDE&apos;s support class reloading - a new/deleted/modified class support is there, but limited and somewhat unreliable =&amp;gt; such tools as JRebel exist and bloom). &lt;/p&gt;

&lt;p&gt;Attempt to obtain via classloader a URL or contents of the resource which e.g. has been detected as a new by &lt;b&gt;&lt;tt&gt;Reflections&lt;/tt&gt;&lt;/b&gt; library (which looks into re-deployed jar files and doesn&apos;t rely on classloader itself) may lead to all sorts of IO/Runtime exceptions. The idea which could help in such case is to obviously &lt;b&gt;stop unconditionally relying on the classloader&lt;/b&gt; but rather maintain the ability to point the classpath resources &lt;b&gt;directly into the deployed jars&lt;/b&gt; and should file stream be needed - refer to jar file itself.&lt;/p&gt;

&lt;p&gt;Hereby it is proposed to take the following actions to improve the situation with the classpath resources support:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;use dedicated &lt;tt&gt;ClasspathEntry&lt;/tt&gt; objects for resource identification instead of mere &lt;tt&gt;Strings&lt;/tt&gt; - encapsulate path operations, provide simple hierarchy-related interface, distinguish between folder and file, provide transparent stream API.&lt;/li&gt;
	&lt;li&gt;aggregate all related classpath-related parameters in a simple component (jar URLs, resource predicates, monitored resource pattern, default charset etc)&lt;/li&gt;
	&lt;li&gt;revise the purpose, naming and role of &lt;tt&gt;ClasspathScannerService&lt;/tt&gt; - each time after scanning it has info about current resources and yet we have to maintain a copy of resource cache in &lt;tt&gt;ClasspathResourceOrigin&lt;/tt&gt; manually. It is proposed to introduce &lt;tt&gt;ClasspathService&lt;/tt&gt; which would be a centralised access point of classpath entry hierarchy, origin itself would be just a consumer of such service.&lt;/li&gt;
	&lt;li&gt;introduce a alternative (light!) version of such service for production mode - essentially no monitoring, less overhead, ful relying on context classloader.&lt;/li&gt;
	&lt;li&gt;the solution has to be tested against cases of excessive data served via classpath (hundreds/thousands of resources)&lt;/li&gt;
	&lt;li&gt;solution has to be tested against most common app servers and at least in IntelliJ and Eclipse&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="50060">MAGNOLIA-6523</key>
            <summary>Refactor ClasspathResourceOrigin and stabilise its hot resource modification support</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</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="apchelintcev">Aleksandr Pchelintcev</assignee>
                                    <reporter username="mmuehlebach">Michael M&#252;hlebach</reporter>
                        <labels>
                    </labels>
                <created>Mon, 1 Feb 2016 10:28:48 +0100</created>
                <updated>Mon, 4 Apr 2016 11:38:44 +0200</updated>
                            <resolved>Tue, 16 Feb 2016 08:34:11 +0100</resolved>
                                                    <fixVersion>5.4.5</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</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="187200">6.5d</timespent>
                                    <issuelinks>
                            <issuelinktype id="10040">
                    <name>causality</name>
                                                                <inwardlinks description="is causing">
                                        <issuelink>
            <issuekey id="51110">MAGNOLIA-6612</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="50586">MAGNOLIA-6575</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="50649">MAGNOLIA-6581</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="48867">MAGNOLIA-6440</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="50071">MAGNOLIA-6527</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="50068">MAGNOLIA-6524</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="50069">MAGNOLIA-6525</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="47860">MAGNOLIA-6376</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10022">
                    <name>supersession</name>
                                            <outwardlinks description="supersedes">
                                        <issuelink>
            <issuekey id="47113">MAGNOLIA-6338</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="49965">MAGNOLIA-6514</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="49497">MAGNOLIA-6469</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="49844">MAGNOLIA-6501</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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>Mon, 15 Feb 2016 15:19:21 +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_10246" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>MAGNOLIA-6433</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>false</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>mmuehlebach</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            8 years, 2 weeks, 6 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>apchelintcev</customfieldvalue>
            <customfieldvalue>mmuehlebach</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzzzs8:zzr1h</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="187">Basel 31</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>13.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>