Java embedded nosql document store

Overview

Nitrite Database

Build CodeQL Codacy codecov Javadocs Discussion Backers on Open Collective Backers on Open Collective Gitpod ready-to-code

Logo

NOsql Object (NO2 a.k.a Nitrite) database is an open source nosql embedded document store written in Java. It has MongoDB like API. It supports both in-memory and file based persistent store.

Nitrite is an embedded database ideal for desktop, mobile or small web applications.

It features:

  • Schemaless document collection and object repository
  • In-memory / file-based store
  • Pluggable storage engines - mvstore, mapdb, rocksdb
  • ACID transaction
  • Schema migration
  • Indexing
  • Full text search
  • Rx-Java support
  • Both way replication via Nitrite DataGate server
  • Very fast, lightweight and fluent API
  • Android compatibility (API Level 19)

Kotlin Extension

Nitrite has a kotlin extension called Potassium Nitrite for kotlin developers. Visit here for more details.

Getting Started with Nitrite

NOTE: There are breaking api changes in version 4.x.x. So please exercise caution when upgrading from 3.x.x
especially for package name changes.

How To Install

To use Nitrite in any Java application, first add the nitrite bill of materials, then add required dependencies:

Maven

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.dizitart</groupId>
            <artifactId>nitrite-bom</artifactId>
            <version>4.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.dizitart</groupId>
        <artifactId>nitrite</artifactId>
    </dependency>

    <dependency>
        <groupId>org.dizitart</groupId>
        <artifactId>nitrite-mvstore-adapter</artifactId>
    </dependency>
</dependencies>

Gradle

implementation(platform("org.dizitart:nitrite-bom:4.0.0-SNAPSHOT"))
    
implementation 'org.dizitart:nitrite'
implementation 'org.dizitart:nitrite-mvstore-adapter'

Quick Examples

Initialize Database

// create a mvstore backed storage module
MVStoreModule storeModule = MVStoreModule.withConfig()
    .filePath("/tmp/test.db")  // for android - .filePath(getFilesDir().getPath() + "/test.db")
    .compress(true)
    .build();

// or a rocksdb based storage module
RocksDBModule storeModule = RocksDBModule.withConfig()
    .filePath("/tmp/test.db")
    .build();


// initialization using builder
Nitrite db = Nitrite.builder()
        .loadModule(storeModule)
        .loadModule(new JacksonMapperModule())  // optional
        .openOrCreate("user", "password");

Create a Collection

// Create a Nitrite Collection
NitriteCollection collection = db.getCollection("test");

// Create an Object Repository
ObjectRepository<Employee> repository = db.getRepository(Employee.class);

Annotations for POJO

@Entity(value = "retired-employee",     // entity name (optional), 
    indices = {
        @Index(value = "firstName", type = IndexType.NonUnique),
        @Index(value = "lastName", type = IndexType.NonUnique),
        @Index(value = "note", type = IndexType.Fulltext),
})
public class Employee implements Serializable {
    // provides id field to uniquely identify an object inside an ObjectRepository
    @Id
    private long empId;
    private Date joinDate;
    private String firstName;
    private String lastName;
    private String note;

    // ... public getters and setters
}

CRUD Operations

// create a document to populate data
Document doc = createDocument("firstName", "John")
     .put("lastName", "Doe")
     .put("birthDay", new Date())
     .put("data", new byte[] {1, 2, 3})
     .put("fruits", new ArrayList<String>() {{ add("apple"); add("orange"); add("banana"); }})
     .put("note", "a quick brown fox jump over the lazy dog");

// insert the document
collection.insert(doc);

// find a document
collection.find(where("firstName").eq("John").and(where("lastName").eq("Doe"));

// update the document
collection.update(where("firstName").eq("John"), createDocument("lastName", "Wick"));

// remove the document
collection.remove(doc);

// insert an object in repository
Employee emp = new Employee();
emp.setEmpId(124589);
emp.setFirstName("John");
emp.setLastName("Doe");

repository.insert(emp);

Create Indices

// create document index
collection.createIndex("firstName", indexOptions(IndexType.NonUnique));
collection.createIndex("note", indexOptions(IndexType.Fulltext));

// create object index. It can also be provided via annotation
repository.createIndex("firstName", indexOptions(IndexType.NonUnique));

Query a Collection

DocumentCursor cursor = collection.find(
    where("firstName").eq("John")               // firstName == John
    .and(
        where("data").elemMatch("$".lt(4))      // AND elements of data array is less than 4
            .and(
                where("note").text("quick")     // AND note field contains string 'quick' using full-text index
        )       
    )
);

for (Document document : cursor) {
    // process the document
}

// get document by id
Document document = collection.getById(nitriteId);

// query an object repository and create the first result
Cursor<Employee> cursor = repository.find(where("firstName").eq("John"));
Employee employee = cursor.firstOrNull();

Transaction

try (Session session = db.createSession()) {
    Transaction transaction = session.beginTransaction();
    try {
        NitriteCollection txCol = transaction.getCollection("test");

        Document document = createDocument("firstName", "John");
        txCol.insert(document);

        transaction.commit();
    } catch (TransactionException e) {
        transaction.rollback();
    }
}

Schema Migration

Migration migration1 = new Migration(Constants.INITIAL_SCHEMA_VERSION, 2) {
    @Override
    public void migrate(Instruction instruction) {
        instruction.forDatabase()
            // make a non-secure db to secure db
            .addPassword("test-user", "test-password");

        // create instruction for existing repository
        instruction.forRepository(OldClass.class, null)

            // rename the repository (in case of entity name changes)
            .renameRepository("migrated", null)

            // change datatype of field empId from String to Long and convert the values
            .changeDataType("empId", (TypeConverter<String, Long>) Long::parseLong)

            // change id field from uuid to empId
            .changeIdField("uuid", "empId")

            // delete uuid field
            .deleteField("uuid")
    
            // rename field from lastName to familyName
            .renameField("lastName", "familyName")

            // add new field fullName and add default value as - firstName + " " + lastName
            .addField("fullName", document -> document.get("firstName", String.class) + " "
                + document.get("familyName", String.class))

            // drop index on firstName
            .dropIndex("firstName")

            // drop index on embedded field literature.text
            .dropIndex("literature.text")

            // change data type of embedded field from float to integer and convert the values 
            .changeDataType("literature.ratings", (TypeConverter<Float, Integer>) Math::round);
    }
};

Migration migration2 = new Migration(2, 3) {
    @Override
    public void migrate(Instruction instruction) {
        instruction.forCollection("test")
            .addField("fullName", "Dummy Name");
    }
};

MVStoreModule storeModule = MVStoreModule.withConfig()
    .filePath("/temp/employee.db")
    .compressHigh(true)
    .build();

db = Nitrite.builder()
    .loadModule(storeModule)
    
    // schema versioning is must for migration
    .schemaVersion(2)

    // add defined migration paths
    .addMigrations(migration1, migration2)
    .openOrCreate();

Automatic Replication

NitriteCollection collection = db.getCollection("products");

Replica replica = Replica.builder()
    .of(collection)
    // replication via websocket (ws/wss)
    .remote("ws://127.0.0.1:9090/datagate/john/products")
    // user authentication via JWT token
    .jwtAuth("john", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c")
    .create();

replica.connect();

Import/Export Data

// Export data to a file
Exporter exporter = Exporter.of(db);
exporter.exportTo(schemaFile);

//Import data from the file
Importer importer = Importer.of(db);
importer.importFrom(schemaFile);

More details are available in the reference document.

Release Notes

Release notes are available here.

Documentation

Reference API

Document

JavaDoc

Build

To build and test Nitrite

git clone https://github.com/nitrite/nitrite-java.git
cd nitrite-java
./gradlew build

Support / Feedback

For issues with, questions about, or feedback talk to us at Gitter.

Bugs / Feature Requests

Think you’ve found a bug? Want to see a new feature in the Nitrite? Please open an issue here. But before you file an issue please check if it is already existing or not.

Maintainers

  • Anindya Chatterjee

Contributors

This project exists thanks to all the people who contribute. Contribute. Contributors

Backers

Thank you to all our backers! 🙏 Become a backer

Backers

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. Become a sponsor

Sponsor Sponsor Sponsor Sponsor Sponsor

Presentation & Talks

Idan Sheinberg has given a talk on Nitrite at Kotlin Everywhere - TLV Edition meetup on October 27, 2019. Please find his presentation here.

Special Thanks

Comments
  • Nitrite DateGate not syncing

    Nitrite DateGate not syncing

    Hi all, i am trying to set up DataGate to handle replication across devices. The DataGate starts up successfully and the client connects to it but no replication happens. can anyone assist

    opened by dustin-auby 29
  • Cursor crashes with java.lang.NullPointerException: null

    Cursor crashes with java.lang.NullPointerException: null

    java.lang.NullPointerException: null at org.h2.mvstore.Page.getRawChildPageCount(Page.java:868) ~[h2-mvstore-1.4.196.jar:1.4.196] at org.h2.mvstore.MVMap.getChildPageCount(MVMap.java:1179) ~[h2-mvstore-1.4.196.jar:1.4.196] at org.h2.mvstore.Cursor.fetchNext(Cursor.java:149) ~[h2-mvstore-1.4.196.jar:1.4.196] at org.h2.mvstore.Cursor.next(Cursor.java:50) ~[h2-mvstore-1.4.196.jar:1.4.196] at org.dizitart.no2.internals.DocumentCursor$DocumentCursorIterator.next(DocumentCursor.java:106) ~[nitrite-2.1.1.jar:na] at org.dizitart.no2.internals.DocumentCursor$DocumentCursorIterator.next(DocumentCursor.java:92) ~[nitrite-2.1.1.jar:na] at org.dizitart.no2.objects.ObjectCursor$ObjectCursorIterator.next(ObjectCursor.java:108) ~[nitrite-2.1.1.jar:na]

    not-reproducible 
    opened by wojsys 21
  • Possible db corruption issue: IllegalArgumentException: Could not deserialize

    Possible db corruption issue: IllegalArgumentException: Could not deserialize

    In a production app, we have many exception like this:

    java.lang.IllegalArgumentException: Could not deserialize [-84, -19, 0, 5, 115, 114, 0, 26, 111, 114, 103, 46, 100, 105, 122, 105, 116, 97, 114, 116, 46, 110, 111, 50, 46, 78, 105, 116, 114, 105, 116, 101, 73, 100, -18, 115, 1, -74, 97, -1, 36, -103, 2, 0, 1, 76, 0, 7, 105, 100, 86, 97, 108, 117, 101, 116, 0, 16, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 76, 111, 110, 103, 59, 120, 112, 115, 114, 0, 14, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 76, 111, 110, 103, 59, -117, -28, -112, -52, -113, 35, -33, 2, 0, 1, 74, 0, 5, 118, 97, 108, 117, 101, 120, 114, 0, 16, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 78, 117, 109, 98, 101, 114, -122, -84, -107, 29, 11, -108, -32, -117, 2, 0, 0, 120, 112, 0, 0, 0, 65, 24, 4, -100, -122] [1.4.196/0] at org.h2.mvstore.DataUtils.newIllegalArgumentException(DataUtils.java:728) at org.h2.mvstore.type.ObjectDataType.deserialize(ObjectDataType.java:377) at org.h2.mvstore.type.ObjectDataType$SerializedObjectType.read(ObjectDataType.java:1556) at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:232) at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:115) at org.h2.mvstore.Page.read(Page.java:708) at org.h2.mvstore.Page.read(Page.java:195) at org.h2.mvstore.MVStore.readPage(MVStore.java:1952) at org.h2.mvstore.MVMap.readPage(MVMap.java:741) at org.h2.mvstore.MVMap.setRootPos(MVMap.java:751) at org.h2.mvstore.MVStore.openMap(MVStore.java:476) at org.h2.mvstore.MVStore.openMap(MVStore.java:427) at org.dizitart.no2.store.NitriteMVStore.openMap(NitriteMVStore.java:89) at org.dizitart.no2.Nitrite.getCollection(Nitrite.java:111)

    Any ideas how can i debug this kind of crashes?

    not-reproducible 
    opened by angelix 17
  • Create sync users

    Create sync users

    Hi! Thank you very much for your awesome work. The DataGate is up and running, but I do not know how I can create sync users. I tried the following in the mongo console:

    db.getCollection('no2.datagate.users').insert({ userName: "userId", password: "password", accountNonExpired: true, accountNonLocked: true, credentialsNonExpired: true, enabled: true });
    

    Also I tried to create the users via the DataGate client moderation page, but the sync code still fails with

    16:23:51.714 [ScheduledWorker.NO₂] ERROR org.dizitart.no2.sync.DataGateSyncTemplate - Remote error while getting online status
    org.dizitart.no2.exceptions.SyncException: NO2.11020: HTTP/1.1 401 Unauthorized
    	at org.dizitart.no2.sync.DataGateSyncTemplate.isOnline(DataGateSyncTemplate.java:180)
    	at org.dizitart.no2.sync.SyncService.mergeChanges(SyncService.java:125)
    	at org.dizitart.no2.sync.CollectionReplicator.run(CollectionReplicator.java:65)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at java.lang.Thread.run(Thread.java:748)
    

    Could you please paste an example how to create an user in DataGate, so that the sync client will work?

            val dataGateClient = DataGateClient("http://localhost:9090")
                .withAuth("sa", "sasasa")
            val syncTemplate = DataGateSyncTemplate(dataGateClient, "remote-collection@userId")
    

    Also, what does the remote-collection@userId parameter mean?

    opened by mvysny 17
  • Geospatial Indexing

    Geospatial Indexing

    Would be nice if the documents/objects can support geospatial indexing/queries.

    The property could be a geojson object representation and the querying/indexing can be performed using the JTS library.

    Ex:

    public class Place{ private String name; private GeoJson location; }

    Cursor cursor = collection1.find().where("location").within(polygon); Cursor cursor = collection1.find().where("location").near(point,distance); Cursor cursor = collection1.find().where("location").intersects(geojson);

    I've used JTS before, and there is a Jackson Library for serializing/deserializing the JTS Geometry objects to GeoJson. I think this feature would also provide universal value to others as it is becoming a pretty standard feature within DBs.

    Thanks.

    enhancement 
    opened by kennywk 17
  • Getting error when using inheritance

    Getting error when using inheritance

    I am trying to use inheritance in my objects as shown bellow. when i try and create an object i now get the following error what should i do ?

    org.dizitart.no2.exceptions.ValidationException: NO2.1028: no such value 'uid' for type com.example.entities.ChildClass

    @Indices(
            @Index(value = "uid", type = IndexType.Unique)
    )
    public class ParentClass {
        @Id
        protected String uid;
        protected boolean deleted;
    }
    
    @InheritIndices
    public class ChildClass extends ParentClass {
        private String name;
        private String type;
    }
    
    enhancement 
    opened by dustin-auby 15
  • mongodb connection

    mongodb connection

    I read about Nitrite few days ago and I decided to try it...

    I went into some troubles while trying to connect nitrite datagate with mongo db following the instruction on the website. I am not very comfortable with docker but I built the images from the docker file, run it. Before I launch and mongo using also docker. my mongoDB is running on localhost:27017 and I my datagate Dockerfile is :

    FROM dizitart/nitrite-datagate
    
    ##COPY keystore.jks /
    
    ## Connection details (Replace with your own values)
    ENV DATAGATE_HOST "0.0.0.0"
    ENV DATAGATE_HTTP_PORT "8080"
    ENV DATAGATE_HTTPS_PORT "8443"
    ENV DATAGATE_MONITOR_PORT "9090"
    ENV DATAGATE_KEY_STORE "keystore.jks"
    ENV DATAGATE_KEY_PASSWORD "s3cret"
    
    ## Mongo connection details (Replace with your own values)
    ENV DATAGATE_MONGO_HOST "127.0.0.1"
    ENV DATAGATE_MONGO_PORT "27017"
    ENV DATAGATE_MONGO_USER "admin"
    ENV DATAGATE_MONGO_PASSWORD "password"
    ENV DATAGATE_MONGO_DATABASE "demo"
    
    ## Starts the server
    RUN ["chmod", "+x", "./datagate.sh"]
    ENTRYPOINT [ "./datagate.sh" ]
    

    I also did:

    db.getCollection('no2.datagate.users').insert({
        userName: "admin",
        password: "password",
        accountNonExpired: true,
        accountNonLocked: true,
        credentialsNonExpired: true,
        enabled: true,
        authorities: ["ADMIN"]
    });
    

    I firstly encountered a problem with jks, that's why I commented it.

    Then when I run the datagate, I got :

    2017-06-08 02:21:32.800  INFO 6 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requir
    edClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
    2017-06-08 02:21:32.870  INFO 6 --- [127.0.0.1:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server 127.0.0.1:27017
    
    com.mongodb.MongoSocketOpenException: Exception opening socket
            at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongo-java-driver-3.4.2.jar!/:na]
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongo-java-driver-3.4.2.jar!/:na]
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongo-java-driver-3.4.2.jar!/:na]
            at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
    Caused by: java.net.ConnectException: Connection refused (Connection refused)
            at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_121]
            at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_121]
            at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_121]
            at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_121]
            at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_121]
            at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_121]
            at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongo-java-driver-3.4.2.jar!/:na]
            at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongo-java-driver-3.4.2.jar!/:na]
            ... 3 common frames omitted
    
    2017-06-08 02:21:32.928  INFO 6 --- [           main] org.mongodb.driver.cluster               : No server chosen by WritableServerSelector from cluster description Cluster
    Description{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.Mongo
    SocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused (Connection refused)}}]}. Waiting for 30000 ms before timing out
    

    Could you help me set that up to continue the exploration.

    I really like the idea behind nitrite and I was looking for something like that.

    help wanted 
    opened by rokal 15
  • Error running datagate

    Error running datagate

    Hi,

    Im triying to run the datagate docker image but i have this error message

    root@ubuntu-512mb-tor1-01:/home/server/repo/ci/datagate# docker run -p 9090:8080 --name container-datagate-test datagate-test container_linux.go:247: starting container process caused "exec: "./datagate.sh": permission denied" docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: "./datagate.sh": permission denied".

    bug 
    opened by ariel-lenis 15
  • Chunk ... no longer exists

    Chunk ... no longer exists

    I'm using Nitrite database to store a million documents and then perform different read operations on them (for benchmarking). After storing the documents, while trying to read all documents via collection.find().iterator(), I get the following exception:

    java.lang.IllegalStateException: Chunk 162 no longer exists [1.4.196/9]
    	at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:765)
    	at org.h2.mvstore.MVStore.getChunkIfFound(MVStore.java:953)
    	at org.h2.mvstore.MVStore.getChunk(MVStore.java:935)
    	at org.h2.mvstore.MVStore.readPage(MVStore.java:1943)
    	at org.h2.mvstore.MVMap.readPage(MVMap.java:741)
    	at org.h2.mvstore.Page.getChildPage(Page.java:217)
    	at org.h2.mvstore.Cursor.fetchNext(Cursor.java:150)
    	at org.h2.mvstore.Cursor.next(Cursor.java:50)
    	at org.dizitart.no2.internals.DocumentCursor$DocumentCursorIterator.nextMatch(DocumentCursor.java:115)
    	at org.dizitart.no2.internals.DocumentIterator.next(DocumentIterator.java:54)
    	at org.dizitart.no2.internals.DocumentIterator.next(DocumentIterator.java:32)
            ...
    

    ~~Then, the next smaller read operations return more values than they should.~~(Not related to this problem) I create the database with the default options and three indexes, and it occurs with and without enabled compressing. The used version is 2.1.0.

    Is a million documents too much for Nitrite? The same data and test cases work fine with pure MVStore. Inserting only ~340 entries works fine too.

    bug 
    opened by ptoews 14
  • Updating a third party library causes db corruption errors

    Updating a third party library causes db corruption errors

    We see nitrite as one of the core components in our SDK.

    Been battling this issue now for a few months.

    This happens randomly, when updating a third party library causes read page position errors while attempting to read a repository.

    Latest issue popped up while updating to the newest version of admob, db page corruption error occured.

    Similar to https://github.com/nitrite/nitrite-java/issues/111

    Any help on this issue would be highly appreciated.

    Has anyone been battling similar issues?

    If yes, can someone suggest a solution - We are using proguard and nitrite v3.4.3

    Cheers HD

    opened by unixguru2k 13
  • Сan I add Index for

    Сan I add Index for "@type" field generated by jackson?

    @Indices(value = arrayOf(
            Index(value = "localId", type = IndexType.NonUnique),
            Index(value = "caObjectLocalId", type = IndexType.NonUnique),
            Index(value = "dateTime", type = IndexType.NonUnique),
            Index(value = "item.@type", type = IndexType.NonUnique)
    ))
    data class CaoHistoryRecord(
            val localId: UUID,
            val caObjectLocalId: UUID,
            val dateTime: LocalDateTime,
            val item: CaoHistoryRecordItem
    )
    
    @JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME,
            include = JsonTypeInfo.As.PROPERTY,
            property = "@type")
    ...
    interface CaoHistoryRecordItem
    
    Caused by: org.dizitart.no2.exceptions.ValidationException: NO2.1074: no such value '@type' for type eu.cortex.cortexalarm.data.daos.caobjectshistory.entities.CaoHistoryRecordItem
    
    wontfix not an issue 
    opened by alexandr2levin 13
  • Bump kryo5 from 5.2.1 to 5.4.0

    Bump kryo5 from 5.2.1 to 5.4.0

    Bumps kryo5 from 5.2.1 to 5.4.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump actions/setup-python from 4.3.0 to 4.4.0

    Bump actions/setup-python from 4.3.0 to 4.4.0

    Bumps actions/setup-python from 4.3.0 to 4.4.0.

    Release notes

    Sourced from actions/setup-python's releases.

    Add support to install multiple python versions

    In scope of this release we added support to install multiple python versions. For this you can try to use this snippet:

        - uses: actions/setup-python@v4
          with:
            python-version: |
                3.8
                3.9
                3.10
    

    Besides, we changed logic with throwing the error for GHES if cache is unavailable to warn (actions/setup-python#566).

    Improve error handling and messages

    In scope of this release we added improved error message to put operating system and its version in the logs (actions/setup-python#559). Besides, the release

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Upgrade CodeSee workflow to version 2

    Upgrade CodeSee workflow to version 2

    CodeSee is a code visibility platform.

    This change updates the CodeSee workflow file to the latest version for security, maintenance, and support improvements (see changelog below).

    That workflow file:

    • runs CodeSee's code analysis on every PR push and merge
    • uploads that analysis to CodeSee.
    • It does not transmit your code.

    The code analysis is used to generate maps and insights about this codebase.

    CodeSee workflow changelog:

    • Improved security: Updates permission to be read-only.
    • Improved future maintenance: Replaces the body of the workflow with a single github action: codesee-action. This makes it significantly easier for CodeSee to introduce future improvements and fixes without requiring another PR like this.
    • Improved Python support: The action now properly supports Python 3.11, and will continue to support new Python versions as they are released.
    opened by codesee-maps[bot] 1
  • db corruption errors

    db corruption errors

    Hello,

    We are getting DB corruption error after updating targetSDK of our app to android-32. I realized that this error has been reported previously as well and thus I'm not sure we are able to have permanent fix yet. I've furnished some relevant logs for now and I can share more details if needed. I would be grateful to get some pointers how to resolve this and also seek some insights why this is an issue after updating targetSDk, because it has been doing good before that.

    • Happens only on production signed builds. Debug builds are not seeing this issues.

    • Only changes we made is updating targetSdk to 32

    • Current nitrite version : 4.0.0-SNAPSHOT

    • Error logs :

    Caused by: java.lang.IllegalStateException: Unable to read the page at position 274878041998 [1.4.200/6] at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:1) at org.h2.mvstore.MVStore.readPage(MVStore.java:6) at org.h2.mvstore.MVMap.readPage(MVMap.java:1) at org.h2.mvstore.MVMap.readOrCreateRootPage(MVMap.java:1) at org.h2.mvstore.MVMap.setRootPos(MVMap.java:1) at org.h2.mvstore.MVStore.openMap(MVStore.java:23) at org.h2.mvstore.MVStore.openMap(MVStore.java:3) at org.h2.mvstore.MVStore.openMap(MVStore.java:1) at xe.f.D(NitriteMVStore.java:3) at fe.f.f(NitriteDatabase.java:1) at fe.f.(NitriteDatabase.java:17)

    opened by sandeep-sporttotal 4
  • Bump tyrus-container-grizzly-server from 2.0.2 to 2.1.2

    Bump tyrus-container-grizzly-server from 2.0.2 to 2.1.2

    Bumps tyrus-container-grizzly-server from 2.0.2 to 2.1.2.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • Bump tyrus-server from 2.1.0 to 2.1.2

    Bump tyrus-server from 2.1.0 to 2.1.2

    Bumps tyrus-server from 2.1.0 to 2.1.2.

    Release notes

    Sourced from tyrus-server's releases.

    2.1.2

    2.1.1

    Commits
    • d1186aa Prepare release org.glassfish.tyrus:tyrus-project:2.1.2
    • cd4af9c Update jakarta dependencies
    • 0479f54 Prepare next development cycle for 2.1.99-SNAPSHOT
    • ceb14ad Prepare release org.glassfish.tyrus:tyrus-project:2.1.1
    • bccfe39 Prepare next development cycle for 2.1.99-SNAPSHOT
    • 64c82b1 Prepare release org.glassfish.tyrus:tyrus-project:2.1.0
    • 0148e0a revert SslEngineConfigurator support removal in GrizzlyClientSocket
    • 63dc9ae Merge pull request #809 from jansupol/20xB.merge
    • d248623 Merge remote-tracking branch 'MSTR/2.0.x' into 20xB.merge
    • 39bcc88 Merge pull request #808 from jansupol/merge_120
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
Releases(v3.4.4)
Owner
Nitrite Database
Nitrite Database
A simple NoSQL client for Android. Meant as a document store using key/value pairs and some rudimentary querying. Useful for avoiding the hassle of SQL code.

SimpleNoSQL A simple NoSQL client for Android. If you ever wanted to just save some data but didn't really want to worry about where it was going to b

Colin Miller 389 Sep 25, 2022
Kodein-DB is a Kotlin/Multiplatform embedded NoSQL database that works on JVM, Android, Kotlin/Native and iOS.

Kodein-DB is a Kotlin/Multiplatform embedded NoSQL database that works on JVM, Android, Kotlin/Native and iOS. It is suited for client or mobile applications.

null 277 Dec 3, 2022
Java embedded nosql document store

Nitrite Database NOsql Object (NO2 a.k.a Nitrite) database is an open source nosql embedded document store written in Java. It has MongoDB like API. I

Nitrite Database 713 Dec 23, 2022
A simple NoSQL client for Android. Meant as a document store using key/value pairs and some rudimentary querying. Useful for avoiding the hassle of SQL code.

SimpleNoSQL A simple NoSQL client for Android. If you ever wanted to just save some data but didn't really want to worry about where it was going to b

Colin Miller 389 Sep 25, 2022
A simple NoSQL client for Android. Meant as a document store using key/value pairs and some rudimentary querying. Useful for avoiding the hassle of SQL code.

SimpleNoSQL A simple NoSQL client for Android. If you ever wanted to just save some data but didn't really want to worry about where it was going to b

Colin Miller 389 Sep 25, 2022
Kodein-DB is a Kotlin/Multiplatform embedded NoSQL database that works on JVM, Android, Kotlin/Native and iOS.

Kodein-DB is a Kotlin/Multiplatform embedded NoSQL database that works on JVM, Android, Kotlin/Native and iOS. It is suited for client or mobile applications.

null 277 Dec 3, 2022
Document Viewer is a highly customizable document viewer for Android.

Document Viewer Document Viewer is a highly customizable document viewer for Android. Supports the following formats: PDF DjVu EPUB XPS (OpenXPS) CBZ

Sufficiently Secure 492 Jan 8, 2023
MiHawk 🦅👁️ is simple and secure 🔒 Android Library to store and retrieve pair of key-value data with encryption , internally it use jetpack DataStore Preferences 💽 to store data.

MiHawk MiHawk ?? ??️ is simple and secure ?? Android Library to store and retrieve pair of key-value data with encryption , internally it use jetpack

Nedal Hasan Ibrahem 5 Sep 3, 2022
Candroid does things different. The Candroid app store is a library of APK client wrappers (F-Droid, APKPure, etc.) For the main Candroid app store, try visiting the Candroid Market.

Candroid App Store Candroid does things different. The Candroid app store is a library of APK client wrappers (F-Droid, APKPure, etc.) For the main Ca

Sean P. Myrick V19.1.7.2 4 Dec 22, 2022
A plugin about embedded browser for IntelliJ IDEA.

browser English | 简体中文 This plugin provides embedded browser (based on Java Chromium Embedded Framework) support for IntelliJ IDEA. Get from Marketpla

蔡琪暢 0 Dec 15, 2021
kafka test with embedded kafka

kafka-test Requirements running Kafka on localhost:9092 How to use cat sampleuser.json | http POST localhost:9000/produce or use runConfiguration ./.r

null 0 Dec 9, 2021
OpenGLES - an embedded version of the OpenGL cross-platform API which is used to render 2D/3D texture

OpenGLES is an embedded version of the OpenGL cross-platform API which is used to render 2D/3D texture. This sample code contains the implementation of shape rendering using OpenGLES.

MindInventory 5 Sep 20, 2022
Draftsman is an on device layout inspector which can be embedded in your android app.

Draftsman Draftsman is an on-device layout inspector for Android apps. It allows you to view various properties of rendered Android Views such as widt

Gojek 243 Dec 22, 2022
This repo is to document my learning about Custom views in android

Custom-Views This repo is to document my learning about Custom views in android Note: If you are trying to understand Custom views, go in order: Custo

Kshitij Kumar 7 Feb 24, 2022
A simple Pdf document viewer 💼

Pdf Viewer Plus Screenshots Main Page Main Page Cyanea Permissions and privacy This app does not collect any data. The following permissions are requi

gokul 332 Dec 7, 2022
Generate a JSON bookmarks document from a GitHub user

Github to bookmarks This little webapp will generate a JSON bookmarks document from a GitHub user. This is intended to be used with bbt. An instance i

Benoit Lubek 2 Nov 8, 2021
This document will walk you through the steps for creating your Android app that runs a deep learning image classification model trained in Pocket AutoML and exported in TensorFlow Lite format

Pocket AutoML: Tutorial for Creating an Android App for Image Classification with Deep Learning Translations English (this document) Русский Overview

Evgeniy Mamchenko 15 Nov 22, 2022
A sample Grocery Store app built using the Room, MVVM, Live Data, Rx Java, Dependency Injection (Kotlin Injection) and support Dark Mode

Apps Intro A sample Grocery Store app built using the Room, MVVM, Live Data, Rx Java, Dependency Injection (Kotlin Injection) and support Dark Mode In

Irsyad Abdillah 25 Dec 9, 2022