cordapp构建失败并出现休眠错误

时间:2018-12-28 04:03:03

标签: corda

我正在尝试构建一个新的cordapp。并且构建因我的一个节点创建而失败,下面是节点相应日志中的堆栈跟踪

[1;31m[ERROR] 09:25:18+0530 [main] spi.SqlExceptionHelper.logExceptions - ERROR: relation "hibernate_sequence" does not exist
  Position: 17
[m[1;31m[ERROR] 09:25:19+0530 [main] internal.Node.run - Exception during node startup
[m javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:886) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:860) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
    at net.corda.node.services.network.PersistentNetworkMapCache.updateInfoDB(PersistentNetworkMapCache.ktI247) ~[corda-node-3.3-corda.jar:?]

如果我直接在数据库中创建hibernate_sequence,则看不到此错误。 Postgres DB会发生此错误。

postgres驱动程序被添加到build.gradle中,

  

实现(“ org.postgresql:postgresql:42.1.4”)

通过为相应节点更新build.gradle中的任务deployNodes(),将节点配置为使用postgres,例如

node {
        name "O=LedgerApp,L=London,C=GB"
        ......
        extraConfig = [
                'dataSourceProperties': [
                        'dataSourceClassName': 'org.postgresql.ds.PGSimpleDataSource',
                        '"dataSource.url"'     : 'jdbc:postgresql://localhost:5432/postgres?currentSchema=appschema',
                        '"dataSource.user"'    : 'corda',
                        '"dataSource.password"': 'corda'
                ],
                'database'            : [
                        'transactionIsolationLevel': 'READ_COMMITTED'
                ]
        ]
    }

使用的Corda版本是3.3-corda。

2 个答案:

答案 0 :(得分:0)

这似乎是一个错误。 hibernate_sequence是Hibernate在启动时创建的第一件事,如果它在数据库中尚不存在。

我在这里提出了一个问题:https://r3-cev.atlassian.net/browse/CORDA-2393

答案 1 :(得分:0)

如果您的PostgresSQL数据库为不同的Corda开源节点托管多个架构实例,则需要为在第一个实例之后添加的每个后续架构手动创建 hibernate_sequence 序列对象。 Corda OS不会为Hibernate提供架构名称空间设置,并且可能不会创建序列对象。

运行DDL语句,并将 my_schema 替换为您的架构名称空间:

CREATE SEQUENCE my_schema.hibernate_sequence INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 8 CACHE 1 NO CYCLE;