[struts] branch struts-2-5-x updated (8293add -> 12c3d23)
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
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
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)
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 ...
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