使用需要命名空间的数据库函数时,我收到FileNotFoundException。我只在使用持久性数据库免费数据库时遇到错误,但在我使用内存数据库时却没有。
(ns test.core
(:use [datomic.api :only [q db] :as d]))
(def uris ["datomic:mem://test"
"datomic:free://localhost:4334/test"])
(map
d/delete-database uris)
(map
d/create-database uris)
(def conns (map d/connect uris))
(defn test-entity []
[{:db/id #db/id[:db.part/db]
:test/test "hello"}])
(def db-function
#db/fn {:lang :clojure
:params [database]
:requires [[test.core :as c]]
:code (c/test-entity)})
(map
#(d/transact % [{:db/id #db/id[:db.part/user]
:db/ident :db-function
:db/fn db-function}])
conns)
(map
#(d/transact % [{:db/id #db/id[:db.part/db]
:db/ident :test/test
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}])
conns)
(comment
(db-function nil)
(d/transact (first conns) [[:db-function]])
(d/transact (second conns) [[:db-function]]))
当您评估评论中的第一行和第二行时,它没有问题但是当您评估第三行时会出现异常。
我是否需要在datomic中配置一些内容,以便它可以"参见"我的项目?
答案 0 :(得分:2)
当您使用内存数据库时,transactor在与对等方相同的JVM实例中运行,因此具有相同的类路径。但是对于free数据库,transactor在自己的JVM实例中运行,并且不知道对等体中的命名空间。
您可以将jar放入lib /文件夹中,将jar添加到transactor类路径中。