Package io.objectbox
Class ObjectClassPublisher
- java.lang.Object
-
- io.objectbox.ObjectClassPublisher
-
- All Implemented Interfaces:
DataPublisher<java.lang.Class>,java.lang.Runnable
@Internal class ObjectClassPublisher extends java.lang.Object implements DataPublisher<java.lang.Class>, java.lang.Runnable
ADataPublisherthat notifiesDataObservers about changes in an entity box. Publishing is requested when a subscription isobservedand then byBoxStorefor eachtxCommitted. Publish requests are processed on a single thread, one at a time, in the order publishing was requested.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classObjectClassPublisher.PublishRequest
-
Field Summary
Fields Modifier and Type Field Description (package private) BoxStoreboxStore(package private) booleanchangePublisherRunningprivate java.util.Deque<ObjectClassPublisher.PublishRequest>changesQueue(package private) org.greenrobot.essentials.collections.MultimapSet<java.lang.Integer,DataObserver<java.lang.Class>>observersByEntityTypeId
-
Constructor Summary
Constructors Constructor Description ObjectClassPublisher(BoxStore boxStore)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidhandleObserverException(java.lang.Class objectClass)(package private) voidpublish(int[] entityTypeIdsAffected)voidpublishSingle(DataObserver<java.lang.Class> observer, java.lang.Object forClass)private voidqueuePublishRequestAndScheduleRun(DataObserver<java.lang.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<java.lang.Class> observer, java.lang.Object forClass)private voidunsubscribe(DataObserver<java.lang.Class> observer, int entityTypeId)voidunsubscribe(DataObserver<java.lang.Class> observer, java.lang.Object forClass)Removes the given observer from all object classes it added itself to earlier (forClass == null).
-
-
-
Field Detail
-
boxStore
final BoxStore boxStore
-
observersByEntityTypeId
final org.greenrobot.essentials.collections.MultimapSet<java.lang.Integer,DataObserver<java.lang.Class>> observersByEntityTypeId
-
changesQueue
private final java.util.Deque<ObjectClassPublisher.PublishRequest> changesQueue
-
changePublisherRunning
volatile boolean changePublisherRunning
-
-
Constructor Detail
-
ObjectClassPublisher
ObjectClassPublisher(BoxStore boxStore)
-
-
Method Detail
-
subscribe
public void subscribe(DataObserver<java.lang.Class> observer, @Nullable java.lang.Object forClass)
- Specified by:
subscribein interfaceDataPublisher<java.lang.Class>
-
unsubscribe
public void unsubscribe(DataObserver<java.lang.Class> observer, @Nullable java.lang.Object forClass)
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<java.lang.Class>
-
unsubscribe
private void unsubscribe(DataObserver<java.lang.Class> observer, int entityTypeId)
-
publishSingle
public void publishSingle(DataObserver<java.lang.Class> observer, @Nullable java.lang.Object forClass)
- Specified by:
publishSinglein interfaceDataPublisher<java.lang.Class>
-
publish
void publish(int[] entityTypeIdsAffected)
-
queuePublishRequestAndScheduleRun
private void queuePublishRequestAndScheduleRun(@Nullable DataObserver<java.lang.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.- Specified by:
runin interfacejava.lang.Runnable
-
handleObserverException
private void handleObserverException(java.lang.Class objectClass)
-
-