Как расширить узел Corda для работы с базами данных, отличными от H2? - PullRequest
0 голосов
/ 08 мая 2018

Я запускал Corda с PostgreSQL. Как расширить Corda для работы с другими базами данных? Достаточно ли добавить драйвер базы данных в качестве зависимости Gradle и попытаться подключиться к другим базам данных?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Просто чтобы добавить к ответу Джоэла: опция schema = [SCHEMA] недоступна в Corda Open Source, некоторые драйверы позволяют настроить текущую схему в строке URL JDBC. Для Corda 3.X dataSourceProperties ключи, содержащие ., должны быть заключены в двойные кавычки для правильного переопределения настроек по умолчанию (описано в https://github.com/corda/corda/issues/4037), например,

dataSourceProperties = {
    "dataSource.url" = "jdbc:postgresql://[HOST]:[PORT]/postgres"
    ...

или в узлах deploy:

extraConfig = [
               'dataSourceProperties': [
                          '"dataSource.url"': 'jdbc:postgresql://localhost:5432/postgres',
                          ...  
0 голосов
/ 08 мая 2018

Corda использует Hibernate 5.x с пулом соединений HikariCP JDBC.

Все запросы генерируются Hibernate, ожидайте один запрос от модуля finance (CashSelection использует JDBC PreparedStatement с конструкциями SQL, специфичными для каждого поставщика базы данных).

Настройка базы данных

Во время выполнения узел ищет настройки JDBC в своем файле node.conf. По умолчанию он подключается к встроенному серверу H2 (см. Файл /node/src/main/resources/reference.conf в исходном коде Corda).

Чтобы использовать Corda с другими базами данных (*) или подключиться с параметрами, отличными от настроек по умолчанию, в файле node.conf должны быть установлены свойства источника данных узла:

dataSourceProperties = {
    dataSourceClassName = "org.postgresql.ds.PGSimpleDataSource"
    dataSource.url = "jdbc:postgresql://[HOST]:[PORT]/postgres"
    dataSource.user = [USER]
    dataSource.password = [PASSWORD]
}
database = {
    transactionIsolationLevel = READ_COMMITTED
}
jarDirs = [PATH_TO_JDBC_DRIVER_DIR]

, где dataSourceProperties - типичные настройки JDBC, запись database содержит специфические настройки Hibernate, а jarDirs - список путей к каталогам, содержащим драйвер (например, jarDirs = ['/Library/postgres-lib']).

Настройка базы данных в узлах deployNodes

Вы можете избежать настройки параметров базы данных вручную, передав параметры в deployNodes. Например:

node {
    name "O=Bank C,L=Tokyo,C=JP"
    p2pPort 10010
    webPort 10011
    rpcSettings {
        address("localhost:10036")
        adminAddress("localhost:10037")
    }
    cordapps = ["$project.group:finance:$corda_release_version"]
    rpcUsers = ext.rpcUsers
    extraConfig = [
        ‘dataSourceProperties.dataSource.url’ : ‘jdbc:postgresql://localhost:32774/postgres’,
        ‘dataSourceProperties.dataSourceClassName’ : ‘org.postgresql.ds.PGSimpleDataSource’,
        ‘dataSourceProperties.dataSource.user’ : ‘postgres’,
        ‘dataSourceProperties.dataSource.password’ : ‘postgres’,
        ‘jarDirs’ : [ ‘/Library/Java/postgres’ ]
    ]
}

Добавление драйвера

После добавления этих параметров драйвер JDBC необходимо добавить в расположение, указанное в extraConfig.jarDirs после развертывания узла.

Альтернативой является добавление зависимости драйвера JDBC в node/build.gradle (как это сделано для PostgreSQL). Всякий раз, когда узел компилируется / собирается, он будет содержать готовый драйвер.

(*) Corda Open Source поставляется с файловой базой данных H2 и имеет экспериментальную поддержку Postgres и Sql Server. Corda Enterprise имеет более широкую протестированную поддержку для других баз данных, включая базы данных Sql Server, AzureSQL, Postgres и Oracle. Несмотря на использование Hibernate / JDBC, некоторые запросы могут потребовать модификации, чтобы быть совместимыми со всеми поддерживаемыми базами данных. Эта совместимость поддерживается Corda Enterprise.

...