Package io.objectbox

Class 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
    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.
    • Field Detail

      • observersByEntityTypeId

        final org.greenrobot.essentials.collections.MultimapSet<java.lang.Integer,​DataObserver<java.lang.Class>> observersByEntityTypeId
      • 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:
        subscribe in interface DataPublisher<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:
        unsubscribe in interface DataPublisher<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:
        publishSingle in interface DataPublisher<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, a DataObserver of this publisher might apply a DataTransformer which queries for data which CAN get stale if delivered out of order.
        Specified by:
        run in interface java.lang.Runnable
      • handleObserverException

        private void handleObserverException​(java.lang.Class objectClass)