Skip to Content
How-To GuidesScalaUsing Apache Ignite from a Scala Agent

Using Apache Ignite from a Scala Agent

The Scala SDK already wraps golem:rdbms/ignite2@1.5.0 in golem.host.Rdbms.

Imports

import golem.host.Rdbms import golem.host.Rdbms._

Open a Connection

Ignite uses thin-client URLs like ignite://host:10800.

Rdbms.Ignite.open("ignite://127.0.0.1:10800")

open, query, execute, commit, and rollback all return Either[DbError, T] instead of throwing.

If the user asks for a method that returns a plain String, keep the public method signature as String and handle host errors inside the method (e.g. with .fold(e => throw new RuntimeException(e.toString), identity)) rather than changing the signature to Either[DbError, _].

Query Data

Ignite placeholders use ?.

val message = for { conn <- Rdbms.Ignite.open("ignite://127.0.0.1:10800") result <- conn.query("SELECT ?", List(IgniteDbValue.DbString("hello"))) row <- result.rows.headOption.toRight(DbError.Other("query returned no rows")) value <- row.values.headOption.toRight(DbError.Other("query returned no columns")) text <- value match { case IgniteDbValue.DbString(value) => Right(value) case other => Left(DbError.Other(s"Unexpected Ignite value: $other")) } } yield text

Execute Statements

conn.execute( """CREATE TABLE IF NOT EXISTS notes ( | id INT PRIMARY KEY, | body VARCHAR |) WITH "CACHE_NAME=notes"""".stripMargin, List.empty, )

When creating Ignite tables through SQL, include WITH "CACHE_NAME=...".

Transactions

for { conn <- Rdbms.Ignite.open(url) tx <- conn.beginTransaction() _ <- tx.execute( "INSERT INTO notes (id, body) VALUES (?, ?)", List(IgniteDbValue.DbInt(1), IgniteDbValue.DbString("hello")), ) _ <- tx.commit() } yield ()

If you need transactional tables, create them with ATOMICITY=TRANSACTIONAL in the table options.

Last updated on