{"id":23496414,"url":"https://github.com/eclipse-jnosql/jnosql-databases","last_synced_at":"2026-01-05T10:10:13.139Z","repository":{"id":37916753,"uuid":"67461402","full_name":"eclipse-jnosql/jnosql-databases","owner":"eclipse-jnosql","description":"This project contains Eclipse JNoSQL databases","archived":false,"fork":false,"pushed_at":"2025-03-29T05:39:48.000Z","size":7180,"stargazers_count":69,"open_issues_count":14,"forks_count":39,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-03-29T15:06:19.562Z","etag":null,"topics":["jakartaee","java","jnosql","microprofile","nosql","nosql-databases"],"latest_commit_sha":null,"homepage":"https://www.jnosql.org/","language":"Java","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eclipse-jnosql.png","metadata":{"files":{"readme":"README.adoc","changelog":"CHANGELOG.adoc","contributing":"CONTRIBUTING.adoc","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.adoc","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-06T01:11:50.000Z","updated_at":"2025-03-29T05:39:49.000Z","dependencies_parsed_at":"2023-10-15T12:17:08.966Z","dependency_job_id":"d3f6be1b-3479-46f5-b8a7-18f4e6d2108a","html_url":"https://github.com/eclipse-jnosql/jnosql-databases","commit_stats":null,"previous_names":["eclipse/jnosql-diana-driver","eclipse/jnosql-communication-driver","eclipse-jnosql/jnosql-databases","eclipse/jnosql-databases"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql-databases","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql-databases/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql-databases/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-jnosql%2Fjnosql-databases/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eclipse-jnosql","download_url":"https://codeload.github.com/eclipse-jnosql/jnosql-databases/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247361687,"owners_count":20926643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jakartaee","java","jnosql","microprofile","nosql","nosql-databases"],"created_at":"2024-12-25T04:12:58.190Z","updated_at":"2026-01-05T10:10:13.130Z","avatar_url":"https://github.com/eclipse-jnosql.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Eclipse JNoSQL databases\n:toc: auto\n\nThe Eclipse JNoSQL Database API is a collection of implementations from the https://github.com/eclipse-ee4j/nosql[Jakarta NoSQL] specification.\n\n== ArangoDB\n\nimage::https://jnosql.github.io/img/logos/ArangoDB.png[Arangodb Project,align=\"center\"width=25%,height=25%]\n\nhttps://www.arangodb.com/[ArangoDB] is a native multi-model database with flexible data models for documents, graphs, and key-values.\nBuild high performance applications using a convenient SQL-like query language or JavaScript extensions.\n\nThis API offers support for **Document** and **Key-Value** types.\nThe Graph is possible through Apache TinkerPop.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-arangodb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```ArangoDBConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Arango Properties\"]\n|===\n|Configuration property |Description\n\n|`jnosql.arangodb.host`\n|The database host, where you need to put the port split by colons. E.g.: jnosql.jnosql.arangodb.host=localhost:8529\n\n|`jnosql.arangodb.user`\n|The user's userID.\n\n|`jnosql.arangodb.password`\n|The user's password\n\n|`jnosql.arangodb.timeout`\n|The connection and request timeout in milliseconds.\n\n|`jnosql.arangodb.chunk.size`\n|The chunk size when Protocol is used.\n\n|`jnosql.arangodb.userSsl`\n|The true SSL will be used when connecting to an ArangoDB server.\n\n|`jnosql.arangodb.load.balancing.strategy`\n|The com.arangodb.entity.LoadBalancingStrategy as String.\n\n|`jnosql.arangodb.protocol`\n|The com.arangodb.Protocol as String\n\n|`jnosql.arangodb.connections.max`\n|The maximum number of connections the built-in connection pool will open per host.\n\n|`jnosql.arangodb.acquire.host.list`\n|Set hosts split by comma\n|===\n\nThis is an example using ArangoDB's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.arangodb.communication.ArangoDBDocumentConfiguration\njnosql.document.database=\u003cDATABASE\u003e\njnosql.arangodb.host=localhost:8529\n----\n\nThis is an example using ArangoDB's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.arangodb.communication.ArangoDBKeyValueConfiguration\njnosql.keyvalue.database=\u003cDATABASE\u003e\njnosql.arangodb.host=localhost:8529\n----\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cArangoDBDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cArangoDBDocumentManager\u003e {\n\n    @Produces\n    public ArangoDBDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        ArangoDBDocumentConfiguration configuration = new ArangoDBDocumentConfiguration();\n        ArangoDBDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Repository\n\nThe ```ArangoDBRepository``` interface is an extension of the Repository interface that allows execution of AQL via the ```@AQL``` annotation. Also, it's possible to combine with ```@Param``` annotation to execute parameterized AQL queries:\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends ArangoDBRepository\u003cPerson, String\u003e {\n\n    @AQL(\"FOR p IN Person RETURN p\")\n    List\u003cPerson\u003e findAll();\n\n    @AQL(\"FOR p IN Person FILTER p.name = @name RETURN p\")\n    List\u003cPerson\u003e findByName(@Param(\"name\") String name);\n}\n----\n\n=== @AQL\n\nThe ```@AQL``` annotation is a mapping annotation that allows to define dynamic queries following link:https://www.arangodb.com/docs/stable/aql/[ArangoDB Query Languange] on ```ArangoDBRepository```.\n\n[source,java]\n----\ninterface CarRepository extends ArangoDBRepository\u003cCar, String\u003e {\n\n        @AQL(\"FOR c IN Car RETURN c\")\n        List\u003cCar\u003e findAll();\n\n}\n----\n\n=== @Param\n\nFor parameterized queries, use the ```@Param``` annotation for binding the target argument to the parameter informing the named parameter like the below example:\n\n[source,java]\n----\n\ninterface OrderRepository extends ArangoDBRepository\u003cOrder, String\u003e {\n\n        @AQL(\"FOR o IN Order FILTER o.customer = @customer RETURN o\")\n        List\u003cOrder\u003e findByCustomer(@Param(\"customer\") String customer);\n\n}\n----\n\n\n=== Template\n\nThe ```ArangoDBTemplate``` interface is a specialization of the ```DocumentTemplate``` interface that allows using both synchronous and asynchronous AQL.\n\n[source,java]\n----\n@Inject\nprivate ArangoDBTemplate template;\n...\nList\u003cPerson\u003e people = template.aql(\"FOR p IN Person FILTER p.name = @name RETURN p\", params);\n----\n\n=== How @Id Works in ArangoDB\n\nIn ArangoDB, the `_id` field is a read-only, auto-generated value created by the database. It is a combination of the collection name and the `_key` field in the format `\u003ccollection-name\u003e/\u003c_key\u003e`. The `_id` is automatically managed by the database, meaning any value set by the client will be ignored.\n\nTo map the `_id` and `_key` fields in your entities, you can use the `@Id` annotation and specify the `_key` field explicitly. This allows you to manage the `_key` value directly in your code while letting the database handle the `_id` generation.\n\nFor example:\n\n[source,java]\n----\n@Entity\npublic class User {\n\n    @Id(\"_key\")\n    private String key;\n\n    private String name;\n\n}\n----\n\nIn this example, the `_key` field is annotated with `@Id(\"_key\")`, allowing the application to control the `_key` value while the database auto-generates the corresponding `_id` field. This approach is useful for scenarios where you need to set or manage the `_key` value explicitly in your application logic.\n\n\n== Cassandra\n\nimage::https://jnosql.github.io/img/logos/cassandra.png[Apache Cassandra,align=\"center\"width=25%,height=25%]\n\nhttps://cassandra.apache.org/[Apache Cassandra] is a free and open-source distributed database management system designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-cassandra\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```CassandraConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Cassandra\"]\n|===\n|Configuration property |Description\n\n|`jnosql.cassandra.user`\n|The user's userID.\n\n|`jnosql.cassandra.password`\n|The user's password\n\n|`jnosql.cassandra.host`\n|Database's host. It is a prefix to enumerate hosts. E.g.: jnosql.cassandra.host.1=localhost\n\n|`jnosql.cassandra.name`\n|The name of the application using the created session.\n\n|`jnosql.cassandra.port`\n|The cassandra's port\n\n|`jnosql.cassandra.query`\n|The Cassandra CQL to execute when the configuration starts. It uses as a prefix. E.g.: jnosql.cassandra.query.1=\u003cCQL\u003e\n\n|`jnosql.cassandra.data.center`\n|The datacenter that is considered \"local\" by the load balancing policy.\n|===\n\nThis is an example using Cassandra with MicroProfile Config.\n\n[source,properties]\n----\njnosql.column.provider=org.eclipse.jnosql.databases.cassandra.communication.CassandraConfiguration\njnosql.column.database=developers\njnosql.cassandra.query-1=\u003cCQL-QUERY\u003e\njnosql.cassandra.query.2=\u003cCQL-QUERY-2\u003e\n----\n\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cCassandraColumnManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cCassandraColumnManager\u003e {\n\n    @Produces\n    public CassandraColumnManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        CassandraConfiguration configuration = new CassandraConfiguration();\n        CassandraColumnManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n=== Repository\n\nThe ```CassandraRepository``` interface is an extension of the ```Repository``` interface that allows execution of CQL and Consistency Level via the ```@CQL``` annotation.\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends CassandraRepository\u003cPerson, String\u003e {\n\n    @CQL(\"select * from Person\")\n    List\u003cPerson\u003e findAll();\n\n    @CQL(\"select * from Person where name = ?\")\n    List\u003cPerson\u003e findByName(String name);\n\n    @CQL(\"select * from Person where age = :age\")\n    List\u003cPerson\u003e findByAge(@Param(\"age\") Integer age);\n }\n----\n\n\n=== UDT at Column annotation\n\nThe ```@Column``` contains a UDT attribute for mapping annotation that allows defining a field to be stored as a user-defined type in Cassandra.\n\n[source,java]\n----\n@Entity\npublic class Person {\n\n    @Id(\"name\")\n    private String name;\n\n    @Column\n    private Integer age;\n\n    @Column(udt=\"address\")\n    private Address home;\n }\n----\n\n=== Converts\n\n* TimestampConverter: That converts to/from java.util.Date\n* LocalDateConverter: That converts to/from com.datastax.driver.core.LocalDate\n\n[source,java]\n----\n    @Column\n    @Convert(value = TimestampConverter.class)\n    private LocalDateTime localDateTime;\n\n    @Column\n    @Convert(value = LocalDateConverter.class)\n    private Calendar calendar;\n----\n\n=== Template\n\nThe ```CassandraTemplate``` interface is a specialization of ```ColumnTemplate``` interface that allows using CQL.\n\n[source,java]\n----\n@Inject\nCassandraTemplate template;\n...\ntemplate.save(person, ConsistencyLevel.ONE);\n----\n\n== Couchbase\n\nimage::https://jnosql.github.io/img/logos/couchbase.svg[Couchbase Project,align=\"center\"width=25%,height=25%]\n\nThe https://www.couchbase.com/[Couchbase] driver provides an API integration between Java and the database through a standard communication level.\n\nThis driver has support for two NoSQL API types: *Document* and *Key-Value*.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-couchbase\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```CouchbaseConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Couchbase\"]\n|===\n|Configuration property |Description\n\n\n|`jnosql.couchbase.host`\n|The host at the database.\n\n|`jnosql.couchbase.user`\n|The user's userID.\n\n|`jnosql.couchbase.password`\n|The user's password\n\n|`jnosql.couchbase.scope`\n|The scope to use at couchbase otherwise, it will use the default.\n\n|`jnosql.couchbase.collections`\n|couchbase collection split by a comma. At the start-up of a CouchbaseConfiguration, there is this option to check if these collections exist; if not, it will create using the default settings.\n\n|`jnosql.couchbase.collection`\n|A default couchbase collection. When it is not defined the default value comes from Bucket.\n\n|`jnosql.couchbase.index`\n|A couchbase collection index. At the start-up of a {@link CouchbaseConfiguration}, it will read this property to check if the index does exist, if not it will create combined by scope and the database.\n\n\n|===\n\nThis is an example using Couchbase's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.couchbase.communication.CouchbaseDocumentConfiguration\njnosql.document.database=heroes\njnosql.couchbase.host.1=localhost\njnosql.couchbase.user=root\njnosql.couchbase.password=123456\n----\n\nThis is an example using Couchbase's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.database=heroes\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.couchbase.communication.CouchbaseKeyValueConfiguration\njnosql.couchbase.host.1=localhost\njnosql.couchbase.user=root\njnosql.couchbase.password=123456\n----\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cCouchbaseDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cCouchbaseDocumentManager\u003e {\n\n    @Produces\n    public CouchbaseDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        CouchbaseDocumentConfiguration configuration = new CouchbaseDocumentConfiguration();\n        CouchbaseDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n=== Repository\n\nThe ```CouchbaseRepository``` interface is an extension of the ```Repository``` interface that allows execution of N1QL via the ```@N1QL``` annotation.\n\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends CouchbaseRepository\u003cPerson, String\u003e {\n\n@N1QL(\"select * from Person\")\nList\u003cPerson\u003e findAll();\n\n@N1QL(\"select * from Person where name = $name\")\nList\u003cPerson\u003e findByName(@Param(\"name\") String name);\n\n}\n----\n\n\n=== Template\n\nThe ```CouchbaseTemplate``` interface is a specialization of the ```DocumentTemplate``` interface that allows using N1QL on both synchronous and asynchronous.\n\n[source,java]\n----\nList\u003cPerson\u003e people = template.n1qlQuery(\"select * from Person where name = $name\", params);\n----\n\n== CouchDB\n\nimage::https://www.jnosql.org/img/logos/couchdb.png[CouchDB,align=\"center\"width=25%,height=25%]\n\nThe https://couchdb.apache.org/[CouchDB] driver provides an API integration between Java and the database through a standard communication level.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-couchdb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```CouchDBConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"CouchDB\"]\n|===\n|Configuration property |Description\n\n|`jnosql.couchdb.port`\n|The port connection to a client connect. The default value is \"5984\"\n\n|`jnosql.couchdb.max.connections`\n|The max of connection that the couchdb client have. The default value is \"20\"\n\n|`jnosql.couchdb.connection.timeout`\n|The timeout in milliseconds used when requesting a connection. The default value is \"1000\".\n\n|`jnosql.couchdb.socket.timeout`\n|The socket timeout in milliseconds, which is the timeout for waiting for data or, put differently, a maximum period inactivity between two consecutive data packets). The default value is \"10000\".\n\n|`jnosql.couchdb.max.object.size.bytes`\n|The current maximum response body size that will be cached. The value is \"8192\".\n\n|`jnosql.couchdb.max.cache.entries`\n|The maximum number of cache entries the cache will retain. The default value is \"1000\".\n\n|`jnosql.couchdb.host`\n|The host at the database.\n\n|`jnosql.couchdb.username`\n|The user's userID.\n\n|`jnosql.couchdb.password`\n|The user's password\n\n|`jnosql.couchdb.enable.ssl`\n|If the request use a https or a http.\n\n|`jnosql.couchdb.compression`\n|Determines whether compressed entities should be decompressed automatically.\n\n|===\n\nThis is an example using CouchDB's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.couchdb.communication.CouchDBDocumentConfiguration\njnosql.document.database=heroes\njnosql.couchdb.host=localhost\njnosql.couchdb.username=admin\njnosql.couchdb.password=password\n----\n\n== DynamoDB\n\nimage::https://user-images.githubusercontent.com/6509926/70553550-f033b980-1b40-11ea-9192-759b3b1053b3.png[Redis Project,align=\"center\" width=50%,height=50%]\n\nhttps://aws.amazon.com/dynamodb/[Amazon DynamoDB] is a fully managed, serverless, key-value and document NoSQL database designed to run high-performance applications at any scale. DynamoDB offers built-in security, continuous backups, automated multi-Region replication, in-memory caching, and data import and export tools.\n\nThis driver has support for two NoSQL API types: *Key-Value* and *Document*.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-dynamodb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```DynamoDBConfigurations``` class to programmatically establish the credentials.\n\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"DynamoDB\"]\n|===\n|Configuration property |Description\n\n|`jnosql.dynamodb.endpoint`\n|DynamoDB’s URL\n\n|`jnosql.dynamodb.region`\n|Configure the region with which the application should communicate.\n\n|`jnosql.dynamodb.profile`\n| Define the name of the profile that should be used by this credentials provider.\n\n|`jnosql.dynamodb.awsaccesskey`\n|The AWS access key, used to identify the user interacting with AWS.\n\n|`jnosql.dynamodb.secretaccess`\n|The AWS secret access key, used to authenticate the user interacting with AWS.\n\n|===\n\n=== Using the Key-value API\n\nThis is an example using DynamoDB's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBKeyValueConfiguration\njnosql.keyvalue.database=heroes\n----\n\n=== Using the Document API\n\nHere's an example using DynamoDB's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.dynamodb.communication.DynamoDBDocumentConfiguration\njnosql.document.database=heroes\n----\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cDynamoDBDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cDynamoDBDocumentManager\u003e {\n\n    @Produces\n    public DynamoDBDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        DynamoDBDocumentConfiguration configuration = new DynamoDBDocumentConfiguration();\n        DynamoDBDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Repository\n\nThe `DynamoDBRepository` interface is an extension of the `Repository` interface that allows execution of PartiQL via the `@PartiQL` annotation.\n\nWARNING: DynamoDB supports a limited subset of\nhttps://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html[PartiQL].\n\nNOTE: This implementation doesn't provide pagination on the queries.\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends DynamoDBRepository\u003cPerson, String\u003e {\n\n@PartiQL(\"select * from Person\")\nList\u003cPerson\u003e findAll();\n\n@PartiQL(\"select * from Person where name = ?\")\nList\u003cPerson\u003e findByName(@Param(\"\") String name);\n\n}\n----\n\n=== Template\n\nThe `DynamoDBTemplate` interface is a specialization of the `DocumentTemplate` interface that allows using PartiQL queries.\n\nWARNING: DynamoDB supports a limited subset of\nhttps://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html[PartiQL].\n\nNOTE: This implementation doesn't provide pagination on the queries.\n\n[source,java]\n----\nList\u003cPerson\u003e people = template.partiQL(\"select * from Person where name = ? \", Person.class, params);\n----\n\n==== Creating the tables on-the-fly\n\n[IMPORTANT]\n====\nIt's highly recommended to create the tables in a proper way, paying attention to the partition key and sort key, as well as the indexes.\n====\n\nThe DynamoDB implementation allows you to create tables on-the-fly, which can be useful for development and testing purposes. However, this feature should be used with caution in production environments, as it may lead to unexpected behavior or performance issues if not properly configured.\n\nTo create tables on-the-fly, you need to define the following properties:\n\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"DynamoDB\"]\n|===\n|Configuration property |Description | Default value\n\n|`jnosql.dynamodb.create.tables`\n| If set to true, the implementation will create the tables on-the-fly when the application starts. This is useful for development and testing purposes, but should be used with caution in production environments.\n| false\n\n|`jnosql.dynamodb.\u003ctable\u003e.pk`\n| The partition key field name for the table. This is used to define the primary key of the table. The `\u003ctable\u003e` part should be replaced with the actual table name.\n| _id\n\n|`jnosql.dynamodb.\u003ctable\u003e.read.capacity.units`\n| The read capacity units for the table. This defines the number of strongly consistent reads per second that the table can support.The `\u003ctable\u003e` part should be replaced with the actual table name. It's optional.\n| none\n\n|`jnosql.dynamodb.\u003ctable\u003e.write.capacity.units`\n| The write capacity units for the table. This defines the number of strongly consistent writes per second that the table can support.The `\u003ctable\u003e` part should be replaced with the actual table name. It's optional.\n| none\n\n|===\n\n== Elasticsearch\n\nimage::https://jnosql.github.io/img/logos/elastic.svg[Elasticsearch Project,align=\"center\"width=25%,height=25%]\n\nhttps://www.elastic.co/[Elasticsearch] is a search engine based on Lucene.\nIt provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.\nElasticsearch is developed in Java and is released as open source under the terms of the Apache License.\nElasticsearch is the most popular enterprise search engine followed by Apache Solr, also based on Lucene.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-elasticsearch\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```ElasticsearchConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Elasticsearch\"]\n|===\n|Configuration property |Description\n\n|`jnosql.elasticsearch.host`\n|Database's host. It is a prefix to enumerate hosts. E.g.: jnosql.elasticsearch.host.1=172.17.0.2:1234\n\n|`jnosql.elasticsearch.user`\n|The user's userID.\n\n|`jnosql.elasticsearch.password`\n|The user's password\n\n|===\n\nThis is an example using Elasticsearch's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.elasticsearch.communication.ElasticsearchDocumentConfiguration\njnosql.document.database=developers\n----\n\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cElasticsearchDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cElasticsearchDocumentManager\u003e {\n\n    @Produces\n    public ElasticsearchDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        ElasticsearchDocumentConfiguration configuration = new ElasticsearchDocumentConfiguration();\n        ElasticsearchDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Template\n\nThe ```ElasticsearchTemplate``` interface is a specialization of the ```DocumentTemplate``` interface that allows using a search engine on both synchronous and asynchronous.\n\n[source,java]\n----\n@Inject\nElasticsearchTemplate template;\n...\n\nQueryBuilder queryBuilder = boolQuery().filter(termQuery(\"name\", \"Ada\"));\nList\u003cPerson\u003e people = template.search(queryBuilder, \"Person\");\n----\n\n== Hazelcast\n\nimage::https://jnosql.github.io/img/logos/hazelcast.svg[Hazelcast Project,align=\"center\" width=25%,height=25%]\n\nhttps://hazelcast.com/[Hazelcast] is an open source in-memory data grid based on Java.\n\nThis driver provides support for the *Key-Value* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-hazelcast\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```HazelcastConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Hazelcast\"]\n|===\n|Configuration property |Description\n\n|`jnosql.hazelcast.instance.name`\n|The instance name uniquely identifying the hazelcast instance created by this configuration. This name is used in different scenarios, such as identifying the hazelcast instance when running multiple instances in the same JVM.\n\n|`jnosql.hazelcast.host`\n|Database's host. It is a prefix to enumerate hosts. E.g.: jnosql.hazelcast.host.1=localhost\n\n|`jnosql.hazelcast.port`\n|The database port\n\n|`jnosql.hazelcast.port.count`\n|The maximum number of ports allowed to use.\n\n|`jnosql.hazelcast.port.auto.increment`\n|Sets if a Hazelcast member is allowed to find a free port by incrementing the port number when it encounters an occupied port.\n\n|`jnosql.hazelcast.multicast.enable`\n|Enables or disables the multicast discovery mechanism\n\n|`jnosql.hazelcast.tcp.ip.join`\n|Enables or disables the Tcp/Ip join mechanism.\n\n|===\n\nThis is an example using Hazelcast's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.hazelcast.communication.HazelcastKeyValueConfiguration\njnosql.keyvalue.database=heroes\n----\n\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cHazelcastBucketManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cHazelcastBucketManager\u003e {\n\n    @Produces\n    public HazelcastBucketManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        HazelcastKeyValueConfiguration configuration = new HazelcastKeyValueConfiguration();\n        HazelcastBucketManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Repository\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends HazelcastRepository\u003cPerson, String\u003e {\n\n        @Query(\"active\")\n        List\u003cPerson\u003e findActive();\n\n        @Query(\"name = :name AND age = :age\")\n        Set\u003cPerson\u003e findByAgeAndInteger(@Param(\"name\") String name, @Param(\"age\") Integer age);\n    }\n----\n\n=== Template\n\nThe ```HazelcastTemplate``` interface is a specialization of the ```KeyValueTemplate``` interface that allows execution of a Hazelcast query.\n\n[source,java]\n----\nCollection\u003cPerson\u003e people = template.query(\"active\");\nCollection\u003cPerson\u003e people2 = template.query(\"age = :age\", singletonMap(\"age\", 10));\nCollection\u003cPerson\u003e people3 = template.query(Predicates.equal(\"name\",  \"Poliana\"));\n----\n\n== HBase\n\nimage::https://jnosql.github.io/img/logos/hbase.png[Hbase Project,align=\"center\" width=25%,height=25%]\n\nhttps://hbase.apache.org/[HBase] is an open source, non-relational, distributed database modeled after Google's BigTable and is written in Java.\n\nThis driver provides support for the *Column Family* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-hbase\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```HbaseConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"HBase\"]\n|===\n|Configuration property |Description\n\n|`jnosql.hbase.family`\n|The Column family prefixes. E.g.: jnosql.hbase.family.1=\u003cFAMILY\u003e\n\n|===\n\nThis is an example using HBase's *Column Family* NoSQL API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.hbase.communication.HBaseColumnConfiguration\njnosql.column.database=heroes\n----\n\n== Infinispan\n\nimage::https://jnosql.github.io/img/logos/infinispan.svg[Infinista Project,align=\"center\" width=25%,height=25%]\n\nhttps://infinispan.org/[Infinispan] is a distributed in-memory key/value data store with optional schema, available under the Apache License 2.0.\n\nThis driver provides support for the *Key-Value* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-infinispan\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```InfinispanConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Infinispan\"]\n|===\n|Configuration property |Description\n\n|`jnosql.infinispan.host`\n|Database's host. It is a prefix to enumerate hosts. E.g.: jnosql.infinispan.host.1=HOST\n\n|`jnosql.infinispan.config`\n|The Infinispan configuration path. E.g.: jnosql.infinispan.config=infinispan.xml\n\n|===\n\nThis is an example using Infinispan's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.infinispan.communication.InfinispanKeyValueConfiguration\njnosql.keyvalue.database=heroes\njnosql.infinispan.config=infinispan.xml\n----\n\n== Memcached\n\nimage::https://www.jnosql.org/img/logos/memcached.png[Memcached Project,align=\"center\" width=25%,height=25%]\n\nhttps://memcached.org/[Memcached] is a general-purpose distributed memory caching system.\nIt is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read.\nMemcached is free and open-source software, licensed under the Revised BSD license.\nMemcached runs on Unix-like operating systems (at least Linux and OS X) and on Microsoft Windows.\n\nThis driver provides support for the *Key-Value* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-memcached\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```MemcachedConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Memcached\"]\n|===\n|Configuration property |Description\n\n|`jnosql.memcached.daemon`\n|The daemon state of the IO thread (defaults to true).\n\n|`jnosql.memcached.reconnect.delay`\n|The maximum reconnect delay\n\n|`jnosql.memcached.protocol`\n|The protocol type  net.spy.memcached.ConnectionFactoryBuilder.Protocol\n\n|`jnosql.memcached.locator`\n|The locator type net.spy.memcached.ConnectionFactoryBuilder.Locator\n\n|`jnosql.memcached.auth.wait.time`\n|Custom wait time for the authentication on connect/reconnect.\n\n|`jnosql.memcached.max.block.time`\n|The maximum amount of time (in milliseconds) a client is willing to wait for space to become available in an output queue.\n\n|`jnosql.memcached.timeout`\n|The default operation timeout in milliseconds.\n\n|`jnosql.memcached.read.buffer.size`\n|The read buffer size.\n\n|`jnosql.memcached.should.optimize`\n|The default operation optimization is not desirable.\n\n|`jnosql.memcached.timeout.threshold`\n|The maximum timeout exception threshold.\n\n|`jnosql.memcached.nagle.algorithm`\n|Enable the Nagle algorithm.\n\n|`jnosql.memcached.user`\n|The user's userID\n\n|`jnosql.memcached.password`\n|The user's password.\n\n|`jnosql.memcached.host`\n|Database's host. It is a prefix to enumerate hosts. E.g.: jnosql.memcached.host.1=localhost:11211\n\n|===\n\nThis is an example using Memcached's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.memcached.communication.MemcachedKeyValueConfiguration\njnosql.keyvalue.database=heroes\njnosql.memcached.host.1=localhost:11211\n----\n\n== MongoDB\n\nimage::https://jnosql.github.io/img/logos/mongodb.png[MongoDB Project,align=\"center\" width=25%,height=25%]\n\nhttps://www.mongodb.com/[MongoDB] is a free and open-source cross-platform document-oriented database program.\nClassified as a NoSQL database program, MongoDB uses JSON-like documents with schemas.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-mongodb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```MongoDBDocumentConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"MongoDB\"]\n|===\n|Configuration property |Description\n\n|`jnosql.mongodb.host`\n|The database host as prefix. E.g.: mongodb.host.1=localhost:27017\n\n|`jnosql.mongodb.user`\n|The user's userID.\n\n|`jnosql.mongodb.url`\n|MongoDB's connection string\n\n|`jnosql.mongodb.password`\n|The user's password\n\n|`jnosql.mongodb.authentication.source`\n|The source where the user is defined.\n\n|`jnosql.mongodb.authentication.mechanism`\n|Authentication mechanisms com.mongodb.AuthenticationMechanism\n\n|===\n\nThis is an example using Mongodb's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.database=olympus\njnosql.mongodb.host=localhost:27017\njnosql.document.provider=org.eclipse.jnosql.databases.mongodb.communication.MongoDBDocumentConfiguration\n----\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cMongoDBDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cMongoDBDocumentManager\u003e {\n\n    @Produces\n    public MongoDBDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        MongoDBDocumentConfiguration configuration = new MongoDBDocumentConfiguration();\n        MongoDBDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Converter\n\nIn this extension, you have the option to convert to/from the MongoDB ```ObjectID```.\n\n[source,java]\n----\n@Entity\npublic class Music {\n\n    @Id\n    @Convert(ObjectIdConverter.class)\n    private String id;\n\n}\n----\n\n=== Template\n\nThe ```MongoDBTemplate``` interface is a specialization of the ```DocumentTemplate``` interface that allows MongoDB particular behavior such as delete and select elements using a `Bson` implementation and aggreate query.\n\n\n[source,java]\n----\n@Inject\nMongoDBTemplate template;\n...\n\nBson filter = eq(\"name\", \"Poliana\");\nStream\u003cPerson\u003e stream = template.select(Person.class , filter);\n----\n\n== Oracle NoSQL\n\nimage::https://www.jnosql.org/img/logos/oracle.png[Oracle NoSQL Project,align=\"center\"width=25%,height=25%]\n\nhttps://www.oracle.com/database/nosql/technologies/nosql/[Oracle NoSQL Database] is a versatile multi-model database offering flexible data models for documents, graphs, and key-value pairs. It empowers developers to build high-performance applications using a user-friendly SQL-like query language or JavaScript extensions.\n\nThis API provides support for *Document* and *Key-Value* data types.\n\n=== Installation\n\nYou can include Oracle NoSQL as a dependency using either Maven or Gradle:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-oracle-nosql\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThe API offers the `OracleNoSQLConfigurations` class to programmatically set up credentials. It also supports configuration via the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Oracle NoSQL Properties\"]\n|===\n| Property Name | Description\n\n| `jnosql.oracle.nosql.host` | Hostname or IP address of the Oracle NoSQL database server.\n\n| `jnosql.oracle.nosql.user` | Username for Oracle NoSQL database authentication.\n\n| `jnosql.oracle.nosql.password` | Password for Oracle NoSQL database authentication.\n\n| `jnosql.oracle.nosql.table.read.limit` | Desired throughput of read operations when creating tables with Eclipse JNoSQL.\n\n| `jnosql.oracle.nosql.table.write.limit` | Desired throughput of write operations when creating tables with Eclipse JNoSQL.\n\n| `jnosql.oracle.nosql.table.storage.gb` | Maximum storage in gigabytes for tables created with Eclipse JNoSQL.\n\n| `jnosql.oracle.nosql.table.wait.millis` | Total waiting time in milliseconds when creating a table.\n\n| `jnosql.oracle.nosql.table.delay.millis` | Time between polling attempts in milliseconds when creating a table.\n\n| `jnosql.oracle.nosql.tenant.id` | Tenant ID for Oracle NoSQL database in a Cloud deployment.\n\n| `jnosql.oracle.nosql.fingerprint` | Fingerprint for authentication with Oracle NoSQL database in a Cloud deployment.\n\n| `jnosql.oracle.nosql.private.key` | Private key for authentication with Oracle NoSQL database in a Cloud deployment.\n\n| `jnosql.oracle.nosql.compartment` | Compartment name in Oracle Cloud Infrastructure.\n\n| `jnosql.oracle.nosql.namespace` | Namespace name in Oracle NoSQL on-premises.\n\n| `jnosql.oracle.nosql.profile.name` | Specifies the profile name used to load session token in Oracle NoSQL cloud.\n\n| `jnosql.oracle.nosql.config.file` | Specifies the path of configuration file used to load session token in Oracle NoSQL cloud.\n\n| `jnosql.oracle.nosql.deployment` | Specifies the deployment type for Oracle NoSQL database. You can choose from the following options:\n\n- `ON_PREMISES`: Represents an on-premises deployment where software solutions are deployed and managed within an organization's physical premises or data centers.\n\n- `CLOUD_API_KEY`: Represents a cloud deployment using API key for authentication and authorization.\n\n- `CLOUD_INSTANCE_PRINCIPAL`: Represents a cloud deployment using instance principal for authentication and authorization.\n\n- `CLOUD_RESOURCE_PRINCIPAL`: Represents a cloud deployment using resource principal for authentication and authorization.\n\n- `CLOUD_INSTANCE_OBO_USER`: Represents a cloud deployment using instance principal for delegation with an OBO token.\n\n- `CLOUD_SECURITY_TOKEN`: Represents a \"Cloud\" deployment using resource principal for delegation with an OBO token.\n|===\n\nBelow are examples using Oracle NoSQL's Document API and Key-Value API with MicroProfile Config.\n\n**Document API Example:**\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.oracle.communication.OracleDocumentConfiguration\njnosql.document.database=library\njnosql.oracle.nosql.host=http://localhost:8080\n----\n\n**Key-Value API Example:**\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.oracle.communication.OracleNoSQLKeyValueConfiguration\njnosql.keyvalue.database=library\njnosql.oracle.nosql.host=http://localhost:8080\n----\n\nAlthough these are the default configuration settings, you have the option to configure them programmatically. Create a class that implements `Supplier\u003cOracleNoSQLDocumentManager\u003e`, annotate it with `@Alternative`, and set the priority using `@Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cOracleNoSQLDocumentManager\u003e {\n\n    @Produces\n    public OracleNoSQLDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        OracleDocumentConfiguration configuration = new OracleDocumentConfiguration();\n        OracleDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n\n=== Repository\n\nThe `OracleNoSQLRepository` interface extends the Repository interface and allows executing SQL queries using the `@SQL` annotation. You can also combine it with the `@Param` annotation for parameterized SQL queries:\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends OracleNoSQLRepository\u003cPerson, String\u003e {\n\n    @SQL(\"select * from Person\")\n    List\u003cPerson\u003e findAll();\n\n    @SQL(\"select * from Person where name = ?\")\n    List\u003cPerson\u003e findByName(@Param(\"\") String name);\n}\n----\n\n\n=== Template\n\nThe `OracleNoSQLTemplate` interface, an extension of the `DocumentTemplate`, enables synchronous SQL operations.\n\n[source,java]\n----\n@Inject\nprivate OracleNoSQLTemplate template;\n...\nList\u003cPerson\u003e people = template.sql(\"select * from people where people.content.name =?\", \"Ada\");\n----\n\n\n== OrientDB\n\nimage::https://jnosql.github.io/img/logos/orientdb.png[Orient Project,align=\"center\" width=25%,height=25%]\n\nhttps://orientdb.org/[OrientDB] is an open source NoSQL database management system written in Java.\nIt is a multi-model database, supporting graph, document, key/value, and object models, but the relationships are managed as in graph databases with direct connections between records.\nIt supports schema-less, schema-full and schema-mixed modes.\nIt has a strong security profiling system based on users and roles and supports querying with Gremlin along with SQL extended for graph traversal.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-orientdb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```OrientDBDocumentConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"OrientDB\"]\n|===\n|Configuration property |Description\n\n|`jnosql.orientdb.host`\n|The database host. It can be pointing to remote database (e.g: `remote:\u003cHOST or IP\u003e:\u003cPORT\u003e`) or an embedded database (e.g: `embedded:\u003cDIRETORY\u003e`). Please, follow the link:https://github.com/orientechnologies/orientdb/blob/develop/core/src/main/java/com/orientechnologies/orient/core/db/OrientDB.java[OrientDB Javadoc, target=window] for more details.\n\n|`jnosql.orientdb.user`\n|The user's userID.\n\n|`jnosql.orientdb.password`\n|The user's password\n\n|`jnosql.orientdb.storage.type`\n|The storage type com.orientechnologies.orient.core.db.ODatabaseType\n\n|===\n\nThis is an example using OrientDB's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.orientdb.communication.OrientDBDocumentConfiguration\njnosql.document.database=heroes\njnosql.orientdb.host=remote:localhost:2424\njnosql.orientdb.user=root\njnosql.orientdb.password=rootpwd\njnosql.orientdb.storageType=plocal\n----\n\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cOrientDBDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cOrientDBDocumentManager\u003e {\n\n    @Produces\n    public OrientDBDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        OrientDBDocumentConfiguration configuration = new OrientDBDocumentConfiguration();\n        OrientDBDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n=== Repository\n\nThe ```OrientDBCrudRepository``` interface  is an extension of the ```Repository``` interface that allows execution of a SQL Query via the ```@SQL``` annotation.\n\n[source,java]\n----\n@Repository\n    interface PersonRepository extends OrientDBCrudRepository\u003cPerson, String\u003e {\n\n        @SQL(\"select * from Person\")\n        List\u003cPerson\u003e findAll();\n\n        @SQL(\"select * from Person where name = ?\")\n        List\u003cPerson\u003e findByName(String name);\n\n        @SQL(\"select * from Person where age = :age\")\n        List\u003cPerson\u003e findByAge(@Param(\"age\") Integer age);\n    }\n----\n\n=== Template\n\nThe ```OrientDBTemplate``` interface is a specialization of the ```DocumentTemplate``` interface that allows execution of a SQL query and live query on both synchronous and asynchronous.\n\n[source,java]\n----\n@Inject\nOrientDBTemplate template;\n...\n\nStream\u003cPerson\u003e stream = template.sql(\"select * from Person where name = ?\", \"Ada\");\ntemplate.live(\"select from Person where name = ?\", callBack, \"Ada\");\n----\n\n== RavenDB\n\nimage::https://www.jnosql.org/img/logos/ravendb.png[RavenDB Project,align=\"center\",align=\"center\" width=50%,height=50%]\n\nhttps://ravendb.net/[RavenDB] is a fully Transactional Open Source NoSQL Document Database.\nEasy to use, rapidly scalable, offers high availability, and takes your Business into the Next Generation of Data Performance.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-ravendb\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```RavenDBConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"RavenDB\"]\n|===\n|Configuration property |Description\n\n|`jnosql.ravendb.host`\n|The database host\n\n|===\n\nThis is an example using RavenDB's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.ravendb.communication.RavenDBDocumentConfiguration\njnosql.document.database=heroes\n----\n\n\n== Redis\n\nimage::https://jnosql.github.io/img/logos/redis.png[Redis Project,align=\"center\" width=25%,height=25%]\n\nhttps://redis.com/[Redis] is a software project that implements data structure servers.\nIt is open-source, networked, in-memory, and stores keys with optional durability.\n\nThis driver provides support for the *Key-Value* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-redis\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis is an example using Redis's Key-Value API with MicroProfile Config.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.redis.communication.RedisConfiguration\njnosql.keyvalue.database=heroes\n----\n\nThis API provides enum classes to programmatically establish the credentials as:\n\n- link:README.adoc#_single_node_configuration[`RedisConfigurations`] for single node configuration\n+\n[source,properties]\n----\n# Single Node Configuration\n\n# by default the host is localhost\njnosql.redis.host=localhost\n# by default the port is 6379\njnosql.redis.port=6379\n# if you have user\njnosql.redis.user=youruser\n# if you have password\njnosql.redis.password=yourpassword\n----\n\n- link:README.adoc#_redis_sentinel_configuration[`RedisSentinelConfigurations`] for sentinel configuration\n+\n[source,properties]\n----\n# Sentinel Configuration\njnosql.redis.sentinel.hosts=host1:26379,host2:26379\n\njnosql.redis.sentinel.master.name=masterName\njnosql.redis.sentinel.master.user=masterUser\njnosql.redis.sentinel.master.password=masterPassword\n#jnosql.redis.sentinel.master.ssl=false\n#jnosql.redis.sentinel.master.timeout=2000\n#jnosql.redis.sentinel.master.connection.timeout=2000\n#jnosql.redis.sentinel.master.socket.timeout=2000\n\njnosql.redis.sentinel.slave.user=slaveUser\njnosql.redis.sentinel.slave.password=slavePassword\n#jnosql.redis.sentinel.slave.ssl=false\n#jnosql.redis.sentinel.slave.timeout=2000\n#jnosql.redis.sentinel.slave.connection.timeout=2000\n#jnosql.redis.sentinel.slave.socket.timeout=2000\n----\n\n- link:README.adoc#_redis_sentinel_configuration[`RedisClusterConfigurations`] for cluster configuration\n+\n[source,properties]\n----\n# Cluster Configuration\n\njnosql.redis.cluster.hosts=host1:6379,host2:6379\njnosql.redis.cluster.user=clusterUser\njnosql.redis.cluster.password=clusterPassword\njnosql.redis.cluster.client.name=clusterClientName\njnosql.redis.cluster.max.attempts=5\njnosql.redis.cluster.max.total.retries.duration=10000\n#jnosql.redis.cluster.ssl=false\n#jnosql.redis.cluster.timeout=2000\n#jnosql.redis.cluster.connection.timeout=2000\n#jnosql.redis.cluster.socket.timeout=2000\n----\n\n==== Single Node Configuration\n\nThis API provides the `RedisConfigurations` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"2,2\", options=\"header\"]\n|===\n|Configuration property |Description\n\n|`jnosql.redis.host` |The database host\n|`jnosql.redis.port` |The database port\n|`jnosql.redis.timeout` |The redis timeout, the default value is 2000 milliseconds\n|`jnosql.redis.password` |The password's credential\n|`jnosql.redis.database` |The redis database number\n|`jnosql.redis.client.name` |The cluster client's name. The default value is 0.\n|`jnosql.redis.max.total` |The value for the maxTotal configuration attribute for pools created with this configuration instance. The default value is 1000.\n|`jnosql.redis.max.idle` |The value for the maxIdle configuration attribute for pools created with this configuration instance. The default value is 10.\n|`jnosql.redis.min.idle` |The value for the minIdle configuration attribute for pools created with this configuration instance. The default value is 1.\n|`jnosql.redis.max.wait.millis` |The value for the maxWait configuration attribute for pools created with this configuration instance. The default value is 3000 milliseconds.\n|`jnosql.redis.connection.timeout` |The connection timeout in milliseconds configuration attribute for the jedis client configuration created with this configuration instance.\n|`jnosql.redis.socket.timeout` |The socket timeout in milliseconds configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.user` |The user configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.ssl` |The ssl configuration attribute for the jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.protocol` |The protocol configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.clientset.info.config.disabled` |The clientset info disabled configuration attribute for the jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.clientset.info.config.libname.suffix` |The clientset info configuration libname suffix attribute for the jedis client configuration with this configuration instance.\n|===\n\n==== Redis Sentinel Configuration\n\nThis API provides the `RedisSentinelConfigurations` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"2,2\", options=\"header\"]\n|===\n|Configuration Property |Description\n\n|`jnosql.redis.sentinel.hosts` |The value for the sentinel HOST:PORT (separated by comma) configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.name` |The value for the master name configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.client.name` |The master client's name, the default value is 0\n|`jnosql.redis.sentinel.slave.client.name` |The slave client's name, the default value is 0\n|`jnosql.redis.sentinel.master.timeout` |The master redis timeout, the default value is 2000 milliseconds\n|`jnosql.redis.sentinel.slave.timeout` |The slave redis timeout, the default value is 2000 milliseconds\n|`jnosql.redis.sentinel.master.connection.timeout` |The connection timeout in milliseconds configuration attribute for the master jedis client configuration created with this configuration instance.\n|`jnosql.redis.sentinel.slave.connection.timeout` |The connection timeout in milliseconds configuration attribute for the slave jedis client configuration created with this configuration instance.\n|`jnosql.redis.sentinel.master.socket.timeout` |The socket timeout in milliseconds configuration attribute for the master jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.slave.socket.timeout` |The socket timeout in milliseconds configuration attribute for the slave jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.user` |The user configuration attribute for the master jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.slave.user` |The user configuration attribute for the slave jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.password` |The password configuration attribute for the master jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.slave.password` |The password configuration attribute for the slave jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.ssl` |The ssl configuration attribute for the master jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.sentinel.slave.ssl` |The ssl configuration attribute for the slave jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.sentinel.master.protocol` |The protocol configuration attribute for the master jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.slave.protocol` |The protocol configuration attribute for the slave jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.master.clientset.info.config.disabled` |The clientset info disabled configuration attribute for the master jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.sentinel.slave.clientset.info.config.disabled` |The clientset info disabled configuration attribute for the slave jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.sentinel.master.clientset.info.config.libname.suffix` |The clientset info configuration libname suffix attribute for the master jedis client configuration with this configuration instance.\n|`jnosql.redis.sentinel.slave.clientset.info.config.libname.suffix` |The clientset info configuration libname suffix attribute for the slave jedis client configuration with this configuration instance.\n|===\n\n==== Redis Cluster Configuration\n\nThis API provides the `RedisClusterConfigurations` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"2,2\", options=\"header\"]\n|===\n|Configuration Property |Description\n\n|`jnosql.redis.cluster.hosts` |The value for the sentinel HOST:PORT (separated by comma) configuration attribute for the jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.client.name` |The cluster client's name. The default value is 0.\n|`jnosql.redis.cluster.timeout` |The cluster redis timeout, the default value is 2000 milliseconds\n|`jnosql.redis.cluster.connection.timeout` |The connection timeout in milliseconds configuration attribute for the cluster jedis client configuration created with this configuration instance.\n|`jnosql.redis.cluster.socket.timeout` |The socket timeout in milliseconds configuration attribute for the cluster jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.user` |The user configuration attribute for the cluster jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.password` |The password configuration attribute for the cluster jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.ssl` |The ssl configuration attribute for the cluster jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.cluster.protocol` |The protocol configuration attribute for the cluster jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.clientset.info.config.disabled` |The clientset info disabled configuration attribute for the cluster jedis client configuration with this configuration instance. The default value is false.\n|`jnosql.redis.cluster.clientset.info.config.libname.suffix` |The clientset info configuration libname suffix attribute for the cluster jedis client configuration with this configuration instance.\n|`jnosql.redis.cluster.max.attempts` |The value for the max attempts configuration attribute for the cluster jedis client configuration with this configuration instance. Default is 5.\n|`jnosql.redis.cluster.max.total.retries.duration` |The value for the max total retries configuration attribute for the cluster jedis client configuration with this configuration instance. Default is 10000 milliseconds.\n|===\n\n=== RedisBucketManagerFactory\n\nThe ```RedisBucketManagerFactory``` is a specialization of the ```BucketManagerFactory``` that enables ranking and counter feature.\n\n[source,java]\n----\n@Inject\nRedisBucketManagerFactory factory;\n...\nSortedSet game = factory.getSortedSet(\"game\");\ngame.add(\"Otavio\", 10);\ngame.add(\"Luiz\", 20);\ngame.add(\"Ada\", 30);\ngame.add(Ranking.of(\"Poliana\", 40));\n\nList\u003cRanking\u003e ranking = game.getRanking();\n\nCounter home = factory.getCounter(\"home\");\nCounter products = factory.getCounter(\"products\");\nhome.increment();\nproducts.increment();\nproducts.increment(3L);\n----\n\nUsing the same principle of the API you can inject using the `@KeyValueDatabase` qualifier.\n\n[source,java]\n----\n@Inject\n@KeyValueDatabase(\"counter\")\nCounter counter;\n\n@Inject\n@KeyValueDatabase(\"game\")\nSortedSet game;\n----\n== Riak\n\nimage::https://jnosql.github.io/img/logos/riak.png[Riak Project,align=\"center\" width=25%,height=25%]\n\nhttps://riak.com/[Riak] (pronounced \"ree-ack\") is a distributed NoSQL key-value data store that offers high availability, fault tolerance, operational simplicity, and scalability.\nIn addition to the open-source version, it comes in a supported enterprise version and a cloud storage version.\n\nThis driver provides support for the *Key-Value* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-redis\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```RiakConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Riak\"]\n|===\n|Configuration property |Description\n\n|`jnosql.riak.host`\n|The database host\n\n|===\n\nThis is an example using Riak's Key-Value API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.keyvalue.provider=org.eclipse.jnosql.databases.riak.communication.RiakKeyValueConfiguration\njnosql.keyvalue.database=heroes\n----\n\n== Solr\n\nimage::https://jnosql.github.io/img/logos/solr.svg[Apache Solr Project,align=\"center\" width=25%,height=25%\"]\n\nhttps://solr.apache.org/[Solr] is an open-source enterprise-search platform, written in Java, from the Apache Lucene project.\nIts major features include full-text search, hit highlighting, faceted search, real-time indexing, dynamic clustering, database integration, NoSQL features and rich document (e.g., Word, PDF) handling.\nProviding distributed search and index replication, Solr is designed for scalability and fault tolerance.\nSolr is widely used for enterprise search and analytics use cases and has an active development community and regular releases.\n\nThis driver provides support for the *Document* NoSQL API.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-solr\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the ```SolrDocumentConfigurations``` class to programmatically establish the credentials.\nPlease note that you can establish properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"Solr\"]\n|===\n|Configuration property |Description\n\n|`jnosql.solr.host`\n|Database's host. E.g.: jnosql.solr.host=http://localhost:8983/solr/\n\n|`jnosql.solr.user`\n|The user's userID.\n\n|`jnosql.solr.password`\n|The user's password\n\n|`jnosql.solr.automatic.commit`\n|Define if each operation Apache Solr will commit automatically, true by default.\n\n|===\n\nThis is an example using Solr's Document API with MicroProfile Config.\n\n[source,properties]\n----\njnosql.document.provider=org.eclipse.jnosql.databases.solr.communication.SolrDocumentConfiguration\njnosql.document.database=heroes\n----\n\n\nThe config settings are the default behavior; nevertheless, there is an option to do it programmatically. Create a class that implements the `Supplier\u003cSolrDocumentManager\u003e` and then defines it as an `@Alternative` and the `Priority`.\n\n[source,java]\n----\n@ApplicationScoped\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cSolrDocumentManager\u003e {\n\n    @Produces\n    public SolrDocumentManager get() {\n        Settings settings = Settings.builder().put(\"credential\", \"value\").build();\n        SolrDocumentConfiguration configuration = new SolrDocumentConfiguration();\n        SolrDocumentManagerFactory factory = configuration.apply(settings);\n        return factory.apply(\"database\");\n    }\n}\n----\n\n=== Repository\n\nThe ```SolrRepository``` interface is an extension of the ```Repository``` interface that allows using Solr query annotation that executes Solr query.\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends SolrRepository\u003cPerson, String\u003e {\n\n    @Solr(\"select * from Person\")\n    List\u003cPerson\u003e findAll();\n\n    @Solr(\"select * from Person where name = $name\")\n    List\u003cPerson\u003e findByName(@Param(\"name\") String name);\n}\n----\n\n=== Template\n\nThe ```SolrTemplate``` interface is a specialization of the ```DocumentTemplate``` that allows execution of a Solr query.\n\n[source,java]\n----\n@Inject\nSolrTemplate template;\n...\nList\u003cPerson\u003e people = template.solr(\"age:@age AND type:@type AND _entity:@entity\", params);\n----\n\n== Neo4J\n\nimage::https://jnosql.github.io/img/logos/neo4j.png[Neo4J Project,align=\"center\",width=25%,height=25%]\nhttps://neo4j.com/[Neo4J] is a highly scalable, native graph database designed to manage complex relationships in data. It enables developers to build applications that leverage the power of graph traversal, pattern matching, and high-performance querying using the **Cypher** query language.\n\nThis API provides support for **Graph** database operations, including entity persistence, query execution via Cypher, and relationship traversal.\n\n=== How To Install\n\nYou can use either the Maven or Gradle dependencies:\n\n[source,xml]\n----\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n  \u003cartifactId\u003ejnosql-neo4j\u003c/artifactId\u003e\n    \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n=== Configuration\n\nThis API provides the `Neo4JDatabaseConfigurations` class to programmatically establish the credentials. You can configure Neo4J properties using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification.\n\n[cols=\"2,4\"]\n|===\n| Configuration Property | Description\n\n| `jnosql.neo4j.uri` | The connection URI for the Neo4J database. Example: `bolt://localhost:7687`\n| `jnosql.neo4j.username` | The username for authentication.\n| `jnosql.neo4j.password` | The password for authentication.\n| `jnosql.neo4j.database` | The target database name.\n|===\n\n==== Example Using MicroProfile Config\n\n[source,properties]\n----\njnosql.neo4j.uri=bolt://localhost:7687\njnosql.neo4j.username=neo4j\njnosql.neo4j.password=yourpassword\njnosql.neo4j.database=neo4j\n----\n\n=== Template API\n\nThe `Neo4JTemplate` interface extends `GraphTemplate` and allows for dynamic Cypher execution.\n\n[source,java]\n----\n@Inject\nprivate Neo4JTemplate template;\n\nList\u003cPerson\u003e people = template.cypherQuery(\"MATCH (p:Person) WHERE p.name = $name RETURN p\", params);\nvar edge = template.edge(otavio, \"FRIENDS_WITH\", ada);\n----\n\n=== Repository Support\n\nThe `Neo4JRepository` interface extends the `NoSQLRepository` interface and enables query execution using the `@Cypher` annotation.\n\n[source,java]\n----\n@Repository\ninterface PersonRepository extends Neo4JRepository\u003cPerson, String\u003e {\n\n    @Cypher(\"MATCH (p:Person) RETURN p\")\n    List\u003cPerson\u003e findAll();\n\n    @Cypher(\"MATCH (p:Person) WHERE p.name = $name RETURN p\")\n    List\u003cPerson\u003e findByName(@Param(\"name\") String name);\n}\n----\n\n\n== Graph (Apache Tinkerpop)\n\nCurrently, the Jakarta NoSQL doesn't define an API for Graph database types but Eclipse JNoSQL provides a Graph template to explore the specific behavior of this NoSQL type.\n\nEclipse JNoSQL offers a mapping implementation for Graph NoSQL types:\n\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.eclipse.jnosql.databases\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-tinkerpop\u003c/artifactId\u003e\n      \u003cversion\u003e1.1.12\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\nDespite the other three NoSQL types, Eclipse JNoSQL API does not offer a communication layer for Graph NoSQL types. Instead, it integrates with https://tinkerpop.apache.org/[Apache Tinkerpop 3.x].\n\n[source,java]\n----\n@Inject\nTinkerpopTemplate template;\n...\n\nCategory java = Category.of(\"Java\");\nBook effectiveJava = Book.of(\"Effective Java\");\n\ntemplate.insert(java);\ntemplate.insert(effectiveJava);\nEdgeEntity edge = template.edge(java, \"is\", software);\n\nStream\u003cBook\u003e books = template.getTraversalVertex()\n        .hasLabel(\"Category\")\n        .has(\"name\", \"Java\")\n        .in(\"is\")\n        .hasLabel(\"Book\")\n        .getResult();\n----\n\nApache TinkerPop is database agnostic. Thus, you can change the database in your application with no or minimal impact on source code.\n\nYou can define the database settings using the https://microprofile.io/microprofile-config/[MicroProfile Config] specification, so you can add properties and overwrite it in the environment following the https://12factor.net/config[Twelve-Factor App].\n\n[source,properties]\n----\njnosql.graph.tinkerpop.provider=\u003cCLASS-DRIVER\u003e\njnosql.provider.host=\u003cHOST\u003e\njnosql.provider.user=\u003cUSER\u003e\njnosql.provider.password=\u003cPASSWORD\u003e\n----\n\nTIP: The ```jnosql.graph.provider``` property is necessary when you have more than one driver in the classpath. Otherwise, it will take the first one.\n\nThese configuration settings are the default behavior. Nevertheless, there is an option to programmatically configure these settings. Create a class that implements the ```Supplier\u003cGraph\u003e```, then define it using the ```@Alternative``` and ```@Priority``` annotations.\n\n[source,java]\n----\n@Alternative\n@Priority(Interceptor.Priority.APPLICATION)\npublic class ManagerSupplier implements Supplier\u003cGraph\u003e {\n\n    @Produces\n    public Graph get() {\n        Graph graph = ...; // from a provider\n        return graph;\n    }\n}\n----\n\nYou can work with several document database instances through CDI qualifier. To identify each database instance, make a `Graph` visible for CDI by putting the ```@Produces``` and the ```@Database``` annotations in the method.\n\n[source,java]\n----\n@Inject\n@Database(value = DatabaseType.GRAPH, provider = \"databaseA\")\nprivate GraphTemplate templateA;\n\n@Inject\n@Database(value = DatabaseType.GRAPH, provider = \"databaseB\")\nprivate GraphTemplate templateB;\n\n// producers methods\n@Produces\n@Database(value = DatabaseType.GRAPH, provider = \"databaseA\")\npublic Graph getManagerA() {\n    return manager;\n}\n\n@Produces\n@Database(value = DatabaseType.GRAPH, provider = \"databaseB\")\npublic Graph getManagerB() {\n    return manager;\n}\n----\n\n\nEclipse JNoSQL does not provide https://mvnrepository.com/artifact/org.apache.tinkerpop/gremlin-core[Apache Tinkerpop 3 dependency]; check if the provider does. Otherwise, do it manually.\n\n[source,xml]\n----\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.apache.tinkerpop\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-gremlin-core\u003c/artifactId\u003e\n    \u003cversion\u003e${tinkerpop.version}\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.apache.tinkerpop\u003c/groupId\u003e\n    \u003cartifactId\u003ejnosql-gremlin-groovy\u003c/artifactId\u003e\n    \u003cversion\u003e${tinkerpop.version}\u003c/version\u003e\n\u003c/dependency\u003e\n----\n\n== Getting Help\n\nHaving trouble with Eclipse JNoSQL databases? We’d love to help!\n\nPlease report any bugs, concerns or questions with Eclipse JNoSQL databases to https://github.com/eclipse/jnosql[https://github.com/eclipse/jnosql].\nFollow the instructions in the templates and remember to mention that the issue refers to JNoSQL databases.\n\n== Contributing\n\nWe are very happy you are interested in helping us and there are plenty ways you can do so.\n\n- https://github.com/eclipse/jnosql/issues[**Open an Issue:**]  Recommend improvements, changes and report bugs. Please, mention that the issue refers to the JNoSQL databases project.\n\n- **Open a Pull Request:** If you feel like you can even make changes to our source code and suggest them, just check out our link:CONTRIBUTING.adoc[contributing guide] to learn about the development process, how to suggest bugfixes and improvements.\n\n== Integration tests\n\nThe integration tests on databases primarily integrate with the https://www.testcontainers.org/[Testcontainers], requiring a more powerful computer.\n\nThose tests are disabled by default; thus, if you want to run only the integration tests:\n\n[source,bash]\n----\nmvn test -Djnosql.test.integration=true\n----\n\nTo create integration tests on this project, we're using EnabledIfSystemProperty from JUnit Jupiter, where the system property is: `jnosql.test.integration`, and we expected `true` to execute.\n\nWe, the `IntegrationTest` structure class, hold this content, considering using it on the new integration tests.\n\n[source,java]\n----\nimport static org.eclipse.jnosql.communication.driver.IntegrationTest.NAMED;\nimport static org.eclipse.jnosql.communication.driver.IntegrationTest.MATCHES;\n\n@EnabledIfSystemProperty(named = NAMED, matches = MATCHES)\nclass IntegrationSampleTest {\n\n}\n----\n\n== Performing the Jakarta NoSQL TCK\n\nTo perform the Jakarta NoSQL TCK you should activate the `tck` profile. This profile will download the TCK and run it.\n\n\n[source,bash]\n----\nmvn test -Ptck\n----\n\nTo run the Jakarta NoSQL TCK only in a specific module, you can use the `-pl` option, for example:\n\n[source,bash]\n----\nmvn test -Ptck -pl jnosql-mongodb\n----\n\n\n[IMPORTANT]\n====\nBy default, activating the `tck` profile does not disable the execution of the default tests. To skip the default tests you can use `-DskipTests`. It will skip the unit tests and run only the TCK tests.\n[source,bash]\n----\nmvn test -Ptck -DskipTests\n----\n====\n\nThe JNoSQL Database API implementations that support Jakarta NoSQL TCK execution already:\n\n- link:#_mongodb[MongoDB]\n\n\n== Want to Contribute a New Driver?\n\nAs an open-source project, you're free to create any driver, and you're welcome to join and participate in the process.\nTo add a new driver, we have a few requirements:\n\n* Run Java 17\n* Include the documentation driver in the README file.\n* Cover the driver with tests and preferences with TestContainer.\n* Please pay attention to the documentation. This includes JavaDoc\n* Include a class to represent and contain the properties. In general, those are `enum`\n** A nomenclature is the \u003cDATABASE\u003eConfigurations, e.g., CassandraConfigurations, MongoDBConfigurations.\n** The package name will follow the terminology: `org.jnosql.databases.[DATABASE].[LAYER]`\n*** E.g., Give a database called \"Ada\" that is a column type, the package name will be: `org.eclipse.jnosql.databases.ada.communication` for the driver layer and `org.eclipse.jnosql.databases.ada.mapping` for the mapping.\n*** You can include the database in a single project if a NoSQL supports multiple database types.\n* It is crucial to have an integration test with the database; please annotate those `EnabledIfSystemProperty` and check the integration session to know more.\n* Create a `Supplier` class on the mapping layer that will produce a specific Manager instance using Microprofile. Check: `ColumnManagerSupplier`, `DocumentManagerSupplier` classes to get more information.\n\n\n\n== Graph Drivers\n\nEclipse JNoSQL uses https://tinkerpop.apache.org/[Apache Tinkerpop] for Graph API.\nUsing this API gives support to https://tinkerpop.apache.org/providers.html[over twenty fives databases].\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-jnosql%2Fjnosql-databases","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feclipse-jnosql%2Fjnosql-databases","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feclipse-jnosql%2Fjnosql-databases/lists"}