如何解决连接到已还原的数据库时,Datomic抛出ActiveMQInternalErrorException
我从:dev存储备份了Datomic v0.9.5786数据库:
~/datomic/datomic-pro-0.9.5786/bin/datomic -Xmx4g -xms4g backup-db datomic:dev://localhost:4334/acct file:/Users/petrus/acct.datomic
copied 0 segments,skipped 0 segments.
copied 414 segments,skipped 0 segments.
:succeeded
在我的其他笔记本电脑上将备份还原到Datomic Pro v1.0.6202的较新版本显然可以成功:
➜ datomic-pro-1.0.6202 bin/datomic -Xmx4g -xms4g restore-db file:/Users/petrus/Projects/acct/resources/data/acct.datomic datomic:dev://localhost:4334/acct
copied 0 segments,skipped 0 segments.
:succeeded
{:event :restore,:db acct,:basis-t 38265,:inst #inst "2020-10-22T10:03:31.186-00:00"}
我按照in the docs中所述重新启动了Dev事务处理程序,但是当我尝试从REPL连接时,Datomic抛出:
(d/connect "datomic:dev://localhost:4334/acct")
=> Execution error (ActiveMQInternalErrorException) at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl/sendBlocking (ChannelImpl.java:404).
null
尝试(d/delete-database "datomic:dev://localhost:4334/acct")
失败并显示相同的错误,但是尝试连接到不存在的DB会抛出“目录不存在”的错误提示。
在源计算机上安装Datomic Pro v1.0.6202之后,我重复了备份/还原过程,以使源版本和目标版本匹配,但是在连接到已还原的数据库时会出现相同的症状。
(d/connect "datomic:dev://localhost:4334/newdb")
=> Execution error at datomic.peer/get-connection$fn (peer.clj:661).
Could not find newdb in catalog
(d/create-database "datomic:dev://localhost:4334/newdb")
=> Execution error (ActiveMQInternalErrorException) at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl/sendBlocking (ChannelImpl.java:404).
null
嗯,我开始认为我在Datomic中发现了一个错误,或者我的本地JDK(OpenJDK 15)有问题。
所以我用deps.edn中的1.10.1和Datomic Pro v1.0.6202创建了一个新的Clojure项目:
{:mvn/repos {"my.datomic.com" {:url "https://my.datomic.com/repo"}}
:deps {org.clojure/clojure {:mvn/version "1.10.1"}
com.datomic/datomic-pro {:mvn/version "1.0.6202"}}}
➜ clj
Clojure 1.10.1
user=> (require '[datomic.api :as d])
nil
user=> (d/connect "datomic:dev://localhost:4334/newdb")
Execution error at datomic.peer/get-connection$fn (peer.clj:661).
Could not find newdb in catalog
user=> (d/create-database "datomic:dev://localhost:4334/newdb")
Execution error (ActiveMQInternalErrorException) at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl/sendBlocking (ChannelImpl.java:404).
在某处会发生奇怪的冲突吗?让我们看看Maven对依赖树的看法:
➜ datomic-debug clj -Spom
➜ datomic-debug mvn dependency:tree -Dverbose=true
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< datomic-debug:datomic-debug >---------------------
[INFO] Building datomic-debug 0.1.0
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from clojars: https://repo.clojars.org/com/google/guava/guava/18.0/guava-18.0.jar
Downloading from my.datomic.com: https://my.datomic.com/repo/com/google/guava/guava/18.0/guava-18.0.jar
Downloading from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/18.0/guava-18.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/18.0/guava-18.0.jar (2.3 MB at 2.9 MB/s)
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ datomic-debug ---
[INFO] datomic-debug:datomic-debug:jar:0.1.0
[INFO] +- org.clojure:clojure:jar:1.10.1:compile
[INFO] | +- org.clojure:spec.alpha:jar:0.2.176:compile
[INFO] | \- org.clojure:core.specs.alpha:jar:0.2.44:compile
[INFO] \- com.datomic:datomic-pro:jar:1.0.6202:compile
[INFO] +- (org.clojure:clojure:jar:1.8.0:compile - omitted for conflict with 1.10.1)
[INFO] +- org.clojure:tools.cli:jar:0.3.5:compile
[INFO] +- org.fressian:fressian:jar:0.6.5:compile
[INFO] +- commons-codec:commons-codec:jar:1.10:compile
[INFO] +- org.slf4j:jul-to-slf4j:jar:1.7.22:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.22:compile
[INFO] +- org.slf4j:slf4j-nop:jar:1.7.22:compile
[INFO] | \- (org.slf4j:slf4j-api:jar:1.7.22:compile - omitted for duplicate)
[INFO] +- org.slf4j:log4j-over-slf4j:jar:1.7.22:runtime
[INFO] | \- (org.slf4j:slf4j-api:jar:1.7.22:runtime - omitted for duplicate)
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.22:compile
[INFO] | \- (org.slf4j:slf4j-api:jar:1.7.22:compile - omitted for duplicate)
[INFO] +- org.apache.activemq:artemis-core-client:jar:1.5.6:compile
[INFO] | +- org.apache.activemq:artemis-commons:jar:1.5.6:compile
[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] | | +- (io.netty:netty-all:jar:4.1.5.Final:compile - omitted for duplicate)
[INFO] | | +- commons-beanutils:commons-beanutils:jar:1.9.2:compile
[INFO] | | | \- (commons-collections:commons-collections:jar:3.2.1:compile - omitted for conflict with 3.2.2)
[INFO] | | \- (com.google.guava:guava:jar:19.0:compile - omitted for conflict with 18.0)
[INFO] | +- (io.netty:netty-all:jar:4.1.5.Final:compile - omitted for conflict with 4.1.32.Final)
[INFO] | +- org.apache.geronimo.specs:geronimo-json_1.0_spec:jar:1.0-alpha-1:compile
[INFO] | \- org.apache.johnzon:johnzon-core:jar:0.9.5:compile
[INFO] +- io.netty:netty-all:jar:4.1.32.Final:compile
[INFO] +- com.datomic:query-support:jar:0.8.27:compile
[INFO] +- com.h2database:h2:jar:1.3.171:compile
[INFO] +- com.datomic:datomic-lucene-core:jar:3.3.0:compile
[INFO] +- com.google.guava:guava:jar:18.0:compile
[INFO] +- net.spy:spymemcached:jar:2.11.4:compile
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.9:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.11:compile
[INFO] | \- (commons-codec:commons-codec:jar:1.11:compile - omitted for conflict with 1.10)
[INFO] +- org.apache.tomcat:tomcat-jdbc:jar:7.0.27:compile
[INFO] | \- org.apache.tomcat:tomcat-juli:jar:7.0.27:compile
[INFO] +- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] \- org.codehaus.janino:commons-compiler-jdk:jar:3.0.12:compile
[INFO] \- org.codehaus.janino:commons-compiler:jar:3.0.12:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.181 s
[INFO] Finished at: 2020-10-24T13:15:47+01:00
[INFO] ------------------------------------------------------------------------
无论我使用的是OpenJDK 15还是Oracle的JDK 15,都会发生同样的情况。在启动Datomic之前,我还尝试过删除Datomic数据文件夹。
解决方法
Datomic交易商requires Java 8,并且不还不支持较新的版本。通过将Transactor env切换到OpenJDK v1.8.0_272来解决:
brew cask install adoptopenjdk8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
bin/transactor config/dev-transactor.properties
我为此损失了10个小时。也许如果事务处理程序尝试在启动时连接到自身以进行健全性检查,它可能会提早警告用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。