/
MyExtensionFactory.java
57 lines (46 loc) · 2 KB
/
MyExtensionFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.ikwattro.neo4j.tx;
import org.neo4j.annotations.service.ServiceProvider;
import org.neo4j.dbms.api.DatabaseManagementService;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.kernel.extension.ExtensionFactory;
import org.neo4j.kernel.extension.ExtensionType;
import org.neo4j.kernel.extension.context.ExtensionContext;
import org.neo4j.kernel.lifecycle.Lifecycle;
import org.neo4j.kernel.lifecycle.LifecycleAdapter;
import org.neo4j.logging.internal.LogService;
import static org.neo4j.configuration.GraphDatabaseSettings.SYSTEM_DATABASE_NAME;
@ServiceProvider
public class MyExtensionFactory extends ExtensionFactory<MyExtensionFactory.Dependencies> {
private GraphDatabaseService db;
private DatabaseManagementService managementService;
private LogService log;
public MyExtensionFactory() {
super(ExtensionType.DATABASE, "MyExtensionFactory");
}
@Override
public Lifecycle newInstance(ExtensionContext context, Dependencies dependencies) {
db = dependencies.db();
managementService = dependencies.databaseManagementService();
log = dependencies.log();
return new MyAdapter();
}
public class MyAdapter extends LifecycleAdapter {
@Override
public void start() throws Exception {
if (!db.databaseName().equals(SYSTEM_DATABASE_NAME)) {
log.getUserLog(MyExtensionFactory.class).info("Registering transaction event listener for database " + db.databaseName());
managementService.registerTransactionEventListener(
db.databaseName(),
new MyTransactionEventListener(db, log)
);
} else {
log.getUserLog(MyExtensionFactory.class).info("System database. Not registering transaction event listener");
}
}
}
interface Dependencies {
GraphDatabaseService db();
DatabaseManagementService databaseManagementService();
LogService log();
}
}