Как настроить H2 для Corda - PullRequest
       4

Как настроить H2 для Corda

0 голосов
/ 02 марта 2020

Я переписываю и запускаю IssueFlow для примера cordapp здесь . Я вижу, что поток прошел успешно, и могу найти несколько UTXO в запросе хранилища для узла.

run vaultQuery contractStateType: com.example.state.IOUStat

Я хотел бы просмотреть данные в постоянном хранилище (H2).

Я добавил следующее в конфигурацию моего узла (аналогично для узла партии А с другим портом).

devMode=true
myLegalName="O=PartyB,L=New York,C=US"
p2pAddress="localhost:10008"
rpcSettings {
    address="localhost:10009"
    adminAddress="localhost:10049"
}
security {
    authService {
        dataSource {
            type=INMEMORY
            users=[
                {
                    password=test
                    permissions=[
                        ALL
                    ]
                    user=user1
                }
            ]
        }
    }   
}

h2Settings {
    address: "localhost:12344"
}

Я вижу URL БД на узлах выполнения

jdbc:h2:tcp://localhost:12344/node

Я могу успешно подключиться к этому URL базы данных. Однако я не вижу таблиц для моего постоянного состояния

Запрос к БД

object IOUSchema

object IOUSchemaV1 : MappedSchema(
        schemaFamily = IOUSchema.javaClass,
        version = 1,
        mappedTypes =  listOf(PersistentIOU::class.java)){

    @Entity
    @Table(name = "iou_states")
    class PersistentIOU(
            @Column(name = "lender")
            var lenderName : String,

            @Column (name = "borrower")
            var borrowerName : String,

            @Column(name = "value")
            var value : Int,

            @Column(name = "linear_id")
            var linearId : UUID

    ) : PersistentState(){
        constructor() : this("","",0, UUID.randomUUID())
    }
}



@BelongsToContract(IOUContract::class)
data class IOUState (val value : Int,
                     val lender: Party,
                     val borrower : Party,
                     override val linearId: UniqueIdentifier = UniqueIdentifier()): LinearState, QueryableState {

    override val participants : List<AbstractParty> get() = listOf(lender,borrower)

    override fun generateMappedObject(schema: MappedSchema): PersistentState {
        return when (schema){
            is IOUSchemaV1 -> IOUSchemaV1.PersistentIOU(
                    this.lender.name.toString(),
                    this.borrower.name.toString(),
                    this.value,
                    this.linearId.id
            )
            else -> throw IllegalArgumentException("Unrecognised schema $schema")
        }
    }

    override fun supportedSchemas(): Iterable<MappedSchema> = listOf(IOUSchemaV1)

}

РЕДАКТИРОВАТЬ: Это, безусловно, работает путем подключения непосредственно к файлу. См. здесь , однако похоже, что он подключается к другой базе данных при использовании внешнего клиента (dbeaver) для подключения к URL JDB C, полученному при запуске узла.

1 Ответ

0 голосов
/ 02 марта 2020

Мне не удалось найти таблицы в экземпляре H2, так как строка подключения была неправильной, и H2, похоже, создает пустую базу данных при попытке подключения к несуществующей БД.

В DBeaver вы можете добавить JDB C url, но он автоматически предварительно исправляет 'jdb c: h2:'

Сведения о соединении

...