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

org.infinispan.cdi.DelegatingMapReduceTaskLifecycle Maven / Gradle / Ivy

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

import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.InjectionTarget;

import org.infinispan.Cache;
import org.infinispan.cdi.util.CDIHelper;
import org.infinispan.distexec.mapreduce.Mapper;
import org.infinispan.distexec.mapreduce.Reducer;
import org.infinispan.distexec.mapreduce.spi.MapReduceTaskLifecycle;
import org.kohsuke.MetaInfServices;

@MetaInfServices
public class DelegatingMapReduceTaskLifecycle implements MapReduceTaskLifecycle {

   private final MapReduceTaskLifecycle delegate;

   public DelegatingMapReduceTaskLifecycle() {
      delegate = CDIHelper.isCDIAvailable() ? new CDIMapReduceTaskLifecycle() : new NoCDIMapReduceTaskLifecycle();
   }

   @Override
   public  void onPreExecute(Mapper mapper, Cache inputCache) {
      delegate.onPreExecute(mapper, inputCache);
   }

   @Override
   public  void onPostExecute(Mapper mapper) {
      delegate.onPostExecute(mapper);
   }

   @Override
   public  void onPreExecute(Reducer reducer, Cache cache) {
      delegate.onPreExecute(reducer, cache);
   }

   @Override
   public  void onPostExecute(Reducer reducer) {
      delegate.onPostExecute(reducer);
   }

   static class NoCDIMapReduceTaskLifecycle implements MapReduceTaskLifecycle {

      @Override
      public  void onPreExecute(Mapper mapper, Cache inputCache) {
      }

      @Override
      public  void onPostExecute(Mapper mapper) {
      }

      @Override
      public  void onPreExecute(Reducer reducer, Cache inputCache) {
      }

      @Override
      public  void onPostExecute(Reducer reducer) {
      }

   }

   static class CDIMapReduceTaskLifecycle implements MapReduceTaskLifecycle {

      @Override
      @SuppressWarnings("unchecked")
      public  void onPreExecute(Mapper mapper, Cache inputCache) {
         BeanManager bm = CDIHelper.getBeanManager();
         if (bm == null)
            return;
         ContextInputCache.set(inputCache);
         Class> clazz = (Class>) mapper.getClass();
         AnnotatedType> type = bm.createAnnotatedType(clazz);
         InjectionTarget> it = bm.createInjectionTarget(type);
         CreationalContext> ctx = bm.createCreationalContext(null);
         it.inject(mapper, ctx);
         it.postConstruct(mapper);
      }

      @Override
      @SuppressWarnings("unchecked")
      public  void onPostExecute(Mapper mapper) {
         try {
            BeanManager bm = CDIHelper.getBeanManager();
            if (bm == null)
               return;
            Class> clazz = (Class>) mapper.getClass();
            AnnotatedType> type = bm.createAnnotatedType(clazz);
            InjectionTarget> it = bm.createInjectionTarget(type);
            it.preDestroy(mapper);
            it.dispose(mapper);
         } finally {
            ContextInputCache.clean();
         }
      }

      @Override
      @SuppressWarnings("unchecked")
      public  void onPreExecute(Reducer reducer, Cache inputCache) {
         BeanManager bm = CDIHelper.getBeanManager();
         if (bm == null)
            return;
         Class> clazz = (Class>) reducer.getClass();
         AnnotatedType> type = bm.createAnnotatedType(clazz);
         InjectionTarget> it = bm.createInjectionTarget(type);
         CreationalContext> ctx = bm.createCreationalContext(null);
         it.inject(reducer, ctx);
         it.postConstruct(reducer);
      }

      @Override
      @SuppressWarnings("unchecked")
      public  void onPostExecute(Reducer reducer) {
         BeanManager bm = CDIHelper.getBeanManager();
         if (bm == null)
            return;
         Class> clazz = (Class>) reducer.getClass();
         AnnotatedType> type = bm.createAnnotatedType(clazz);
         InjectionTarget> it = bm.createInjectionTarget(type);
         it.preDestroy(reducer);
         it.dispose(reducer);
      }

   }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy