44import java .io .InputStream ;
55import java .io .OutputStream ;
66
7+ import com .amazonaws .serverless .exceptions .ContainerInitializationException ;
8+ import com .amazonaws .serverless .proxy .AsyncInitializationWrapper ;
79import com .amazonaws .serverless .proxy .InitializationTypeHelper ;
10+ import com .amazonaws .serverless .proxy .internal .InitializableLambdaContainerHandler ;
811import com .amazonaws .serverless .proxy .model .AwsProxyResponse ;
912import org .springframework .cloud .function .serverless .web .FunctionClassUtils ;
1013import org .springframework .cloud .function .serverless .web .ServerlessMVC ;
3841 *
3942 */
4043public class SpringDelegatingLambdaContainerHandler implements RequestStreamHandler {
41-
42- private final Class <?>[] startupClasses ;
43-
4444 private final ServerlessMVC mvc ;
45-
4645 private final ObjectMapper mapper ;
47-
4846 private final AwsProxyHttpServletResponseWriter responseWriter ;
4947
50- public SpringDelegatingLambdaContainerHandler () {
48+ public SpringDelegatingLambdaContainerHandler () throws ContainerInitializationException {
5149 this (new Class [] {FunctionClassUtils .getStartClass ()});
5250 }
5351
54- public SpringDelegatingLambdaContainerHandler (Class <?>... startupClasses ) {
55- this .startupClasses = startupClasses ;
56- this .mvc = ServerlessMVC .INSTANCE (this .startupClasses );
52+ public SpringDelegatingLambdaContainerHandler (final Class <?>... startupClasses ) throws ContainerInitializationException {
53+ SpringDelegatingInitHandler initHandler = new SpringDelegatingInitHandler (startupClasses );
5754 if (InitializationTypeHelper .isAsyncInitializationDisabled ()) {
58- mvc .waitForContext ();
59- }
55+ initHandler .initialize ();
56+ } else {
57+ AsyncInitializationWrapper asyncInitWrapper = new AsyncInitializationWrapper ();
58+ asyncInitWrapper .start (initHandler );
59+ }
60+ this .mvc = initHandler .getMvc ();
6061 this .mapper = new ObjectMapper ();
6162 this .responseWriter = new AwsProxyHttpServletResponseWriter ();
6263 }
@@ -68,4 +69,23 @@ public void handleRequest(InputStream input, OutputStream output, Context lambda
6869 AwsProxyResponse awsProxyResponse = AwsSpringHttpProcessingUtils .processRequest (httpServletRequest , mvc , responseWriter );
6970 this .mapper .writeValue (output , awsProxyResponse );
7071 }
72+
73+ private static final class SpringDelegatingInitHandler implements InitializableLambdaContainerHandler {
74+ private ServerlessMVC mvc ;
75+ private final Class <?>[] startupClasses ;
76+
77+ public SpringDelegatingInitHandler (final Class <?>... startupClasses ) {
78+ this .startupClasses = startupClasses ;
79+ }
80+
81+ @ Override
82+ public void initialize () throws ContainerInitializationException {
83+ this .mvc = ServerlessMVC .INSTANCE (this .startupClasses );
84+ this .mvc .waitForContext ();
85+ }
86+
87+ public ServerlessMVC getMvc () {
88+ return this .mvc ;
89+ }
90+ }
7191}
0 commit comments