-
Notifications
You must be signed in to change notification settings - Fork 7
/
LambdaStub.java
36 lines (29 loc) · 1.26 KB
/
LambdaStub.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package portkey;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import clojure.java.api.Clojure;
import clojure.lang.IFn;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
public class LambdaStub implements RequestStreamHandler {
static {
IFn require = Clojure.var("clojure.core", "require");
require.invoke(Clojure.read("portkey.kryo"));
IFn unfreeze = Clojure.var("portkey.kryo", "unfreeze");
try {
// removing the .getClassLoader() below makes getResource to return null
// certainly due to the fact that we are in the static init.
URL resource = LambdaStub.class.getClassLoader().getResource("bootstrap.kryo");
handler = resource != null ? (IFn) ((IFn) unfreeze.invoke(resource)).invoke() : null;
} catch (Exception e) {
throw (e instanceof RuntimeException) ? (RuntimeException) e : new RuntimeException(e);
}
}
public final static IFn handler;
@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
handler.invoke(input, output, context);
}
}