Search code examples
apache-zest

how to configure a FileEntityStoreService


I'm trying to use a File EntityStore and I'm having an exception at activation because of slices being zero.

I assume it's an issue with configuration but I expected the default value to be 1.

I narrowed down to this assembly:

import org.apache.polygene.api.common.Visibility;
import org.apache.polygene.api.structure.Application;
import org.apache.polygene.bootstrap.Energy4Java;
import org.apache.polygene.entitystore.file.assembly.FileEntityStoreAssembler;
import org.apache.polygene.index.rdf.assembly.RdfNativeSesameStoreAssembler;
import org.apache.polygene.library.fileconfig.FileConfigurationAssembler;

public class FileStoreException {
    public static void main(String[] args) throws Exception {
        Energy4Java polygene = new Energy4Java();
        Application application = polygene.newApplication(factory -> factory.newApplicationAssembly(
                module -> {
                    new FileConfigurationAssembler()
                            .visibleIn(Visibility.application)
                            .assemble(module);

                    new FileEntityStoreAssembler()
                            .withConfig(module, Visibility.application)
                            .assemble(module);

                    new RdfNativeSesameStoreAssembler()
                            .withConfig(module, Visibility.application)
                            .assemble(module);

                    module.defaultServices();
                })
        );
        application.activate();
    }
}

The end of the stacktrace:

Caused by: java.lang.ArithmeticException: / by zero
    at method "get" of FileEntityStoreService:FileEntityStoreService in module [Module 1] of layer [Layer 1].(:0)
    at org.apache.polygene.entitystore.file.FileEntityStoreMixin.getDataFile(FileEntityStoreMixin.java:277)
    at org.apache.polygene.entitystore.file.FileEntityStoreMixin.getDataFile(FileEntityStoreMixin.java:328)
    at org.apache.polygene.entitystore.file.FileEntityStoreMixin.get(FileEntityStoreMixin.java:138)
    at org.apache.polygene.spi.entitystore.helpers.JSONMapEntityStoreMixin.entityStateOf(JSONMapEntityStoreMixin.java:193)
    ... 14 more

I'm using version 3.0.0 and I'm on linux.


Solution

  • Adding FileConfigurationAssembler gave me the false impression that my config was done.

    I struggled to find a working example of an assembly using a FileEntityStoreAssembler so here's one:

    Application application = polygene.newApplication(factory -> factory.newApplicationAssembly(
            module -> {
                ModuleAssembly config = module.layer().module("Config");
                config.defaultServices();
                new MemoryEntityStoreAssembler().assemble(config);
    
                config.entities(FileEntityStoreConfiguration.class);
                new FileEntityStoreAssembler()
                        .withConfig(config, Visibility.application)
                        .assemble(module);
    
    
                new RdfNativeSesameStoreAssembler()
                        .withConfig(config, Visibility.application)
                        .assemble(module);
    
                module.defaultServices();
            })
    );
    

    And to configure it:

    config.forMixin(FileEntityStoreConfiguration.class)
            .declareDefaults()
            .directory().set("/home/user/appdata/");