Notifiers can be chained by a secondary store implementation. Notifier chaining is accomplished using these APIs:
Extent<T>.getNotifier(...)
- get
currently installed Extent<T>
notifier.
Query<T>.getNotifier(...)
- get
currently installed Query<T>
notifier for a
specific key.
Record<T>.getNotifier(...)
- get
currently installed Record<T>
notifier.
Example 10.7, “Notifier chaining” shows the chaining of notifiers.
Example 10.7. Notifier chaining
// $Revision: 1.1.2.2 $ package com.kabira.snippets.store; import com.kabira.platform.Transaction; import com.kabira.platform.annotation.Managed; import com.kabira.store.Record; /** * Chaining secondary store notifiers * <p> * <h2> Target Nodes</h2> * <ul> * <li> <b>domainnode</b> = A * </ul> */ public class Chaining { @Managed private static class A { }; private static class Notifier extends Record<A> { private static void installNotifer() { // // Get previously installed notifier (if any) // This must be done before we create a new notifier // Record<A> previous = (Record<A>) Record.getNotifier(A.class); new Notifier(previous); } private Notifier(Record<A> previous) { super(A.class); // // Save off previous notifier (may be null) // m_chained = previous; } @Override public void created(A a) { System.out.println("INFO: created " + a); // // Call chained notifer (if any) // if (m_chained != null) { m_chained.created(a); } } private final Record<A> m_chained; } /** * Main entry point * * @param args Not used */ public static void main(final String[] args) { new Transaction("Initialization") { @Override protected void run() { Notifier.installNotifer(); Notifier.installNotifer(); Notifier.installNotifer(); } }.execute(); new Transaction("Create Objects") { @Override protected void run() throws Transaction.Rollback { new A(); } }.execute(); } }
Example 10.7, “Notifier chaining” outputs these messages when executed:
INFO: created com.kabira.snippets.store.Chaining$A@fce9ff01 INFO: created com.kabira.snippets.store.Chaining$A@fce9ff01 INFO: created com.kabira.snippets.store.Chaining$A@fce9ff01