Corda-将字符串数据存储在Corda库中是否有任何约束?

问题描述 投票:0回答:1

我想存储大小为194个字符及以上的字符串数据。当我尝试存储这样的字符串时,它正在执行流程,并且正在创建状态对象,但是在服务器端,它会引发如下异常:

 Caused by: net.corda.core.CordaRuntimeException:
 com.esotericsoftware.kryo.KryoException:
 java.lang.UnsupportedOperationException:
 net.corda.nodeapi.internal.persistence.CordaPersistence, which is a
 closeable resource, has been detected during flow checkpointing.
 Restoring such resources across node restarts is not supported. Make
 sure code accessing it is confined to a private method or the
 reference is nulled out.

我能够毫无例外地存储194个字符的字符串。但是,如果它超过200个字符,则会发生异常。

我使用的是Cords 4.3版本和默认的H2 DB。我要存储的字符串是:

“3C03582C57E94C493CEE2B3FFCBAB9757F265DB03EDFB418739D77ECE1C5B66A,EE5B0454A8993279AB1D409872D5B364CD38FCB8C3B6740FB4DEF3B5E55AFEF7,CC96E3E8348ADAC42FFBEA3C7C1A88EDFC7A391421DB6F97FB80C53F52E11F41,69D77466FEACE0F702CBF2244F2A55526DFBC5F1180AB69EA561E15542155AB1”

java h2 corda
1个回答
0
投票
  • 错误与字符串大小无关。在流内部,您使用的是Corda在流检查点/恢复期间无法序列化/反序列化的某些对象。您是否有任何对象,例如HTTP客户端或数据库连接/结果集?如果您这样做,则根据错误消息;使用完后,必须将该对象引用设置为null
  • 要回答有关字符串大小的问题,事务将作为Blob数据存储在NODE_TRANSACTIONS列中的TRANSACTION_VALUE表中(请参阅here);而且我很确定Blob列的大小确实很大(您可以使用自己喜欢的SQL编辑器检查其大小);但是请记住,控制大小限制的实际上是maxTransactionSize,它是在网络级别上设置的网络参数之一(即,属于该网络的所有节点都必须遵守这些参数);因此,如果maxTransactionSize设置为500 MB,那么即使NODE_TRANSACTIONS表可以处理该事务,也无法发送大于500 MB的事务(请参阅here)。网络参数缓存在节点目录的network-parameters文件中。您也可以使用node explorer查看该文件的值。
© www.soinside.com 2019 - 2024. All rights reserved.