All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.cdi.event.cache.TopologyChangedAdapter Maven / Gradle / Ivy

There is a newer version: 9.1.7.Final
Show newest version
package org.infinispan.cdi.event.cache;

import org.infinispan.Cache;
import org.infinispan.distribution.ch.ConsistentHash;
import org.infinispan.notifications.Listener;
import org.infinispan.notifications.cachelistener.annotation.TopologyChanged;
import org.infinispan.notifications.cachelistener.event.TopologyChangedEvent;
import org.infinispan.notifications.cachelistener.event.TransactionRegisteredEvent;
import org.infinispan.transaction.xa.GlobalTransaction;

import javax.enterprise.event.Event;
import javax.enterprise.util.TypeLiteral;

/**
 * @author Pete Muir
 */
@Listener
public class TopologyChangedAdapter extends AbstractAdapter> {

   /**
    * CDI does not allow parametrized type for events (like ). This is why this wrapped needs to be
    * introduced. To ensure type safety, this needs to be linked to parent class (in other words this class can not
    * be static).
    */
   private class CDITopologyChangedEvent implements TopologyChangedEvent {
      private TopologyChangedEvent decoratedEvent;

      private CDITopologyChangedEvent(TopologyChangedEvent decoratedEvent) {
         this.decoratedEvent = decoratedEvent;
      }

      @Override
      public ConsistentHash getConsistentHashAtStart() {
         return decoratedEvent.getConsistentHashAtStart();
      }

      @Override
      public ConsistentHash getConsistentHashAtEnd() {
         return decoratedEvent.getConsistentHashAtEnd();
      }

      @Override
      public int getNewTopologyId() {
         return decoratedEvent.getNewTopologyId();
      }

      @Override
      public Type getType() {
         return decoratedEvent.getType();
      }

      @Override
      public boolean isPre() {
         return decoratedEvent.isPre();
      }

      @Override
      public Cache getCache() {
         return decoratedEvent.getCache();
      }
   }

   /**
    * Needed for creating event bridge.
    */
   public static final TransactionRegisteredEvent EMPTY = new TransactionRegisteredEvent() {

      @Override
      public Type getType() {
         return null;
      }

      @Override
      public GlobalTransaction getGlobalTransaction() {
         return null;
      }

      @Override
      public boolean isOriginLocal() {
         return false;
      }

      @Override
      public boolean isPre() {
         return false;
      }

      @Override
      public Cache getCache() {
         return null;
      }

   };

   /**
    * Events which will be selected (including generic type information ().
    */
   @SuppressWarnings("serial")
   public static final TypeLiteral> WILDCARD_TYPE = new TypeLiteral>() {
   };

   public TopologyChangedAdapter(Event> event) {
      super(event);
   }

   @Override
   @TopologyChanged
   public void fire(TopologyChangedEvent payload) {
      super.fire(new CDITopologyChangedEvent(payload));
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy