Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用dynamodb的tomcat会话管理器_Java_Amazon Web Services_Session_Tomcat - Fatal编程技术网

Java 使用dynamodb的tomcat会话管理器

Java 使用dynamodb的tomcat会话管理器,java,amazon-web-services,session,tomcat,Java,Amazon Web Services,Session,Tomcat,我正在尝试将tomcat会话管理器与dynamoDB一起使用 我参考了aws指南 他们在指南中提到我们必须使用 <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Manager className="com.amazonaws.services.dynamodb.sessionmanager.DynamoDBSessionManager"

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

我参考了aws指南

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

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

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


如何做到这一点,任何帮助都将不胜感激。

最好创建多个DyanoDB客户端,每个区域一个。您应该使用一些config/prop文件,其中包含不同的aws访问密钥、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;
    } 

然后在应用程序中,根据您的需求,您可以使用适当的客户端。

但是正如aws文档中提到的,我必须从context.xml实例化DynamoDBSessionManager,并且context.xml在AppConfig之前执行。因此,我无法知道我必须获取哪个区域的凭据。如果我在执行context.xml时能够以某种方式了解该区域,那么我可以在目标中简单地指定该区域。