使用dynamodb的tomcat会话管理器

时间:2017-03-27 13:55:56

标签: java amazon-web-services session tomcat

我正在尝试将tomcat会话管理器与dynamoDB一起使用。

我正在参考这个aws指南http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-tomcat-session-manager.html

他们在指南中提到我们必须使用

    <Context>
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"
         awsAccessKey="myAccessKey"
         awsSecretKey="mySecretKey"
         createIfNotExist="true" />
    </Context>

所以,如果我没有给出任何目标区域,默认情况下会选择us-east-1(因为它在aws文档中提到的.jar文件中是硬编码的)。如果我指定任何区域,它将选择该区域。但我在多个地区有我的应用程序,并希望每个地区有单独的发电机实例。至于多个区域,会话ID不是唯一的,因此我不能对所有区域使用相同的发电机实例。

如何做到,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以更好地创建多个DyanoDB客户端,每个区域一个。您应该使用一些config / prop文件,其中包含不同的aws access-key,secret和config,并基于您在应用程序启动时创建客户端。然后根据您的业务逻辑使用它。

例如: - 我在我的应用程序中使用ProfileCredentialsProvider及以下配置文件,该文件使用多个dynamoDB客户端。

# AWS DynamoDB setting
mumDynamoDB:
  # profile name of aws IAM role which has access to dynamoDB
  profileName: mumdynamoDBdev
  region: ap-south-1 
OrgonDynamoDB:
  # profile name of aws IAM role which has access to dynamoDB
  profileName: OrgdynamoDBdev
  region: us-west-2

下面的代码根据区域和个人资料创建客户。

public static DynamoDB getDocClient(String profileName, String region) {
        // http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/creating-clients.html new way of
        // creating all the aws clients.
        // thread safe impl
        AmazonDynamoDB amazonDynamoDBClient = AmazonDynamoDBClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new ProfileCredentialsProvider(profileName)).build();
        docClient = new DynamoDB(amazonDynamoDBClient);

        return docClient;
    } 

然后在申请中,根据您的要求,您可以使用适当的客户。