首页 > 解决方案 > 启动corda jar时出现问题:newAtomicIntegerFieldUpdater

问题描述

我尝试启动(就像在这个问题中一样)corda 独立 jar 并遇到了一个问题:

    internal.DriverDSLImpl.genericDriver - 驱动程序因异常而关闭
    java.lang.NoSuchMethodError: io.netty.util.internal.PlatformDependent.newAtomicIntegerFieldUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
    在 io.netty.buffer.AbstractReferenceCountedByteBuf.(AbstractReferenceCountedByteBuf.java:32) ~[corda/:?]
    在 io.netty.buffer.Unpooled.wrappedBuffer(Unpooled.java:199) ~[corda/:?]
    在 org.apache.activemq.artemis.core.io.buffer.TimedBuffer.(TimedBuffer.java:111) ~[corda/:?]
    在 org.apache.activemq.artemis.core.io.AbstractSequentialFileFactory.(AbstractSequentialFileFactory.java:78) ~[corda/:?]
    在 org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory.(NIOSequentialFileFactory.java:75) ~[corda/:?]
    在 org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.init(JournalStorageManager.java:132) ~[corda/:?]
    在 org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.(AbstractJournalStorageManager.java:217) ~[corda/:?]
    在 org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.(JournalStorageManager.java:103) ~[corda/:?]
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createStorageManager(ActiveMQServerImpl.java:2008) ~[corda/:?]
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart1(ActiveMQServerImpl.java:2145) ~[corda/:?]
    在 org.apache.activemq.artemis.core.server.impl.LiveOnlyActivation.run(LiveOnlyActivation.java:63) ~[corda/:?]
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:516) ~[corda/:?]
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:464) ~[corda/:?]
    在 net.corda.node.services.messaging.ArtemisMessagingServer.configureAndStartServer(ArtemisMessagingServer.kt:122) ~[corda/:?]
    在 net.corda.node.services.messaging.ArtemisMessagingServer.start(ArtemisMessagingServer.kt:92) ~[corda/:?]
    在 net.corda.node.internal.Node.startMessagingService(Node.kt:294) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:256) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:105) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:700) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:105) ~[corda/:?]
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:152) ~[corda/:?]
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:138) ~[corda/:?]
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:124) ~[corda/:?]
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:131) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode.initialiseDatabasePersistence(AbstractNode.kt:699) ~[corda/:?]
    在 net.corda.node.internal.Node.initialiseDatabasePersistence(Node.kt:347) ~[corda/:?]
    在 net.corda.node.internal.AbstractNode.start(AbstractNode.kt:207) ~[corda/:?]
    在 net.corda.node.internal.Node.start(Node.kt:361) ~[corda/:?]
    在 net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:805) ~[corda/:?]
    在 net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:767) ~[corda/:?]
    在 net.corda.core.internal.concurrent.ValueOrException$DefaultImpls.capture(CordaFutureImpl.kt:107) ~[corda/:?]
    在 net.corda.core.internal.concurrent.OpenFuture$DefaultImpls.capture(CordaFutureImpl.kt) ~[corda/:?]
    在 net.corda.core.internal.concurrent.CordaFutureImpl.capture(CordaFutureImpl.kt:119) ~[corda/:?]
    在 net.corda.core.internal.concurrent.CordaFutureImplKt$fork$$inlined$also$lambda$1.run(CordaFutureImpl.kt:22) ~[corda/:?]
    在

    java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_202]
    在 java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_202]
    在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) ~[?:1.8.0_202]
    在 java.util.concurrent.ScheduledThreadPoolExecutor$Sche..(Unknown Source) ~[?:1.8.0_202]
    在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:1.8.0_202]
    在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_202]
    在 java.lang.Thread.run(Unknown Source) ~[?:1.8.0_202]
    线程“主”java.lang.NoClassDefFoundError 中的异常:无法初始化类 io.netty.buffer.UnpooledUnsafeDirectByteBuf
    在 io.netty.buffer.Unpooled.wrappedBuffer(Unpooled.java:199)
    在 org.apache.activemq.artemis.core.io.buffer.TimedBuffer.(TimedBuffer.java:111)
    在 org.apache.activemq.artemis.core.io.AbstractSequentialFileFactory.(AbstractSequentialFileFactory.java:78)
    在 org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory.(NIOSequentialFileFactory.java:75)
    在 org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.init(JournalStorageManager.java:132)
    在 org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.(AbstractJournalStorageManager.java:217)
    在 org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.(JournalStorageManager.java:103)
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.createStorageManager(ActiveMQServerImpl.java:2008)
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart1(ActiveMQServerImpl.java:2145)
    在 org.apache.activemq.artemis.core.server.impl.LiveOnlyActivation.run(LiveOnlyActivation.java:63)
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:516)
    在 org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:464)
    在 net.corda.node.services.messaging.ArtemisMessagingServer.configureAndStartServer(ArtemisMessagingServer.kt:122)
    在 net.corda.node.services.messaging.ArtemisMessagingServer.start(ArtemisMessagingServer.kt:92)
    在 net.corda.node.internal.Node.startMessagingService(Node.kt:294)
    在 net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:256)
    在 net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:105)
    在 net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:700)
    在 net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:105)
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:152)
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:138)
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:124)
    在 net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:131)
    在 net.corda.node.internal.AbstractNode.initialiseDatabasePersistence (AbstractNode.kt:699)
    在 net.corda.node.internal.Node.initialiseDatabasePersistence(Node.kt:347)
    在 net.corda.node.internal.AbstractNode.start(AbstractNode.kt:207)
    在 net.corda.node.internal.Node.start(Node.kt:361)
    在 net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:805)
    在 net.corda.testing.node.internal.DriverDSLImpl$Companion$startInProcessNode$1.invoke(DriverDSLImpl.kt:767)
    在 net.corda.core.internal.concurrent.ValueOrException$DefaultImpls.capture(CordaFutureImpl.kt:107)
    在 net.corda.core.internal.concurrent.OpenFuture$DefaultImpls.capture(CordaFutureImpl.kt)
    在 net.corda.core.internal.concurrent.CordaFutureImpl.capture(CordaFutureImpl.kt:119)
    在 net.corda.core.internal.concurrent.CordaFutureImplKt$fork$$inlined$also$lambda$1.run(CordaFutureImpl.kt:22)
    在 java.util.concurrent.Executors$RunnableAdapter.call(未知来源)
    在

    java.util.concurrent.FutureTask.run(未知来源)
    在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(未知来源)
    在 java.util.concurrent.ScheduledThreadPoolExecutor$Sche..(未知来源)
    在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)
    在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源)
    在 java.lang.Thread.run(未知来源)

标签: kotlinjarcorda

解决方案


使用最新版本的 Corda (4.0+),您不再需要将驱动程序作为 args。您可以简单地通过以下方式启动节点:

java -jar corda.jar

您甚至可以在 build.gradle 文件中为整个 JVM 分配更多 RAM,这样您的节点启动可能会更快:

extraConfig = ['jvmArgs' : [ "-Xmx2048m", "-Xms512m", "-XX:+UseG1GC" ] ]

推荐阅读