From ebcf1d774bb40fbfbf18f1a42d5f023aab3a6f5a Mon Sep 17 00:00:00 2001 From: iroqueta Date: Fri, 25 Mar 2022 11:30:18 -0300 Subject: [PATCH 1/3] =?UTF-8?q?When=20try=20to=20read=20gx=20properties=20?= =?UTF-8?q?that=20are=20in=20datasource=20section=20in=20environment=20var?= =?UTF-8?q?iables,=20first=20try=20to=20find=20it=20without=20namespace.?= =?UTF-8?q?=20For=20example=20=E2=80=9CGX=20=5FDEFAULT=5FDB=5FURL=E2=80=9D?= =?UTF-8?q?=20=20before=20GX=5FCOM=5FMYNAMESPACE=5FDEFAULT=5FDB=5FURL?= =?UTF-8?q?=E2=80=9D=20Issue:=2095391?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/genexus/ModelContext.java | 5 +- .../java/com/genexus/util/EnvVarReader.java | 22 +++++- gxawsserverless/pom.xml | 18 +++++ .../test/jersey/GeneXusAppAwsProxyTest.java | 3 + .../proxy/test/jersey/JerseyAwsProxyTest.java | 3 + .../java/com/genexus/TestGxReadEnvVar.java | 71 +++++++++++++++++++ 6 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 java/src/test/java/com/genexus/TestGxReadEnvVar.java diff --git a/common/src/main/java/com/genexus/ModelContext.java b/common/src/main/java/com/genexus/ModelContext.java index 4df97fdcc..dea77868e 100644 --- a/common/src/main/java/com/genexus/ModelContext.java +++ b/common/src/main/java/com/genexus/ModelContext.java @@ -92,6 +92,9 @@ public ModelContext(Class packageClass) } SpecificImplementation.Application.setContextClassName(this.packageClass); + + if (threadModelContext.get() == null) + threadModelContext.set(this); try { this.staticContentBase = getClientPreferences().getWEB_IMAGE_DIR(); @@ -104,8 +107,6 @@ public ModelContext(Class packageClass) } if (httpContext != null) httpContext.setStaticContentBase(staticContentBase); - if (threadModelContext.get() == null) - threadModelContext.set(this); } public ModelContext(ModelContext modelContext) diff --git a/common/src/main/java/com/genexus/util/EnvVarReader.java b/common/src/main/java/com/genexus/util/EnvVarReader.java index 4fb70c2bb..69a5f8f00 100644 --- a/common/src/main/java/com/genexus/util/EnvVarReader.java +++ b/common/src/main/java/com/genexus/util/EnvVarReader.java @@ -1,5 +1,7 @@ package com.genexus.util; +import com.genexus.ModelContext; + public class EnvVarReader { static String[] m_invalidChars = { ".", "|" }; @@ -12,15 +14,29 @@ public static String getEnvironmentVar(String section, String key, String mapped }else{ String prefix = ENVVAR_PREFIX; if (section != null && !section.isEmpty() && section != "Client") { - for (int i = 0; i < m_invalidChars.length; i++) - section = section.replace(m_invalidChars[i], "_"); - key = String.format("%s%s_%s", prefix, section.toUpperCase(), key.toUpperCase()); + String realKey = key; + section = replaceInvalidChars(section); + String sectionWithNamespce = section; + if (ModelContext.getModelContext() != null) { + section = section.replace(replaceInvalidChars(ModelContext.getModelContext().getPackageName() + "|").toUpperCase(), ""); + key = String.format("%s%s_%s", prefix, section.toUpperCase(), key.toUpperCase()); + String envVar = System.getenv(key); + if (envVar != null) + return envVar; + } + key = String.format("%s%s_%s", prefix, sectionWithNamespce.toUpperCase(), realKey.toUpperCase()); } else key = String.format("%s%s", prefix, key.toUpperCase()); return System.getenv(key); } } + private static String replaceInvalidChars(String section) { + for (int i = 0; i < m_invalidChars.length; i++) + section = section.replace(m_invalidChars[i], "_"); + return section; + } + public static String getEnvironmentValue(String serviceType, String serviceName, String propertyName) { String envVarName = String.format("%s%s_%s", ENVVAR_PREFIX, serviceType.toUpperCase(), propertyName.toUpperCase()); String value = System.getenv(envVarName); diff --git a/gxawsserverless/pom.xml b/gxawsserverless/pom.xml index 84b407341..20028a07b 100644 --- a/gxawsserverless/pom.xml +++ b/gxawsserverless/pom.xml @@ -25,6 +25,24 @@ ${project.version} + + ${project.groupId} + gxcommon + ${project.version} + + + + ${project.groupId} + gxwrapperjavax + ${project.version} + + + + ${project.groupId} + gxwrappercommon + ${project.version} + + com.amazonaws.serverless aws-serverless-java-container-jersey diff --git a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java index 7ef778507..de991eada 100644 --- a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java +++ b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/GeneXusAppAwsProxyTest.java @@ -24,6 +24,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.genexus.cloud.serverless.aws.LambdaHandler; +import com.genexus.specific.java.Connect; import org.glassfish.jersey.server.ResourceConfig; import org.junit.Before; import org.junit.Ignore; @@ -45,6 +46,8 @@ public class GeneXusAppAwsProxyTest { @Before public void setUpStreams() { + Connect.init(); + try { System.setProperty("LAMBDA_TASK_ROOT", "."); l = new LambdaHandler(); diff --git a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java index 5b589dbbb..c96c52f38 100644 --- a/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java +++ b/gxawsserverless/src/test/java/com/genexus/serverless/proxy/test/jersey/JerseyAwsProxyTest.java @@ -21,6 +21,7 @@ import java.io.FileInputStream; import java.io.IOException; +import com.genexus.specific.java.Connect; import com.genexus.webpanels.GXObjectUploadServices; import org.glassfish.jersey.server.ResourceConfig; import org.junit.Test; @@ -58,6 +59,8 @@ public class JerseyAwsProxyTest { @Before public void setUpStreams() { + Connect.init(); + try { System.setProperty("LAMBDA_TASK_ROOT", "."); l = new LambdaHandler(); diff --git a/java/src/test/java/com/genexus/TestGxReadEnvVar.java b/java/src/test/java/com/genexus/TestGxReadEnvVar.java new file mode 100644 index 000000000..a167fb66e --- /dev/null +++ b/java/src/test/java/com/genexus/TestGxReadEnvVar.java @@ -0,0 +1,71 @@ +package com.genexus; + + +import com.genexus.specific.java.Connect; +import com.genexus.util.EnvVarReader; +import org.junit.Assert; +import org.junit.Test; + +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class TestGxReadEnvVar { + + private static final String GX_PROP = "DB_URL"; + private static final String GX_DATASTORE = "COM.MOCKDB|DEFAULT"; + private static final String FIRST_ENV_VAR = "GX_COM_MOCKDB_DEFAULT_DB_URL"; + private static final String SECOND_ENV_VAR = "GX_DEFAULT_DB_URL"; + private static final String FIRST_VALUE = "FirstDB_URL"; + private static final String SECOND_VALUE = "SecondDB_URL"; + + @Test + public void testGxReadEnvVar() + { + Connect.init(); + ModelContext modelContext = ModelContext.getModelContext(com.mockdb.GXcfg.class); + try { + Map newenv = new HashMap<>(); + newenv.put(FIRST_ENV_VAR, FIRST_VALUE); + setEnvVar(newenv); + String envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null); + Assert.assertEquals(FIRST_VALUE, envVarValue); + + newenv.put(SECOND_ENV_VAR, SECOND_VALUE); + setEnvVar(newenv); + envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null); + Assert.assertEquals(SECOND_VALUE, envVarValue); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void setEnvVar(Map newenv) throws Exception{ + try { + Class processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); + Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment"); + theEnvironmentField.setAccessible(true); + Map env = (Map) theEnvironmentField.get(null); + env.putAll(newenv); + Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); + theCaseInsensitiveEnvironmentField.setAccessible(true); + Map cienv = (Map) theCaseInsensitiveEnvironmentField.get(null); + cienv.putAll(newenv); + } catch (NoSuchFieldException e) + { + Class[] classes = Collections.class.getDeclaredClasses(); + Map env = System.getenv(); + for (Class cl : classes) { + if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) { + Field field = cl.getDeclaredField("m"); + field.setAccessible(true); + Object obj = field.get(env); + Map map = (Map) obj; + map.clear(); + map.putAll(newenv); + } + } + } + } +} From e4785ba111349f8893448dcaaec6b00a44d9a5fc Mon Sep 17 00:00:00 2001 From: iroqueta Date: Fri, 25 Mar 2022 12:22:18 -0300 Subject: [PATCH 2/3] =?UTF-8?q?When=20try=20to=20read=20gx=20properties=20?= =?UTF-8?q?that=20are=20in=20datasource=20section=20in=20environment=20var?= =?UTF-8?q?iables=20if=20dont=20exists=20try=20to=20find=20it=20without=20?= =?UTF-8?q?namespace.=20For=20example=20=E2=80=9CGX=20=5FDEFAULT=5FDB=5FUR?= =?UTF-8?q?L=E2=80=9D=20=20after=20GX=5FCOM=5FMYNAMESPACE=5FDEFAULT=5FDB?= =?UTF-8?q?=5FURL=E2=80=9D=20Issue:=2095391?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/genexus/util/EnvVarReader.java | 15 ++++++++------- .../test/java/com/genexus/TestGxReadEnvVar.java | 4 ++-- java/src/test/java/com/mockdb/GXcfg.java | 13 +++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 java/src/test/java/com/mockdb/GXcfg.java diff --git a/common/src/main/java/com/genexus/util/EnvVarReader.java b/common/src/main/java/com/genexus/util/EnvVarReader.java index 69a5f8f00..12673089f 100644 --- a/common/src/main/java/com/genexus/util/EnvVarReader.java +++ b/common/src/main/java/com/genexus/util/EnvVarReader.java @@ -14,17 +14,18 @@ public static String getEnvironmentVar(String section, String key, String mapped }else{ String prefix = ENVVAR_PREFIX; if (section != null && !section.isEmpty() && section != "Client") { - String realKey = key; section = replaceInvalidChars(section); - String sectionWithNamespce = section; + String realKey = key; + key = String.format("%s%s_%s", prefix, section.toUpperCase(), key.toUpperCase()); + String envVar = System.getenv(key); + if (envVar != null) + return envVar; if (ModelContext.getModelContext() != null) { section = section.replace(replaceInvalidChars(ModelContext.getModelContext().getPackageName() + "|").toUpperCase(), ""); - key = String.format("%s%s_%s", prefix, section.toUpperCase(), key.toUpperCase()); - String envVar = System.getenv(key); - if (envVar != null) - return envVar; + key = String.format("%s%s_%s", prefix, section.toUpperCase(), realKey.toUpperCase()); } - key = String.format("%s%s_%s", prefix, sectionWithNamespce.toUpperCase(), realKey.toUpperCase()); + else + return null; } else key = String.format("%s%s", prefix, key.toUpperCase()); return System.getenv(key); diff --git a/java/src/test/java/com/genexus/TestGxReadEnvVar.java b/java/src/test/java/com/genexus/TestGxReadEnvVar.java index a167fb66e..8c22298d6 100644 --- a/java/src/test/java/com/genexus/TestGxReadEnvVar.java +++ b/java/src/test/java/com/genexus/TestGxReadEnvVar.java @@ -15,8 +15,8 @@ public class TestGxReadEnvVar { private static final String GX_PROP = "DB_URL"; private static final String GX_DATASTORE = "COM.MOCKDB|DEFAULT"; - private static final String FIRST_ENV_VAR = "GX_COM_MOCKDB_DEFAULT_DB_URL"; - private static final String SECOND_ENV_VAR = "GX_DEFAULT_DB_URL"; + private static final String FIRST_ENV_VAR = "GX_DEFAULT_DB_URL"; + private static final String SECOND_ENV_VAR = "GX_COM_MOCKDB_DEFAULT_DB_URL"; private static final String FIRST_VALUE = "FirstDB_URL"; private static final String SECOND_VALUE = "SecondDB_URL"; diff --git a/java/src/test/java/com/mockdb/GXcfg.java b/java/src/test/java/com/mockdb/GXcfg.java new file mode 100644 index 000000000..c6d044826 --- /dev/null +++ b/java/src/test/java/com/mockdb/GXcfg.java @@ -0,0 +1,13 @@ +package com.mockdb ; +import com.genexus.*; + +public final class GXcfg +{ + public static int strcmp( String Left , + String Right ) + { + return GXutil.rtrim(Left).compareTo(GXutil.rtrim(Right)); + } + +} + From 1f46060d563c9f0cecec3e8f1f2102bbadf6164d Mon Sep 17 00:00:00 2001 From: iroqueta Date: Mon, 28 Mar 2022 18:42:34 -0300 Subject: [PATCH 3/3] =?UTF-8?q?When=20try=20to=20read=20gx=20properties=20?= =?UTF-8?q?that=20are=20in=20datasource=20section=20in=20environment=20var?= =?UTF-8?q?iables=20if=20dont=20exists=20try=20to=20find=20it=20without=20?= =?UTF-8?q?namespace.=20For=20example=20=E2=80=9CGX=20=5FDEFAULT=5FDB=5FUR?= =?UTF-8?q?L=E2=80=9D=20=20after=20GX=5FCOM=5FMYNAMESPACE=5FDEFAULT=5FDB?= =?UTF-8?q?=5FURL=E2=80=9D=20Issue:=2095391?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java/src/test/java/com/genexus/TestGxReadEnvVar.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/src/test/java/com/genexus/TestGxReadEnvVar.java b/java/src/test/java/com/genexus/TestGxReadEnvVar.java index 8c22298d6..6867818fc 100644 --- a/java/src/test/java/com/genexus/TestGxReadEnvVar.java +++ b/java/src/test/java/com/genexus/TestGxReadEnvVar.java @@ -36,6 +36,10 @@ public void testGxReadEnvVar() setEnvVar(newenv); envVarValue = EnvVarReader.getEnvironmentVar(GX_DATASTORE, GX_PROP, null); Assert.assertEquals(SECOND_VALUE, envVarValue); + newenv.put(FIRST_ENV_VAR, null); + setEnvVar(newenv); + newenv.put(SECOND_ENV_VAR, null); + setEnvVar(newenv); } catch (Exception e) { e.printStackTrace(); }