Skip to content

Commit 7aabd35

Browse files
committed
Initial bits for lambda trigger events
1 parent 19cf896 commit 7aabd35

File tree

10 files changed

+127
-0
lines changed

10 files changed

+127
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.genexus.cloud.serverless;
2+
3+
import java.util.Date;
4+
5+
public class EventMessage {
6+
private String messageId;
7+
private Date messageDate;
8+
private String messageSourceType;
9+
private String messageData;
10+
private String messageCustomPlayload;
11+
private String messageVersion = "1.0";
12+
}
13+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package com.genexus.cloud.serverless;public class EventMessageResponse {
2+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.genexus.cloud.serverless;
2+
3+
public class EventMessageSourceType {
4+
public static String QueueMessage = "QueueMessage";
5+
public static String ServiceBusMessage = "ServiceBusMessage";
6+
public static String Timer = "Timer";
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package com.genexus.cloud.serverless;public class EventMessages {
2+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package com.genexus.cloud.serverless;public class Helper {
2+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.genexus.cloud.serverless.aws;
2+
3+
public class EventMessageAttribute {
4+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.genexus.cloud.serverless.aws;
2+
3+
import com.amazonaws.services.lambda.runtime.Context;
4+
import com.amazonaws.services.lambda.runtime.RequestHandler;
5+
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
6+
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
7+
import com.genexus.diagnostics.core.ILogger;
8+
import com.genexus.specific.java.Connect;
9+
import com.genexus.specific.java.LogManager;
10+
import com.genexus.util.IniFile;
11+
12+
13+
public class LambdaBaseHandler {
14+
protected static ILogger logger = null;
15+
protected static Class<?> entryPointClass = null;
16+
private static final String GX_APPLICATION_CLASS = "GXcfg";
17+
private static String ENTRY_POINT_CLASS_NAME_VAR = "GX_MAIN_CLASS_NAME";
18+
private static String packageName = null;
19+
protected static final String MESSAGE_INPUT_CLASS_NAME = "com.genexusserverlessapi.genexusserverlessapi.SdtEventMessages";
20+
protected static final String MESSAGE_OUTPUT_COLLECTION_CLASS_NAME = "com.genexusserverlessapi.genexusserverlessapi.SdtEventMessageResponse";
21+
22+
23+
public LambdaBaseHandler() throws Exception {
24+
initialize();
25+
}
26+
27+
private static void initialize() throws Exception {
28+
logger = LogManager.initialize(".", LambdaBaseHandler.class);
29+
Connect.init();
30+
31+
String entryPointClassName = System.getenv(ENTRY_POINT_CLASS_NAME_VAR);
32+
if (entryPointClassName == null) {
33+
throw new Exception(String.format("'%s' Environment Variable must be defined", ENTRY_POINT_CLASS_NAME_VAR));
34+
}
35+
36+
IniFile config = com.genexus.ConfigFileFinder.getConfigFile(null, "client.cfg", null);
37+
packageName = config.getProperty("Client", "PACKAGE", null);
38+
Class<?> cfgClass;
39+
try {
40+
cfgClass = Class.forName(packageName.isEmpty() ? GX_APPLICATION_CLASS: String.format("%s.%s", packageName, GX_APPLICATION_CLASS));
41+
com.genexus.Application.init(cfgClass);
42+
entryPointClassName = packageName.isEmpty() ? entryPointClassName: String.format("%s.%s", packageName, entryPointClassName);
43+
logger.debug("Initializing entry Point ClassName: " + entryPointClassName);
44+
entryPointClass = Class.forName(entryPointClassName);
45+
} catch (Exception e) {
46+
logger.error(String.format("Failed to initialize Application for className: %s", entryPointClassName), e);
47+
throw e;
48+
}
49+
}
50+
}
51+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.genexus.cloud.serverless.aws;
2+
3+
import com.amazonaws.services.lambda.runtime.Context;
4+
import com.amazonaws.services.lambda.runtime.RequestHandler;
5+
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
6+
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
7+
import com.genexus.GxUserType;
8+
import com.genexus.ModelContext;
9+
10+
import java.lang.reflect.Constructor;
11+
12+
13+
public class LambdaSQSHandler extends LambdaBaseHandler implements RequestHandler<SQSEvent, Void> {
14+
15+
public LambdaSQSHandler() throws Exception {
16+
super();
17+
}
18+
19+
@Override
20+
public Void handleRequest(SQSEvent sqsEvent, Context context) {
21+
logger.debug("handleRequest start");
22+
23+
for(SQSMessage msg : sqsEvent.getRecords()){
24+
logger.debug(String.format("Processing sqsEvent Message: %s", msg.getMessageId()));
25+
26+
try {
27+
ModelContext modelContext = new ModelContext( entryPointClass );
28+
Object[] parameters = new Object[2];
29+
30+
Class<?> eventMessagesClass = Class.forName(MESSAGE_INPUT_CLASS_NAME);
31+
Constructor constructor = eventMessagesClass.getConstructor(ModelContext.class);
32+
GxUserType inputMessage = (GxUserType) constructor.newInstance(modelContext);
33+
34+
com.genexus.db.DynamicExecute.dynamicExecute(modelContext, -1, entryPointClass, entryPointClass.getName(), parameters);
35+
}
36+
catch (Exception e) {
37+
logger.error("HandleRequest failed: " + entryPointClass.getName(), e);
38+
}
39+
40+
}
41+
return null;
42+
}
43+
}
44+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package com.genexus.cloud.aws.events;public class TestLambdaBaseHandler {
2+
}

0 commit comments

Comments
 (0)