Search code examples
androidmicrostream

Issue in creating a sample app for microstream in Android


I am trying to build a sample android app for microstream but getting the error. Gradle Dependencies

dependencies {
    implementation 'one.microstream:microstream-storage-embedded:05.00.02-MS-GA'
    ...
}

Error

    Process: com.example.microstream, PID: 6369
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.microstream/com.example.microstream.MainActivity}: one.microstream.persistence.exceptions.PersistenceException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: one.microstream.persistence.exceptions.PersistenceException
        at one.microstream.persistence.internal.PersistenceTypeDictionaryFileHandler.writeTypeDictionary(PersistenceTypeDictionaryFileHandler.java:107)
        at one.microstream.persistence.internal.PersistenceTypeDictionaryFileHandler.writeTypeDictionary(PersistenceTypeDictionaryFileHandler.java:203)
        at one.microstream.persistence.internal.PersistenceTypeDictionaryFileHandler.storeTypeDictionary(PersistenceTypeDictionaryFileHandler.java:209)
        at one.microstream.persistence.types.PersistenceTypeDictionaryExporter$Default.exportTypeDictionary(PersistenceTypeDictionaryExporter.java:93)
        at one.microstream.persistence.types.PersistenceTypeDictionaryManager$Exporting.exportTypeDictionary(PersistenceTypeDictionaryManager.java:267)
        at one.microstream.persistence.types.PersistenceTypeDictionaryManager$Exporting.synchUpdateExport(PersistenceTypeDictionaryManager.java:258)
        at one.microstream.persistence.types.PersistenceTypeDictionaryManager$Exporting.registerRuntimeTypeDefinitions(PersistenceTypeDictionaryManager.java:324)
        at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.synchUnvalidatedRegisterTypeHandlers(PersistenceTypeHandlerManager.java:662)
        at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.registerTypeHandlers(PersistenceTypeHandlerManager.java:644)
        at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.initialRegisterTypeHandlers(PersistenceTypeHandlerManager.java:687)
        at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.synchInternalInitialize(PersistenceTypeHandlerManager.java:968)
        at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.initialize(PersistenceTypeHandlerManager.java:941)
        at one.microstream.storage.embedded.types.EmbeddedStorageFoundation$Default.createEmbeddedStorageManager(EmbeddedStorageFoundation.java:791)
        at one.microstream.storage.embedded.types.EmbeddedStorage.createAndStartStorageManager(EmbeddedStorage.java:649)
        at one.microstream.storage.embedded.types.EmbeddedStorage.start(EmbeddedStorage.java:467)
        at one.microstream.storage.embedded.types.EmbeddedStorage.start(EmbeddedStorage.java:317)
        at com.example.microstream.MainActivity.microstreamStorageManager(MainActivity.kt:52)
        at com.example.microstream.MainActivity.checkPermission(MainActivity.kt:78)
        at com.example.microstream.MainActivity.onCreate(MainActivity.kt:47)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: one.microstream.exceptions.IORuntimeException: java.nio.file.AccessDeniedException: storage/PersistenceTypeDictionary.ptd
2021-10-20 07:26:34.758 6369-6369/com.example.microstream E/AndroidRuntime:     at one.microstream.afs.nio.types.NioIoHandler$Default.specificCreate(NioIoHandler.java:324)
        at one.microstream.afs.nio.types.NioIoHandler$Default.specificCreate(NioIoHandler.java:1)
        at one.microstream.afs.types.AIoHandler$Abstract.create(AIoHandler.java:701)
        at one.microstream.afs.types.AWritableFile.create(AWritableFile.java:102)
        at one.microstream.persistence.internal.PersistenceTypeDictionaryFileHandler.writeTypeDictionary(PersistenceTypeDictionaryFileHandler.java:91)
            ... 33 more
     Caused by: java.nio.file.AccessDeniedException: storage/PersistenceTypeDictionary.ptd
        at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
        at java.nio.file.Files.newByteChannel(Files.java:361)
        at java.nio.file.Files.createFile(Files.java:632)
        at one.microstream.afs.nio.types.NioIoHandler$Default.specificCreate(NioIoHandler.java:320)
            ... 37 more

How to resolve this issue?


Solution

  • The problem is described in the log. You are trying to write to a location where the application cannot store data.

    To get the path for writing data, you can use for example:

    Context instrumentationContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
    targetDirectory = instrumentationContext.getFilesDir().toPath();
    targetDirectory = targetDirectory.resolve("storage");
    targetDirectory.toFile().mkdir();
    

    and after that:

    EmbeddedStorageManager storage = EmbeddedStorage.start(root, targetDirectory);