[struts] branch struts-2-5-x updated (8293add -> 12c3d23)

2018-11-03 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch struts-2-5-x
in repository https://gitbox.apache.org/repos/asf/struts.git.


from 8293add  Merge pull request #257 from 
JCgH4164838Gh792C124B5/localS2_2_5_x_Branch
 add bac0f29  monitor not-monitored loaded files on demand
 add ecb7bee  not miss container provided fileUrl and ...
 new 12c3d23  Merge pull request #260 from yasserzamani/WW-4974

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../xwork2/util/fs/DefaultFileManager.java | 23 +--
 .../apache/struts2/util/fs/JBossFileManager.java   |  2 +-
 .../providers/XmlConfigurationProviderTest.java| 45 +++---
 ...k-test-wildcard-1.xml => xwork-test-reload.xml} |  8 ++--
 4 files changed, 64 insertions(+), 14 deletions(-)
 copy 
core/src/test/resources/com/opensymphony/xwork2/config/providers/{xwork-test-wildcard-1.xml
 => xwork-test-reload.xml} (84%)



[struts] 01/01: Merge pull request #260 from yasserzamani/WW-4974

2018-11-03 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch struts-2-5-x
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 12c3d23bdf036b2413fe1d5533af66e3bebb9ce6
Merge: 8293add ecb7bee
Author: Lukasz Lenart 
AuthorDate: Sat Nov 3 10:47:09 2018 +0100

Merge pull request #260 from yasserzamani/WW-4974

WW-4974 monitor not-monitored loaded files on demand

 .../xwork2/util/fs/DefaultFileManager.java | 23 +--
 .../apache/struts2/util/fs/JBossFileManager.java   |  2 +-
 .../providers/XmlConfigurationProviderTest.java| 45 +++---
 .../xwork2/config/providers/xwork-test-reload.xml  | 31 +++
 4 files changed, 90 insertions(+), 11 deletions(-)



[struts] 01/02: monitor not-monitored loaded files on demand

2018-11-03 Thread yasserzamani
This is an automated email from the ASF dual-hosted git repository.

yasserzamani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 1a84bf8f94d31d03311d61781da84a5f36e740b9
Author: Yasser Zamani 
AuthorDate: Wed Oct 31 19:51:37 2018 +0330

monitor not-monitored loaded files on demand

See WW-4974

(cherry picked from commit bac0f29)
---
 .../xwork2/util/fs/DefaultFileManager.java | 26 ++
 .../apache/struts2/util/fs/JBossFileManager.java   |  2 +-
 .../providers/XmlConfigurationProviderTest.java| 12 +-
 3 files changed, 29 insertions(+), 11 deletions(-)

diff --git 
a/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java 
b/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
index 21d6cc0..d39e914 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
@@ -40,7 +40,7 @@ public class DefaultFileManager implements FileManager {
 private static final Pattern JAR_PATTERN = 
Pattern.compile("^(jar:|wsjar:|zip:|vfsfile:|code-source:)?(file:)?(.*?)(\\!/|\\.jar/)(.*)");
 private static final int JAR_FILE_PATH = 3;
 
-protected static Map files = 
Collections.synchronizedMap(new HashMap());
+protected static final Map files = 
Collections.synchronizedMap(new HashMap());
 
 protected boolean reloadingConfigs = false;
 
@@ -48,6 +48,22 @@ public class DefaultFileManager implements FileManager {
 }
 
 public void setReloadingConfigs(boolean reloadingConfigs) {
+if (reloadingConfigs && !this.reloadingConfigs) {
+this.reloadingConfigs = true;
+//starting monitoring not-monitored loaded files on demand
+synchronized (files) {
+for (String fileName :
+files.keySet()) {
+if (null == files.get(fileName)) {
+try {
+monitorFile(new URL(fileName));
+} catch (MalformedURLException e) {
+LOG.warn("Error creating URL from [{}]!", 
fileName, e);
+}
+}
+}
+}
+}
 this.reloadingConfigs = reloadingConfigs;
 }
 
@@ -70,9 +86,7 @@ public class DefaultFileManager implements FileManager {
 return null;
 }
 InputStream is = openFile(fileUrl);
-if (reloadingConfigs) {
-monitorFile(fileUrl);
-}
+monitorFile(fileUrl);
 return is;
 }
 
@@ -90,6 +104,10 @@ public class DefaultFileManager implements FileManager {
 
 public void monitorFile(URL fileUrl) {
 String fileName = fileUrl.toString();
+if (!reloadingConfigs) {
+files.put(fileName, null);
+return;
+}
 Revision revision;
 LOG.debug("Creating revision for URL: {}", fileName);
 if (isJarURL(fileUrl)) {
diff --git 
a/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java 
b/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java
index b3a19a7..7b7de30 100644
--- a/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java
+++ b/core/src/main/java/org/apache/struts2/util/fs/JBossFileManager.java
@@ -81,7 +81,7 @@ public class JBossFileManager extends DefaultFileManager {
 
 @Override
 public void monitorFile(URL fileUrl) {
-if (isJBossUrl(fileUrl)) {
+if (reloadingConfigs && isJBossUrl(fileUrl)) {
 String fileName = fileUrl.toString();
 LOG.debug("Creating revision for URL: {}", fileName);
 URL normalizedUrl = normalizeToFileProtocol(fileUrl);
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
index b66c2ff..63f9b53 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
@@ -80,10 +80,10 @@ public class XmlConfigurationProviderTest extends 
ConfigurationTestBase {
 public void testNeedsReload() throws Exception {
 final String filename = 
"com/opensymphony/xwork2/config/providers/xwork-test-actions.xml";
 ConfigurationProvider provider = new 
XmlConfigurationProvider(filename, true);
-
container.getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs(true);
 container.inject(provider);
 provider.init(configuration);
 provider.loadPackages();
+
container.getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs(true);
 
 assertFalse(provider.needsReload()); // Revi

[struts] branch master updated (9fd8d6f -> b13e785)

2018-11-03 Thread yasserzamani
This is an automated email from the ASF dual-hosted git repository.

yasserzamani pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git.


from 9fd8d6f  WW-4971 Use response encoding for include by default
 new 1a84bf8  monitor not-monitored loaded files on demand
 new b13e785  not miss container provided fileUrl and ...

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../xwork2/util/fs/DefaultFileManager.java | 23 +--
 .../apache/struts2/util/fs/JBossFileManager.java   |  2 +-
 .../providers/XmlConfigurationProviderTest.java| 45 +++---
 ...k-test-wildcard-1.xml => xwork-test-reload.xml} |  8 ++--
 4 files changed, 64 insertions(+), 14 deletions(-)
 copy 
core/src/test/resources/com/opensymphony/xwork2/config/providers/{xwork-test-wildcard-1.xml
 => xwork-test-reload.xml} (84%)



[struts] 02/02: not miss container provided fileUrl and ...

2018-11-03 Thread yasserzamani
This is an automated email from the ASF dual-hosted git repository.

yasserzamani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git

commit b13e7857ffcd40446e2a9629ae49949b3c441c94
Author: Yasser Zamani 
AuthorDate: Thu Nov 1 15:17:02 2018 +0330

not miss container provided fileUrl and ...

lazy monitoring for performance. Fix and test stopping reload configs at 
runtime.

Fixes WW-4974

(cherry picked from commit ecb7bee)
---
 .../xwork2/util/fs/DefaultFileManager.java | 21 ++
 .../providers/XmlConfigurationProviderTest.java| 33 ++
 .../xwork2/config/providers/xwork-test-reload.xml  | 31 
 3 files changed, 73 insertions(+), 12 deletions(-)

diff --git 
a/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java 
b/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
index d39e914..5708bd5 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/fs/DefaultFileManager.java
@@ -41,6 +41,7 @@ public class DefaultFileManager implements FileManager {
 private static final int JAR_FILE_PATH = 3;
 
 protected static final Map files = 
Collections.synchronizedMap(new HashMap());
+private static final List lazyMonitoredFilesCache = 
Collections.synchronizedList(new ArrayList());
 
 protected boolean reloadingConfigs = false;
 
@@ -49,19 +50,13 @@ public class DefaultFileManager implements FileManager {
 
 public void setReloadingConfigs(boolean reloadingConfigs) {
 if (reloadingConfigs && !this.reloadingConfigs) {
+//starting monitoring cached not-monitored files (lazy monitoring 
on demand because of performance)
 this.reloadingConfigs = true;
-//starting monitoring not-monitored loaded files on demand
-synchronized (files) {
-for (String fileName :
-files.keySet()) {
-if (null == files.get(fileName)) {
-try {
-monitorFile(new URL(fileName));
-} catch (MalformedURLException e) {
-LOG.warn("Error creating URL from [{}]!", 
fileName, e);
-}
-}
+synchronized (lazyMonitoredFilesCache) {
+for (URL fileUrl : lazyMonitoredFilesCache) {
+monitorFile(fileUrl);
 }
+lazyMonitoredFilesCache.clear();
 }
 }
 this.reloadingConfigs = reloadingConfigs;
@@ -105,7 +100,9 @@ public class DefaultFileManager implements FileManager {
 public void monitorFile(URL fileUrl) {
 String fileName = fileUrl.toString();
 if (!reloadingConfigs) {
-files.put(fileName, null);
+//reserve file for monitoring on demand because of performance
+files.remove(fileName);
+lazyMonitoredFilesCache.add(fileUrl);
 return;
 }
 Revision revision;
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
index 63f9b53..faa6b93 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderTest.java
@@ -31,6 +31,9 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -94,6 +97,36 @@ public class XmlConfigurationProviderTest extends 
ConfigurationTestBase {
 assertTrue(provider.needsReload());
 }
 
+public void testReload() throws Exception {
+final String filename = 
"com/opensymphony/xwork2/config/providers/xwork-test-reload.xml";
+ConfigurationProvider provider = new 
XmlConfigurationProvider(filename, true);
+loadConfigurationProviders(provider);
+
+assertFalse(provider.needsReload()); // Revision exists and timestamp 
didn't change
+
+File file = new File(getClass().getResource("/" + filename).toURI());
+assertTrue("not exists: " + file.toString(), file.exists());
+
+Path configPath = Paths.get(file.getAbsolutePath());
+String content = new String(Files.readAllBytes(configPath));
+content = content.replaceAll("",
+"");
+Files.write(configPath, content.getBytes()); // user demand: stop 
reloading configs
+
+try {
+assertTrue(provider.needsReload()); // config file has changed in 
previous lines
+
+c