具有Collections API的Netflix Hollow

时间:2019-06-28 15:16:45

标签: java netflix-hollow

我正在编写一个Map<Integer, List<String>>类型的对象,并试图将其读回。我还尝试将其包装在pojo中,但仍然无法正常工作。 欣赏是否有人可以与Hollow分享如何获取任何Collection / Map类的知识。这是我的包装纸:-

import java.util.Map;

public class MapWrapper<K, V> {
   public final Map<K, V> map;

   public MapWrapper(Map<K, V> map) {
      this.map = map;
   }
}

这是我的测试用例(在initializeTypeState行上测试失败):-

import com.netflix.hollow.api.codegen.HollowAPIGenerator;
import com.netflix.hollow.api.objects.generic.GenericHollowObject;
import com.netflix.hollow.core.read.dataaccess.HollowDataAccess;
import com.netflix.hollow.core.write.HollowWriteStateEngine;
import com.netflix.hollow.core.write.objectmapper.HollowObjectMapper;
import com.netflix.hollow.test.HollowWriteStateEngineBuilder;
import com.netflix.hollow.test.consumer.TestAnnouncementWatcher;
import com.netflix.hollow.test.consumer.TestBlobRetriever;
import com.netflix.hollow.test.consumer.TestHollowConsumer;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CollectionsReadTests {


@Test
public void generateMapClasses() throws IOException {
    MapWrapper<Integer, String> testMap = new MapWrapper(new HashMap<>());
    HollowWriteStateEngine writeEngine = new HollowWriteStateEngine();
    HollowObjectMapper mapper = new HollowObjectMapper(writeEngine);
    mapper.initializeTypeState(testMap.getClass());

    HollowAPIGenerator generator =
            new HollowAPIGenerator.Builder().withAPIClassname("CollectionAPI")
                    .withPackageName("com.test.hollow.api")
                    .withDataModel(writeEngine)
                    .withDestination("/tmp/hollow/")
                    .build();

    generator.generateSourceFiles();
}

}

1 个答案:

答案 0 :(得分:0)

Hollow无法知道您的地图是否持有<Integer, String>,因为 class 已传递给initializeTypeState

如果您更改MapWrapper类,那么该类将不再起作用。

例如

import java.util.Map;

public class MapWrapper {
   public final Map<Integer, String> map;

   public MapWrapper(Map<Integer, String> map) {
      this.map = map;
   }
}