package org.ourgrid.broker.communication.sender; import org.ourgrid.broker.BrokerConstants; import org.ourgrid.broker.communication.receiver.LocalWorkerProviderClientReceiver; import org.ourgrid.broker.response.StartWorkResponseTO; import org.ourgrid.common.interfaces.Worker; import org.ourgrid.common.interfaces.WorkerClient; import org.ourgrid.common.interfaces.to.GridProcessHandle; import org.ourgrid.common.internal.SenderIF; import br.edu.ufcg.lsd.commune.container.servicemanager.ServiceManager; import br.edu.ufcg.lsd.commune.identification.ServiceID; public class StartWorkSender implements SenderIF<StartWorkResponseTO> { public void execute(StartWorkResponseTO response, ServiceManager manager) { Worker worker = (Worker) manager.getStub(ServiceID.parse(response.getWorkerAddress()), Worker.class); worker.startWork(getWorkerClient(manager), response.getRequestID(), new GridProcessHandle(response.getJobID(), response.getTaskID(), response.getProcessID())); } private WorkerClient getWorkerClient(ServiceManager manager) { WorkerClient workerClient = (WorkerClient) manager.getObjectDeployment(BrokerConstants.WORKER_CLIENT).getObject(); if (workerClient == null) { manager.deploy(BrokerConstants.WORKER_CLIENT, LocalWorkerProviderClientReceiver.class); workerClient = (WorkerClient) manager.getObjectDeployment(BrokerConstants.WORKER_CLIENT).getObject(); } return (WorkerClient) workerClient; } }