/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.yarn.batch.repository; import java.util.Collection; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.JobRestartException; import org.springframework.util.Assert; //import org.springframework.yarn.batch.repository.bindings.UpdateExecutionContextReq; //import org.springframework.yarn.batch.repository.bindings.UpdateExecutionContextRes; import org.springframework.yarn.batch.repository.bindings.repo.AddWithStepExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.AddWithStepExecutionRes; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobExecutionRes; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobExecutionWithJobInstanceReq; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobExecutionWithJobInstanceRes; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobInstanceReq; import org.springframework.yarn.batch.repository.bindings.repo.CreateJobInstanceRes; import org.springframework.yarn.batch.repository.bindings.repo.GetLastJobExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.GetLastJobExecutionRes; import org.springframework.yarn.batch.repository.bindings.repo.GetLastStepExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.GetLastStepExecutionRes; import org.springframework.yarn.batch.repository.bindings.repo.GetStepExecutionCountReq; import org.springframework.yarn.batch.repository.bindings.repo.GetStepExecutionCountRes; import org.springframework.yarn.batch.repository.bindings.repo.IsJobInstanceExistsReq; import org.springframework.yarn.batch.repository.bindings.repo.IsJobInstanceExistsRes; import org.springframework.yarn.batch.repository.bindings.repo.UpdateExecutionContextReq; import org.springframework.yarn.batch.repository.bindings.repo.UpdateWithJobExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.UpdateWithJobExecutionRes; import org.springframework.yarn.batch.repository.bindings.repo.UpdateWithStepExecutionReq; import org.springframework.yarn.batch.repository.bindings.repo.UpdateWithStepExecutionRes; import org.springframework.yarn.integration.ip.mind.AppmasterMindScOperations; public class RemoteJobRepository extends AbstractRemoteDao implements JobRepository { public RemoteJobRepository() { super(); } public RemoteJobRepository(AppmasterMindScOperations appmasterScOperations) { super(appmasterScOperations); } @Override public boolean isJobInstanceExists(String jobName, JobParameters jobParameters) { Assert.notNull(jobName, "Job name must not be null."); Assert.notNull(jobParameters, "JobParameters must not be null."); try { IsJobInstanceExistsReq request = JobRepositoryRpcFactory.buildIsJobInstanceExistsReq(jobName, jobParameters); IsJobInstanceExistsRes response = (IsJobInstanceExistsRes) getAppmasterScOperations().doMindRequest(request); return response.response; } catch (Exception e) { throw convertException(e); } } @Override public JobExecution createJobExecution(String jobName, JobParameters jobParameters) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException { Assert.notNull(jobName, "Job name must not be null."); Assert.notNull(jobParameters, "JobParameters must not be null."); JobExecution jobExecution = null; try { CreateJobExecutionReq request = JobRepositoryRpcFactory.buildCreateJobExecutionReq(jobName, jobParameters); CreateJobExecutionRes response = (CreateJobExecutionRes) getAppmasterScOperations().doMindRequest(request); jobExecution = JobRepositoryRpcFactory.convertJobExecutionType(response.jobExecution); } catch (Exception e) { throw convertException(e); } return jobExecution; } @Override public void update(JobExecution jobExecution) { try { UpdateWithJobExecutionReq request = JobRepositoryRpcFactory.buildSaveJobExecutionReq(jobExecution); UpdateWithJobExecutionRes response = (UpdateWithJobExecutionRes) getAppmasterScOperations().doMindRequest(request); jobExecution.setId(response.getId()); jobExecution.setVersion(response.getVersion()); } catch (Exception e) { throw convertException(e); } } @Override public void add(StepExecution stepExecution) { try { AddWithStepExecutionReq request = JobRepositoryRpcFactory.buildAddWithStepExecutionReq(stepExecution); AddWithStepExecutionRes response = (AddWithStepExecutionRes) getAppmasterScOperations().doMindRequest(request); stepExecution.setId(response.getId()); stepExecution.setVersion(response.getVersion()); } catch (Exception e) { throw convertException(e); } } @Override public void addAll(Collection<StepExecution> stepExecutions) { // jobRepository.addAll(stepExecutions); } @Override public void update(StepExecution stepExecution) { try { UpdateWithStepExecutionReq request = JobRepositoryRpcFactory.buildUpdateWithStepExecutionReq(stepExecution); UpdateWithStepExecutionRes response = (UpdateWithStepExecutionRes) getAppmasterScOperations().doMindRequest(request); stepExecution.setId(response.getId()); stepExecution.setVersion(response.getVersion()); } catch (Exception e) { throw convertException(e); } } @Override public void updateExecutionContext(StepExecution stepExecution) { UpdateExecutionContextReq request = JobRepositoryRpcFactory.buildUpdateExecutionContextReq(stepExecution); getAppmasterScOperations().doMindRequest(request); // TODO: handle response //UpdateExecutionContextRes response = (UpdateExecutionContextRes) getAppmasterScOperations().doMindRequest(request); } @Override public void updateExecutionContext(JobExecution jobExecution) { UpdateExecutionContextReq request = JobRepositoryRpcFactory.buildUpdateExecutionContextReq(jobExecution); getAppmasterScOperations().doMindRequest(request); // TODO: handle response //UpdateExecutionContextRes response = (UpdateExecutionContextRes) getAppmasterScOperations().doMindRequest(request); } @Override public StepExecution getLastStepExecution(JobInstance jobInstance, String stepName) { GetLastStepExecutionReq request = JobRepositoryRpcFactory.buildGetLastStepExecutionReq(jobInstance, stepName); GetLastStepExecutionRes response = (GetLastStepExecutionRes) getAppmasterScOperations().doMindRequest(request); return JobRepositoryRpcFactory.convertStepExecutionType(response.stepExecution); } @Override public int getStepExecutionCount(JobInstance jobInstance, String stepName) { GetStepExecutionCountReq request = JobRepositoryRpcFactory.buildGetStepExecutionCountReq(jobInstance, stepName); GetStepExecutionCountRes response = (GetStepExecutionCountRes) getAppmasterScOperations().doMindRequest(request); return response.count; } @Override public JobExecution getLastJobExecution(String jobName, JobParameters jobParameters) { GetLastJobExecutionReq request = JobRepositoryRpcFactory.buildGetLastJobExecutionReq(jobName, jobParameters); GetLastJobExecutionRes response = (GetLastJobExecutionRes) getAppmasterScOperations().doMindRequest(request); return JobRepositoryRpcFactory.convertJobExecutionType(response.jobExecution); } @Override public JobInstance createJobInstance(String jobName, JobParameters jobParameters) { Assert.notNull(jobName, "Job name must not be null."); Assert.notNull(jobParameters, "JobParameters must not be null."); JobInstance jobInstance = null; try { CreateJobInstanceReq request = JobRepositoryRpcFactory.buildCreateJobInstanceReq(jobName, jobParameters); CreateJobInstanceRes response = (CreateJobInstanceRes) getAppmasterScOperations().doMindRequest(request); jobInstance = JobRepositoryRpcFactory.convertJobInstanceType(response.jobInstance); } catch (Exception e) { throw convertException(e); } return jobInstance; } @Override public JobExecution createJobExecution(JobInstance jobInstance, JobParameters jobParameters, String jobConfigurationLocation) { Assert.notNull(jobInstance, "Job instance must not be null."); Assert.notNull(jobParameters, "JobParameters must not be null."); JobExecution jobExecution = null; try { CreateJobExecutionWithJobInstanceReq request = JobRepositoryRpcFactory.buildCreateJobExecutionWithJobInstanceReq(jobInstance, jobParameters, jobConfigurationLocation); CreateJobExecutionWithJobInstanceRes response = (CreateJobExecutionWithJobInstanceRes) getAppmasterScOperations().doMindRequest(request); jobExecution = JobRepositoryRpcFactory.convertJobExecutionType(response.jobExecution); } catch (Exception e) { throw convertException(e); } return jobExecution; } }