tinkerpop.blueprints ライブラリの独自の Clojure バインディングを作成しようとしていますが、コミットの失敗と思われる障害に遭遇しました。現在、グラフの実装として Neo4j を使用しています。動作しない特定の機能は次のとおりです。
(defn remove-from-index!
([index-name elm key]
(remove-from-index!
index-name elm key (property elm key)))
([index-name elm key val]
(let [idx (index index-name)]
(tx
(-> idx
(.remove (name key) val elm)))
idx)))
次のように使用します。
(remove-from-index! :users v1 :username)
(remove-from-index! :users v2 :username "foo")
正常に動作しているようですが、インデックスをクエリすると、削除しようとした頂点が削除されません。私はそれを少しずつ分解しようとしましたが、実際には削除されていると判断しましたが、呼び出されるとすぐに.commit
すべてがロールバックされます.
関連する他の機能/マクロ:
(defn property
[elm key]
(-> elm (.getProperty (name key))))
(defmacro tx
[& body]
`(try
(let [val# (do ~@body)]
(.commit *g*)
val#)
(catch Exception e#
(println (.getMessage e#))
(.rollback *g*))))
(defn index
([^String nomen]
(index (name nomen) "Vertex"))
([^String nomen ^String type]
(-> *g*
(.getIndex
(name nomen)
(Class/forName (str "com.tinkerpop.blueprints." type))))))