2016-11-02 8 views
0

Eclipse Java EE IDEでは、プログラムでDynamoDBテーブルを作成しようとしています。私はいくつかの他の情報源から借りている以下の方法を持っています。 Table table = DYNAMODB.createTable(request)に、Eclipseは例外を出しています。型の不一致:CreateTableResultからTableに変換できません。DynamoDBタイプの不一致:CreateTableResultからテーブルに変換できません

public static final String S3_BUCKET_CHANNELS = "channels"; 
public static final String S3_BUCKET_EPISODES = "episodes"; 
public static final String SQS_QUEUE_NAME = "queue"; 
public static final String DYNAMODB_TABLE_CHANNELS = "channels"; 
public static final String DYNAMODB_TABLE_EPISODES = "episodes"; 

public static final String MACRO_PATH = "macros/"; 
public static final String FINISHED_PATH = "final/"; 

public static final AWSCredentialsProvider CREDENTIALS_PROVIDER = 
      new ClasspathPropertiesFileCredentialsProvider(); 

public static final Region REGION = Region.getRegion(Regions.US_WEST_2); 

public static final AmazonS3Client S3 = new AmazonS3Client(CREDENTIALS_PROVIDER); 
public static final AmazonSQSClient SQS = new AmazonSQSClient(CREDENTIALS_PROVIDER); 
public static final AmazonDynamoDBClient DYNAMODB = new AmazonDynamoDBClient(CREDENTIALS_PROVIDER); 
public static final DynamoDBMapper DYNAMODB_MAPPER = new DynamoDBMapper(DYNAMODB, CREDENTIALS_PROVIDER); 

static { 
    DYNAMODB.setRegion(REGION); 
    SQS.setRegion(REGION); 
} 

public static void createChannelsTable() throws Exception { 
      List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>(1); 
      attributeDefinitions.add(new AttributeDefinition().withAttributeName("url").withAttributeType(ScalarAttributeType.S)); 
      attributeDefinitions.add(new AttributeDefinition().withAttributeName("title").withAttributeType(ScalarAttributeType.S)); 

      List<KeySchemaElement> keyDefinitions = new ArrayList<KeySchemaElement>(2); 
      keyDefinitions.add(new KeySchemaElement().withAttributeName("url").withKeyType(KeyType.HASH)); 

      ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(50l, 50l); 

      GlobalSecondaryIndex globalSecondaryIndex = 
        new GlobalSecondaryIndex().withIndexName("channelIndex") 
               .withProjection(new Projection().withProjectionType(ProjectionType.ALL)) 
               .withKeySchema(
                 new KeySchemaElement("title", KeyType.HASH), 
                 new KeySchemaElement("url", KeyType.RANGE) 
              ) 
               .withProvisionedThroughput(provisionedThroughput); 

      CreateTableRequest request = 
        new CreateTableRequest().withTableName(DYNAMODB_TABLE_CHANNELS) 
              .withKeySchema(keyDefinitions) 
              .withAttributeDefinitions(attributeDefinitions) 
              .withProvisionedThroughput(provisionedThroughput) 
              .withGlobalSecondaryIndexes(globalSecondaryIndex); 

      try { 
       Table table = DYNAMODB.createTable(request); 
       table.waitForActive(); 
      } catch (Exception e) { 
       System.err.println("Unable to create table: "); 
       System.err.println(e.getMessage()); 
      } 

     } 

テーブルのキャストは機能せず、奇妙なことに、これをEclipse Neonにインポートするとエラーは発生しません。私はaws-java-sdk-dynamodb-1.10.42.jarからcom.amazonaws.services.dynamodbv2.document.Tableを使用しています。

答えて

2

DYNAMODBcreateTableを呼び出しています。この場合、AmazonDynamoDBClientのインスタンスです。

com.amazonaws.services.dynamodbv2.document.DynamoDBのインスタンスでcreateTableに電話する必要があります。具体的には、次のようにコードを変更します。

public static final AmazonDynamoDBClient DYNAMODB_CLIENT = new AmazonDynamoDBClient(CREDENTIALS_PROVIDER); 
public static final DynamoDB DYNAMODB = new DynamoDB(DYNAMODB_CLIENT); 

... 

Table table = DYNAMODB.createTable(request); 
table.waitForActive(); 

完全な例を参照してくださいhere

+0

これは間違いありません。助けてくれてありがとう! – acs254

関連する問題