Quarkus 및 DynamoDBMapper - 기본 빌드의 "해시 키의 매핑"

으로 shadowman :

나는 데이터 지속성에 대한 DynamoDB의 사용을 Quarkus 기반 REST 서비스의 제품군을 가지고있다. 내가 사용이 구현 한 DynamoDBMapperJVM 모드에서 실행 때 내 코드에 문제가 없습니다. 그러나, 나는 빌드를 시도하고 내가 DynamoDB의 매핑 오류를 얻고있다 네이티브 이미지를 실행할 때.

내 엔티티 코드는 다음과 같습니다 :

@DynamoDBTable(tableName = "MyTable")
public class MyEntity {

    /**
     *
     */
    private static final long serialVersionUID = -4532872175331494789L;

    @DynamoDBHashKey(attributeName = "pk")
    private String partitionKey = null;

    @DynamoDBRangeKey(attributeName = "sk")
    private String rangeKey = null;

  ...

}

이 같은 시작할 때 내 테이블을 만드는거야 ...

        AmazonDynamoDB client = ...
        DynamoDB dynamoDB = new DynamoDB(client);

        String accessKey = "xxx";
        String secretKey = "yyy";

        AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);
        AWSCredentialsProvider credProvider = new AWSStaticCredentialsProvider(creds);

        DynamoDBMapper mapper = new DynamoDBMapper(client, credProvider);

        CreateTableRequest req = mapper.generateCreateTableRequest(MyEntity.class);
        client.createTable(req);

다시 말하지만, JVM 모드에서이 코드는 문제없이 작동합니다. 내가 네이티브 이미지를 구축하고 실행한다면, 나는 다음과 같은 예외를 참조하십시오

11:20:48 ERROR [io.quarkus.application] Failed to start application: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: MyEntity; no mapping for HASH key
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.hashKey(DynamoDBMapperTableModel.java:119)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel$Builder.build(DynamoDBMapperTableModel.java:449)
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$StandardTableFactory.getTable(StandardModelFactories.java:107)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel(DynamoDBMapper.java:408)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.generateCreateTableRequest(DynamoDBMapper.java:2268)
    at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.generateCreateTableRequest(AbstractDynamoDBMapper.java:339)
    at com.myapp.persistence.DynamoDBTableInitializer.observeStartup(DynamoDBTableInitializer.java:93)
    at com.myapp.persistence.DynamoDBTableInitializer_Observer_observeStartup_988ebae54ee676255a64ec2d4203a1bb713ccc8e.notify(DynamoDBTableInitializer_Observer_observeStartup_988ebae54ee676255a64ec2d4203a1bb713ccc8e.zig:111)
    at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:282)
    at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:267)
    at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:69)
    at io.quarkus.arc.runtime.LifecycleEventRunner.fireStartupEvent(LifecycleEventRunner.java:23)
    at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:108)
    at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent78.deploy_0(LifecycleEventsBuildStep$startupEvent78.zig:77)
    at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent78.deploy(LifecycleEventsBuildStep$startupEvent78.zig:36)
    at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:285)
    at io.quarkus.runtime.Application.start(Application.java:87)
    at io.quarkus.runtime.Application.run(Application.java:210)
    at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:41)

내 해시 키는 명확하게 내 엔티티 클래스에 매핑되는, 그래서이 오류를 받고 있어요 이유를 모르겠어요. 사람이 어떤 문제 해결 팁을 권장하거나 무슨 일이 일어나고 있는지에 어떤 통찰력을 제공 할 수 있습니까?

Eng.Fouad :

당신은 반사 기본 모드에서 작업 할 클래스를 등록해야합니다 :

@RegisterForReflection
@DynamoDBTable(tableName = "MyTable")
public class MyEntity {

보다:

기본 실행 파일을 구축 할 때, GraalVM 닫힌 세계 가정 작동합니다. 그것은 호출 트리를 분석하고 직접 사용되지 않는 모든 클래스 / 메소드 / 필드를 제거합니다.

그들이 (다른 경우에는 직접 호출하지 않은 경우) 죽은 코드 제거 그래서 반사를 통해 사용되는 요소는 호출 트리의 일부가 아닙니다. 원시 실행 파일에서 이러한 요소를 포함하기 위해 명시 적 성찰을 등록해야합니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=28713&siteId=1