首页 > 解决方案 > Corda Enterprise 上的 Yo CorDapp 给出 MissingMigrationException

问题描述

我正在使用 Corda Enterprise 3.1 并尝试使用提供的数据库迁移工具将保管库从 H2 移动到 Oracle 12c。我已经node.conf使用我知道可以从 IntelliJ 连接的值对配置进行了更改。驱动程序是ojdbc8.jarOracle SQL Developer 附带的驱动程序。我有哟!CorDapp安装在节点上。

但是,当我尝试启动节点时出现以下错误:

[错误] 2018-08-07T22:43:32,666Z [main] errors.errorAndExit - 无法创建数据源。请检查以下文件夹之一中是否安装了正确的 JDBC 驱动程序: - /apps/team/drivers/jdbc

由 net.corda.nodeapi.internal.persistence.MissingMigrationException 引起:没有为架构定义迁移:net.corda.yo.YoState$YoSchema v1

net.corda.nodeapi.internal.persistence.MissingMigrationException:没有为架构定义迁移:net.corda.yo.YoState$YoSchema v1 at

net.corda.nodeapi.internal.persistence.SchemaMigration.doRunMigration(SchemaMigration.kt:90) ...

标签: corda

解决方案


在 Corda Enterprise 节点上安装针对 Corda 开源开发的 CorDapp 时,您需要为每个 CorDapp 的MappedSchemas 提供 Liquibase 迁移脚本。

步骤如下:

  1. 在您的节点上部署 CorDapp(通过将 JAR 复制到cordapps文件夹中)
  2. 找出包含新合同状态实体的 MappedSchema 的名称
  3. 调用数据库管理工具:java -jar corda-tools-database-manager-3.1.jar --base-directory /path/to/node --create-migration-sql-for-cordapp com.example.MyMappedSchema
    • 这将生成一个文件,该文件在节点的基本目录中调用my-mapped-schema.changelog-master.sql的文件夹中调用migration
    • 如果您没有指定实际的 MappedSchema 名称,该工具将为MappedSchemaCorDapp 中定义的每个生成一个 SQL 文件
  4. 检查在migration根目录的文件夹中创建的文件以确保它是正确的
    • 这是一个标准 SQL 文件,其中包含一些 Liquibase 元数据作为注释
  5. 创建一个包含该migration文件夹的 JAR(通常将其命名为originalCorDappName-migration.jar),并将此 JAR 与 CorDapp 一起部署(例如,在节点基目录中运行以下命令:)jar cvf /path/to/node/cordapps/MyCordapp-migration.jar migration

您可以在此处阅读有关此过程的更多信息:http: //docs.corda.r3.com/database-management.html#node-administrator-installing-a-cordapp-targeted-at-the-open-source-node


推荐阅读