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/.

Другие вопросы по тегам