1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.core.explore.support;
18
19 import java.util.List;
20 import java.util.Set;
21
22 import org.springframework.batch.core.JobExecution;
23 import org.springframework.batch.core.JobInstance;
24 import org.springframework.batch.core.StepExecution;
25 import org.springframework.batch.core.explore.JobExplorer;
26 import org.springframework.batch.core.repository.dao.ExecutionContextDao;
27 import org.springframework.batch.core.repository.dao.JobExecutionDao;
28 import org.springframework.batch.core.repository.dao.JobInstanceDao;
29 import org.springframework.batch.core.repository.dao.StepExecutionDao;
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class SimpleJobExplorer implements JobExplorer {
44
45 private JobInstanceDao jobInstanceDao;
46
47 private JobExecutionDao jobExecutionDao;
48
49 private StepExecutionDao stepExecutionDao;
50
51 private ExecutionContextDao ecDao;
52
53
54
55
56
57 SimpleJobExplorer() {
58 }
59
60 public SimpleJobExplorer(JobInstanceDao jobInstanceDao, JobExecutionDao jobExecutionDao,
61 StepExecutionDao stepExecutionDao, ExecutionContextDao ecDao) {
62 super();
63 this.jobInstanceDao = jobInstanceDao;
64 this.jobExecutionDao = jobExecutionDao;
65 this.stepExecutionDao = stepExecutionDao;
66 this.ecDao = ecDao;
67 }
68
69
70
71
72
73
74
75
76 @Override
77 public List<JobExecution> getJobExecutions(JobInstance jobInstance) {
78 List<JobExecution> executions = jobExecutionDao.findJobExecutions(jobInstance);
79 for (JobExecution jobExecution : executions) {
80 getJobExecutionDependencies(jobExecution);
81 for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
82 getStepExecutionDependencies(stepExecution);
83 }
84 }
85 return executions;
86 }
87
88
89
90
91
92
93
94
95 @Override
96 public Set<JobExecution> findRunningJobExecutions(String jobName) {
97 Set<JobExecution> executions = jobExecutionDao.findRunningJobExecutions(jobName);
98 for (JobExecution jobExecution : executions) {
99 getJobExecutionDependencies(jobExecution);
100 for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
101 getStepExecutionDependencies(stepExecution);
102 }
103 }
104 return executions;
105 }
106
107
108
109
110
111
112
113
114 @Override
115 public JobExecution getJobExecution(Long executionId) {
116 if (executionId == null) {
117 return null;
118 }
119 JobExecution jobExecution = jobExecutionDao.getJobExecution(executionId);
120 if (jobExecution == null) {
121 return null;
122 }
123 getJobExecutionDependencies(jobExecution);
124 for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
125 getStepExecutionDependencies(stepExecution);
126 }
127 return jobExecution;
128 }
129
130
131
132
133
134
135
136
137 @Override
138 public StepExecution getStepExecution(Long jobExecutionId, Long executionId) {
139 JobExecution jobExecution = jobExecutionDao.getJobExecution(jobExecutionId);
140 if (jobExecution == null) {
141 return null;
142 }
143 StepExecution stepExecution = stepExecutionDao.getStepExecution(jobExecution, executionId);
144 getStepExecutionDependencies(stepExecution);
145 return stepExecution;
146 }
147
148
149
150
151
152
153
154
155 @Override
156 public JobInstance getJobInstance(Long instanceId) {
157 return jobInstanceDao.getJobInstance(instanceId);
158 }
159
160
161
162
163
164
165
166
167 @Override
168 public List<JobInstance> getJobInstances(String jobName, int start, int count) {
169 return jobInstanceDao.getJobInstances(jobName, start, count);
170 }
171
172
173
174
175
176
177 @Override
178 public List<String> getJobNames() {
179 return jobInstanceDao.getJobNames();
180 }
181
182
183
184
185
186 private void getJobExecutionDependencies(JobExecution jobExecution) {
187
188 JobInstance jobInstance = jobInstanceDao.getJobInstance(jobExecution);
189 stepExecutionDao.addStepExecutions(jobExecution);
190 jobExecution.setJobInstance(jobInstance);
191 jobExecution.setExecutionContext(ecDao.getExecutionContext(jobExecution));
192
193 }
194
195 private void getStepExecutionDependencies(StepExecution stepExecution) {
196 if (stepExecution != null) {
197 stepExecution.setExecutionContext(ecDao.getExecutionContext(stepExecution));
198 }
199 }
200
201 }