2014-07-16 2 views
0

Clojure repl (수정 된 스키마와 초기 데이터 세트로 https://github.com/swannodette/om/wiki/Intermediate-Tutorial 자습서의 'util.clj'사용) 아래의 'load-data'를 사용하여 데이터를로드합니다. 새로운 Datomic 데이터베이스 인 경우 데이터는 Datomic 콘솔에 나타나지 않습니다.Datomic의 '거래'에서 세부 정보/오류 메시지를받는 방법

그러나 repl에서 'load-data'작업을 수행 할 때 오류 메시지가 표시되지 않습니다.

스키마는 Datomic 콘솔에서 예상대로 나타납니다. 튜토리얼에서 수정되지 않은 코드를 사용하여 스키마와 데이터를 모두 볼 수있다.

초기 데이터를 설정하는 코드에 문제가 있어야합니다. 하지만 오류 메시지가 없기 때문에 어디 있는지 알 수 없습니다.

Datomic 데이터베이스의 init 트랜잭션에서 오류 메시지 및 기타 세부 정보를 얻으려면 어떻게해야합니까?

코드 :

(defn transact-all [conn f] 
    (doseq [txd (read-all f)] 
    (d/transact conn txd)) 
    :done) 

(defn load-schema [] 
    (transact-all (get-conn) (io/resource "data/schema.edn"))) 

(defn load-data [] 
    (transact-all (get-conn) (io/resource "data/initial.edn"))) 

;; Logging provides some comparison with the known working scenario, but so far I only can log entity id's: 

(defn read-log [] 
    (d/q '[:find ?e 
     :in ?log ?t1 ?t2 
     :where [(tx-ids ?log ?t1 ?t2) [?tx ...]] 
     [(tx-data ?log ?tx) [[?e]]]] 
     (d/log (get-conn)) #inst "2014-07-14" #inst "2015-07-01") 
) 

답변

1

는 Clojure에서 당신이 트랜잭션의 결과를 얻을 수 @ 또는 DEREF을 사용할 수 있습니다 예 :

@(d/transact conn txd) 

d/transact의 문서에 설명되어 반환지도 : http://docs.datomic.com/clojure/#datomic.api/transact

특히 :

트랜잭션이 중단되면 미래의 값을 가져 오려고 시도하면 java.util.concurrent.ExecutionException이 던져지고 오류 정보가 포함 된 java.lang.Error가 래핑됩니다. 트랜잭션이 시간 초과되면, transact에 대한 호출은 RuntimeException을 던집니다. 트랜잭션 타임 아웃은 시스템 등록 정보 datomic.txTimeoutMsec을 통해 설정할 수 있으며 기본값은 10000 (10 초)입니다.

잘못된 트랜잭션은 또한 IllegalArgumentException (또는 다른 예외)을 발생시킵니다.

+0

출력을 덤프하려고했지만 repl에서 실행하면 출력을 얻지 못합니다 (': done'이외) - 잘못된 구문입니까? – christopherbalz

+0

(위의 덧글 다시) : 출력을 덤프하려고하면, 나는 이것을 시도했지만 repl ('done :'이외의)에서 실행될 때 아무런 결과도 얻지 못합니다 - 단지 잘못된 구문입니까? '(println @ (d/transact conn txd)))' – christopherbalz

+0

잘못된 디렉토리에 있었기 때문에 올바른 버전을 실행하지 못했습니다. 올바른 디렉토리로 전환하면 * 잘 작동합니다. 내'IllegalArgumentExceptionInfo : db.error/not-a-db-id 잘못된 db/id : # db/id [: db.part/stage -900] datomic.error/arg (error.clj : 55)'. – christopherbalz