diff --git a/common/src/main/java/com/genexus/ModelContext.java b/common/src/main/java/com/genexus/ModelContext.java
index fe4a93846..0a014aca6 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..12673089f 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,30 @@ 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], "_");
+ section = replaceInvalidChars(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(), realKey.toUpperCase());
+ }
+ else
+ return null;
} 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 07e34fc84..ec180cc8d 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..6867818fc
--- /dev/null
+++ b/java/src/test/java/com/genexus/TestGxReadEnvVar.java
@@ -0,0 +1,75 @@
+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_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";
+
+ @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);
+ newenv.put(FIRST_ENV_VAR, null);
+ setEnvVar(newenv);
+ newenv.put(SECOND_ENV_VAR, null);
+ setEnvVar(newenv);
+ } 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);
+ }
+ }
+ }
+ }
+}