[ 
https://issues.apache.org/jira/browse/WW-4793?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16001477#comment-16001477
 ] 

Stefaan Dutry commented on WW-4793:
-----------------------------------

[~lukaszlenart]

{quote}
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.
{quote}
It's true that this is only done at the moment of booting or reloading the 
framework, and therefore will never cause a performance issue. My thought was 
that this was a redundant thing to keep checking when you know it's not going 
to change after the first check, and in that way, even adding it to be checked 
every time. (technicaly support might be added at runtime using reflection on 
the classloader)

{quote}
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.
{quote}
I'm afraid i don't fully understand what you mean here. How does adding a 
static method to the class that's already been referenced, and as far as i can 
tell, would always get instantiated, make this dependency harder? Please 
elaborate so i can take this into account in the future.

{quote}
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.
{quote}
Does this mean that the code wouldn't run on JBoss if the JBossFileManager 
isn't present in the configuration? If that's the case, i'd rather keep it as 
it is than remove the class. (maybe adding a minor configuration optimization 
to the docs for when not running on JBoss then)

Thx for the feedback.

> 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)

Reply via email to