Comment obtenir les propriétés d’une firebase database Neo4j dans Server Plugin après Commit?

Je dois implémenter un plug-in de serveur Neo4j qui réagit aux modifications de la firebase database et obtient des informations sur ces modifications. Je dois obtenir toutes les données ajoutées, modifiées et supprimées dans une transaction. J’utilise un TransactionEventHandler enregistré dans la firebase database. Pour des raisons de performances, je dois utiliser le rappel afterCommit qui est appelé une fois les modifications apscopes à la firebase database. De cette manière, la transaction ne sera pas retenue par le plug-in.

Maintenant, dans ce rappel, je fais quelque chose de similaire à ceci:

 public void afterCommit(TransactionData data, Void arg1) { for(Node n:data.createdNodes()) { Ssortingng firstkey = n.getPropertyKeys().iterator().next(); } } 

Mais getPropertyKeys lève une exception car la transaction a déjà été validée. Je ne comprends pas pourquoi c’est un problème, je ne veux rien changer à la transaction, je veux juste des propriétés que le nœud a qui a été modifié. Y a-t-il un moyen de contourner ce problème? Quelle est la raison de l’exception?

L’éxéption:

 java.lang.IllegalStateException: This transaction has already been completed. at org.neo4j.kernel.impl.api.KernelTransactionImplementation.assertTransactionOpen(KernelTransactionImplementation.java:376) at org.neo4j.kernel.impl.api.KernelTransactionImplementation.acquireStatement(KernelTransactionImplementation.java:261) at org.neo4j.kernel.impl.api.KernelTransactionImplementation.acquireStatement(KernelTransactionImplementation.java:80) at org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.instance(ThreadToStatementContextBridge.java:64) at org.neo4j.kernel.InternalAbstractGraphDatabase$8.statement(InternalAbstractGraphDatabase.java:785) at org.neo4j.kernel.impl.core.NodeProxy.getPropertyKeys(NodeProxy.java:358) at de.example.neo4jVersionControl.ChangeEventListener.afterCommit(ChangeEventListener.java:41) 

Dans afterCommit la transaction a déjà été afterCommit (d’où le nom). Pour accéder aux propriétés à partir d’un nœud, vous avez besoin d’un contexte transactionnel. Rappelez-vous que toutes les opérations (même en lecture seule) l’exigent.

La méthode recommandée pour les implémentations de TransactionEventHandler est de ne compter que sur TransactionData . TransactionData.assignedNodeProperties() renverra également les propriétés des nouveaux nœuds créés.