OrientDB寄存器挂钩

时间:2015-04-23 09:11:31

标签: java triggers hook orientdb

我只是尝试了orientdb上的所有钩子,但我不确定如何在我的图表上注册ORecordHooks。

OrientGraph graph = new OrientGraph("remote:localhost/test");
MyHook hook = new MyHook();

MyHook类看起来像这样:

public class MyHook extends ORecordHookAbstract implements
        ODatabaseLifecycleListener {

    public MyHook() {
        Orient.instance().addDbLifecycleListener(this);
    }
    @Override
    public DISTRIBUTED_EXECUTION_MODE getDistributedExecutionMode() {
        System.out.println("0");
        return null;
    }
    @Override
    public PRIORITY getPriority() {
        System.out.println("1");
        return PRIORITY.FIRST;
    }
    @Override
    public void onRecordAfterCreate(ORecord iRecord) {
        System.out.println("2");
    }
    @Override
    public RESULT onRecordBeforeCreate(ORecord iRecord) {
        System.out.println("3");
        return ORecordHook.RESULT.RECORD_CHANGED;
    }
    @Override
    public RESULT onRecordBeforeRead(ORecord iRecord) {
        System.out.println("4");
        return ORecordHook.RESULT.RECORD_CHANGED;
    }
    @Override
    public void onRecordAfterRead(ORecord iRecord) {
        System.out.println("5");
    }
    @Override
    public RESULT onRecordBeforeUpdate(ORecord iRecord) {
        System.out.println("6");
        return ORecordHook.RESULT.RECORD_CHANGED;
    }
    @Override
    public void onRecordAfterUpdate(ORecord iRecord) {
        System.out.println("7");
    }
    @Override
    public RESULT onRecordBeforeDelete(ORecord iRecord) {
        System.out.println("8");
        return ORecordHook.RESULT.RECORD_CHANGED;
    }
    @Override
    public void onRecordAfterDelete(ORecord iRecord) {
        System.out.println("9");
    }
    @Override
    public void onCreate(ODatabaseInternal iDatabase) {e
        System.out.println("10");
        iDatabase.registerHook(this);
    }
    @Override
    public void onOpen(ODatabaseInternal iDatabase) {
        System.out.println("11");
        iDatabase.registerHook(this);
    }
    @Override
    public void onClose(ODatabaseInternal iDatabase) {
        System.out.println("12");
        iDatabase.unregisterHook(this);
    }
    @Override
    public void onCreateClass(ODatabaseInternal iDatabase, OClass iClass) {
        System.out.println("13");
    }
    @Override
    public void onDropClass(ODatabaseInternal iDatabase, OClass iClass) {
        System.out.println("14");
    }
}

创建和删除一堆顶点和边后,只有Hooks 1,13和12触发,因此这将是getPriority(),onCreateClass()和onClose()。为什么我的ORecordHooks没有被解雇?

1 个答案:

答案 0 :(得分:3)

要在 OrientGraph 实例上注册挂钩,您可以执行以下操作:

 graph.getRawGraph().registerHook(hook);