[
https://issues.apache.org/jira/browse/WW-4793?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16000548#comment-16000548
]
Lukasz Lenart commented on WW-4793:
-----------------------------------
I'm not sure what's the problem here, this line here
{code:java}
configurationManager.addContainerProvider(new
FileManagerProvider(JBossFileManager.class, "jboss"));
{code}
only registers a new {{FileManager}} implementation under the name {{jboss}},
it's the same as with any other bean we have in {{struts-default.xml}} - it
must be here (in {{Dispatcher}}) as the {{FileManager}} is used in a very early
state of booting the framework.
If you check usage of the {{FileManagerFactory#getFileManager()}} method you
will notice it's used 6 times (7 to be correct but
{{AnnotationActionValidatorManager}} is used by default instead of
{{DefaultActionValidatorManager}}), so 12 calls is ok, 6 times when booting,
and 6 times when reloading the framework after the initial boot.
And that static method does exactly what the {{FileManager}}'s {{support}}
method does but right now you have introduced a hard dependency between
{{Dispatcher}} and {{JBossFileManager}} using the static method - I'm not a fan
of such things.
The best option I see here is to remove the line
{{configurationManager.addContainerProvider(new
FileManagerProvider(JBossFileManager.class, "jboss"));}} and put a note into
docs about how to configure Struts 2 when running on JBoss.
https://struts.apache.org/docs/webxml.html#web.xml-CustomFileManagerandFileManagerFactoryimplementations
> Don't add JBossFileManager as a possible FileManager when not on JBoss
> ----------------------------------------------------------------------
>
> Key: WW-4793
> URL: https://issues.apache.org/jira/browse/WW-4793
> Project: Struts 2
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.5.10
> Reporter: Stefaan Dutry
> Priority: Trivial
> Fix For: 2.5.next
>
>
> When the application starts and there is no FileManager specified as
> initParam, the {{JBossFileManager}} gets added.
> This results in the check happening everytime a FileManager is requested.
> (When turning on logging, i can see it happening 12 times when starting a
> simple application)
> {code:java|title=org.apache.struts2.dispatcher.Dispatcher}
> ...
> private void init_FileManager() throws ClassNotFoundException {
> if (initParams.containsKey(StrutsConstants.STRUTS_FILE_MANAGER)) {
> ...
> } else {
> // add any other Struts 2 provided implementations of FileManager
> configurationManager.addContainerProvider(new
> FileManagerProvider(JBossFileManager.class, "jboss"));
> }
> ...
> }
> ...
> {code}
> {code:java|title=com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory}
> private FileManager lookupFileManager() {
> Set<String> names = container.getInstanceNames(FileManager.class);
> ...
> for (FileManager fm : internals) {
> if (fm.support()) {
> return fm;
> }
> }
> return null;
> }
> {code}
> My suggestion would be to not add it if it's not supported.
> I don't know what the best way to do this would be.
> The possibility i was thinking of so far involves the following:
> * Creating a seperate utility class to check if it can support it
> ** perhaps a public static innerclass of {{JBossFileManager}} with public
> static method(s) to check it?
> ** or a seperate class (although i think this might be awkward)
> * adding a test around adding the JBossFileManager to only do it when it
> could be supported.
> additional information:
> * log messages were noticed by adjusting the log4j2 configuration in the
> {{form-processing}} application from {{struts-examples}} and starting it.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)