微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接到已还原的数据库时,Datomic抛出ActiveMQInternalErrorException

如何解决连接到已还原的数据库时,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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?