Package com.daveayan.fuzzyavenger.providers.akka

Source Code of com.daveayan.fuzzyavenger.providers.akka.AkkaExecutionProvider

package com.daveayan.fuzzyavenger.providers.akka;

import java.util.ArrayList;
import java.util.List;

import scala.concurrent.Await;
import scala.concurrent.Future;
import scala.concurrent.duration.Duration;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.actor.UntypedActorFactory;
import akka.pattern.Patterns;
import akka.util.Timeout;

import com.daveayan.fuzzyavenger.ExecutionProvider;
import com.daveayan.fuzzyavenger.Function;
import com.google.common.collect.ImmutableList;

@SuppressWarnings("deprecation")
public class AkkaExecutionProvider implements ExecutionProvider {
  public ActorRef shutdownCommandListener;
  public ActorSystem system;
 
  public static ExecutionProvider newInstance() {
    ExecutionProvider ep = new AkkaExecutionProvider();
    ep.initialize();
    return ep;
  }
 
  public void initialize() {
    system = ActorSystem.create("fuzzy-avenger-" + System.currentTimeMillis());
    shutdownCommandListener = system.actorOf(new Props(ActorLevel0_SystemShutdowner.class), "shutdownCommandListener");
  }
 
  @SuppressWarnings({ "unchecked" })
  public List<Object> run(final List<Object> data, List<Object> parameters, Function<?, ?> functionToApply, final int numberOfWorkers, int numberOfSecondsTimeout) {
    final ImmutableList iData = ImmutableList.builder().addAll(data).build();
    ActorRef actorLevel1 = system.actorOf(new Props(new UntypedActorFactory() {
      private static final long serialVersionUID = 1L;
      public UntypedActor create() {
        return new ActorLevel1(iData, numberOfWorkers);
      }
    }), "ActorLevel1-" + System.currentTimeMillis());
   
    Timeout timeout = new Timeout(Duration.create(numberOfSecondsTimeout, "seconds"));
    Future<Object> future = Patterns.ask(actorLevel1, new Message_Runner_to_AL1(parameters, functionToApply), timeout);
    List<Object> results = new ArrayList<Object>();
    try {
      results = (List<Object>) Await.result(future, timeout.duration());
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return results;
  }
 
  public void shutdown() {
    shutdownCommandListener.tell(new Message_AL1_to_AL0(), ActorRef.noSender());
  }
}
TOP

Related Classes of com.daveayan.fuzzyavenger.providers.akka.AkkaExecutionProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.