All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.mobileconnectors.lambdainvoker.LambdaInvokerFactory Maven / Gradle / Ivy

Go to download

The AWS Android SDK for AWS Lambda module holds the client classes that are used for communicating with AWS Lambda Service

There is a newer version: 2.8.4
Show newest version
/*
 * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.amazonaws.mobileconnectors.lambdainvoker;

import android.content.Context;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.mobileconnectors.util.ClientContext;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClient;

import java.lang.reflect.Proxy;

/**
 * A factory class that creates a dynamic proxy object backed by Lambda service.
 */
public class LambdaInvokerFactory {

    // -------------------------------------------------------------
    // Methods - Public - Static
    // -------------------------------------------------------------

    private final AWSLambda lambda;
    private final ClientContext clientContext;

    /**
     * Constructs a Lambda invoker factory object.
     *
     * @param context context of the app. A client context will be created from
     *            the given context.
     * @param region region of Lambda service
     * @param provider a AWS credentials provider
     */
    public LambdaInvokerFactory(Context context, Regions region, AWSCredentialsProvider provider) {
        this(context, region, provider, new ClientConfiguration());
    }

    /**
     * Constructs a Lambda invoker factory object. If your Lambda function takes
     * a long time to finish (longer than the default socket timeout of 15
     * seconds), you can increase the timeout via {@link ClientConfiguration} .
     *
     * 
     * ClientConfiguration config = new ClientConfiguration();
     * config.setSocketTimeout(5 * 60 * 1000); // 5 minutes
     * LambdaInvokerFactory factory = new LambdaInvokerFactory(context, region,
     *         provider, config);
     * 
* * @param context context of the app. A client context will be created from * the given context. * @param region region of Lambda service * @param provider a AWS credentials provider * @param clientConfiguration client configuration for the factory */ public LambdaInvokerFactory(Context context, Regions region, AWSCredentialsProvider provider, ClientConfiguration clientConfiguration) { if (context == null) { throw new IllegalArgumentException("context can't be null"); } if (provider == null) { throw new IllegalArgumentException("provider can't be null"); } // constructs a lambda client lambda = new AWSLambdaClient(provider, clientConfiguration); lambda.setRegion(Region.getRegion(region)); clientContext = new ClientContext(context); } /** * Constructs a Lambda invoker factory object. * * @param lambda a lambda client * @param clientContext client context object */ LambdaInvokerFactory(AWSLambda lambda, ClientContext clientContext) { this.lambda = lambda; this.clientContext = clientContext; } /** * Contexts a dynamic proxy object of the given class with a default Json * data binder. * * @param interfaceClass the class to be dynamically proxied by Lambda * @return a dynamic proxy object of the given class */ public T build(Class interfaceClass) { return build(interfaceClass, new LambdaJsonBinder()); } /** * Contexts a dynamic proxy object of the given class. * * @param interfaceClass the class to be dynamically proxied by Lambda * @param binder a data binder to convert between POJO and byte stream. * @return a dynamic proxy object of the given class */ public T build(Class interfaceClass, LambdaDataBinder binder) { Object proxy = Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[] { interfaceClass }, new LambdaInvocationHandler(lambda, binder, clientContext)); return interfaceClass.cast(proxy); } /** * Gets the client context associated with this factory. Changes to the * client context will affect all proxy objects created by this factory, * including those were created. * * @return client context */ public ClientContext getClientContext() { return clientContext; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy