[
https://issues.apache.org/jira/browse/SLING-12516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17906508#comment-17906508
]
Scott Yuan commented on SLING-12516:
------------------------------------
Note that the proposed changes can wait until the work in SLING-12518 is
completed first.
> Improving SlingContext by Replacing Deprecated Context() API with
> Context(ContextFactory)
> -----------------------------------------------------------------------------------------
>
> Key: SLING-12516
> URL: https://issues.apache.org/jira/browse/SLING-12516
> Project: Sling
> Issue Type: Improvement
> Components: Scripting
> Affects Versions: Scripting JavaScript 3.1.4
> Reporter: Scott Yuan
> Priority: Minor
> Original Estimate: 15h
> Remaining Estimate: 15h
>
> The current SlingContext implementation extends
> org.mozilla.javascript.Context to introduce useful new global functions that
> are not part of the ECMAScript standard. This is achieved by overriding the
> initStandardObject() method using the now-deprecated default Context()
> constructor.
> The Context() constructor was deprecated due to its reliance on a global
> static singleton context factory (see Rhino Context.java). This creates a
> dependency on a global state and introduces limitations. Specifically, the
> current approach injects SlingContextFactory as the default global factory of
> the Rhino engine during initialization (lines #48–#57). However, this
> approach has a significant caveat: the Sling JavaScript Engine fails if a
> global factory has already been set.
> {code:java}
> // conditionally setup the global ContextFactory to be ours. If
> // a global context factory has already been set, we have lost
> // and cannot set this one.
> public static void setup(ScopeProvider sp, int languageVersion) {
> // TODO what do we do in the other case? debugger won't work
> if (!hasExplicitGlobal()) {
> initGlobal(new SlingContextFactory(sp,
> Context.isValidLanguageVersion(languageVersion) ?
> languageVersion : Context.VERSION_DEFAULT));
> }
> }
> {code}
> To future-proof the Apache Sling Scripting JavaScript module and eliminate
> these concerns, an improvement could be made by migrating to the
> Context(ContextFactory factory) constructor. This approach avoids relying on
> global variable-based injection and aligns better with modern practices,
> addressing the issues highlighted in the code comments.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)