Package io.objectbox
Class ObjectClassPublisher
java.lang.Object
io.objectbox.ObjectClassPublisher
- All Implemented Interfaces:
DataPublisher<Class>,Runnable
A
DataPublisher that notifies DataObservers about changes in an entity box.
Publishing is requested when a subscription is observed and
then by BoxStore for each txCommitted.
Publish requests are processed on a single thread, one at a time, in the order publishing was requested.-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final BoxStore(package private) booleanprivate final Deque<ObjectClassPublisher.PublishRequest> (package private) final org.greenrobot.essentials.collections.MultimapSet<Integer, DataObserver<Class>> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidhandleObserverException(Class objectClass) (package private) voidpublish(int[] entityTypeIdsAffected) voidpublishSingle(DataObserver<Class> observer, Object forClass) private voidqueuePublishRequestAndScheduleRun(DataObserver<Class> observer, int[] entityTypeIds) Non-blocking: will just enqueue the changes for a separate thread.voidrun()Processes publish requests using a single thread to prevent any data generated by observers to get stale.voidsubscribe(DataObserver<Class> observer, Object forClass) private voidunsubscribe(DataObserver<Class> observer, int entityTypeId) voidunsubscribe(DataObserver<Class> observer, Object forClass) Removes the given observer from all object classes it added itself to earlier (forClass == null).
-
Field Details
-
boxStore
-
observersByEntityTypeId
final org.greenrobot.essentials.collections.MultimapSet<Integer,DataObserver<Class>> observersByEntityTypeId -
changesQueue
-
changePublisherRunning
volatile boolean changePublisherRunning
-
-
Constructor Details
-
ObjectClassPublisher
ObjectClassPublisher(BoxStore boxStore)
-
-
Method Details
-
subscribe
- Specified by:
subscribein interfaceDataPublisher<Class>
-
unsubscribe
Removes the given observer from all object classes it added itself to earlier (forClass == null). This also considers weakly added observers.- Specified by:
unsubscribein interfaceDataPublisher<Class>
-
unsubscribe
-
publishSingle
- Specified by:
publishSinglein interfaceDataPublisher<Class>
-
publish
void publish(int[] entityTypeIdsAffected) -
queuePublishRequestAndScheduleRun
private void queuePublishRequestAndScheduleRun(@Nullable DataObserver<Class> observer, int[] entityTypeIds) Non-blocking: will just enqueue the changes for a separate thread. -
run
public void run()Processes publish requests using a single thread to prevent any data generated by observers to get stale. This publisher on its own can NOT deliver stale data (the entity class types do not change). However, aDataObserverof this publisher might apply aDataTransformerwhich queries for data which CAN get stale if delivered out of order. -
handleObserverException
-