FileNotFoundException при использовании функции базы данных с бесплатными данными
Я получаю 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, чтобы он мог "видеть" мой проект?
1 ответ
Когда вы используете базу данных в памяти, транзактор работает в том же экземпляре JVM, что и узел, следовательно, с тем же путем к классу. Но со свободной базой данных транзактор работает в своем собственном экземпляре JVM и не знает о пространствах имен в одноранговых узлах.
Вы можете добавить файлы jar в путь к классам Transactor, поместив их в папку lib/.