package net.johnewart.gearman.example;
import net.johnewart.gearman.common.Job;
import net.johnewart.gearman.common.events.WorkEvent;
import net.johnewart.gearman.common.interfaces.GearmanClient;
import net.johnewart.gearman.common.interfaces.GearmanFunction;
import net.johnewart.gearman.embedded.EmbeddedGearmanClient;
import net.johnewart.gearman.embedded.EmbeddedGearmanServer;
import net.johnewart.gearman.embedded.EmbeddedGearmanWorker;
import net.johnewart.gearman.exceptions.JobSubmissionException;
import net.johnewart.gearman.exceptions.WorkException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
public class EmbeddedServerDemo {
EmbeddedGearmanServer server = new EmbeddedGearmanServer();
public EmbeddedServerDemo() {
GearmanClient client = new EmbeddedGearmanClient(server);
EmbeddedGearmanWorker worker = new EmbeddedGearmanWorker(server);
TestFunction testFunction = new TestFunction();
worker.registerCallback("test", testFunction);
Thread workerThread = new Thread(worker);
workerThread.start();
byte[] data = {'4','2','1','9','3','5','8','7'};
byte[] data2 = {'4','9','1','9','3','5','8','6'};
try {
byte[] result = client.submitJob("test", data);
System.err.println("Data: " + new String(data));
System.err.println("Result: " + new String(result));
Thread.sleep(500);
byte[] result2 = client.submitJob("test", data2);
System.err.println("Data: " + new String(data2));
System.err.println("Result: " + new String(result2));
Calendar c = Calendar.getInstance();
c.add(Calendar.SECOND, 10);
Date whenToRun = c.getTime();
String jobHandle = client.submitFutureJob("test", data2, whenToRun);
System.err.println("Job handle for future job: " + jobHandle);
Thread.sleep(45000);
System.err.println("Job should be complete...");
worker.stopWork();
workerThread.join();
} catch (JobSubmissionException e) {
e.printStackTrace();
} catch (WorkException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
class TestFunction implements GearmanFunction {
@Override
public byte[] process(WorkEvent workEvent) {
Job job = workEvent.job;
byte[] datacopy = Arrays.copyOf(job.getData(), job.getData().length);
Arrays.sort(datacopy);
return datacopy;
}
}
public static void main(String ... args) {
new EmbeddedServerDemo();
}
}