Skip to content
This repository was archived by the owner on Feb 27, 2023. It is now read-only.

Commit 291fc60

Browse files
author
Scott Stafford
committed
Addresses #192
1 parent e20619c commit 291fc60

File tree

3 files changed

+46
-24
lines changed

3 files changed

+46
-24
lines changed
Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.marklogic.spring.batch.item.tasklet;
22

33
import com.marklogic.client.DatabaseClient;
4+
import com.marklogic.client.datamovement.DataMovementManager;
5+
import com.marklogic.client.datamovement.DeleteListener;
6+
import com.marklogic.client.datamovement.JobTicket;
7+
import com.marklogic.client.datamovement.QueryBatcher;
48
import com.marklogic.client.document.GenericDocumentManager;
59
import com.marklogic.client.helper.DatabaseClientProvider;
610
import com.marklogic.client.io.SearchHandle;
711
import com.marklogic.client.query.MatchDocumentSummary;
812
import com.marklogic.client.query.QueryManager;
913
import com.marklogic.client.query.StructuredQueryDefinition;
14+
import com.marklogic.mgmt.admin.AdminConfig;
15+
import com.marklogic.mgmt.admin.AdminManager;
1016
import org.springframework.batch.core.StepContribution;
1117
import org.springframework.batch.core.scope.context.ChunkContext;
1218
import org.springframework.batch.core.step.tasklet.Tasklet;
@@ -16,6 +22,7 @@ public class DeleteDocumentsTasklet implements Tasklet {
1622

1723
private DatabaseClient databaseClient;
1824
private StructuredQueryDefinition queryDefinition;
25+
private String marklogicVersion = "8";
1926

2027
public DeleteDocumentsTasklet(DatabaseClientProvider databaseClientProvider, StructuredQueryDefinition queryDef) {
2128
this.databaseClient = databaseClientProvider.getDatabaseClient();
@@ -24,26 +31,31 @@ public DeleteDocumentsTasklet(DatabaseClientProvider databaseClientProvider, Str
2431

2532
@Override
2633
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
27-
QueryManager qryMgr = databaseClient.newQueryManager();
28-
GenericDocumentManager docMgr = databaseClient.newDocumentManager();
29-
SearchHandle handle = qryMgr.search(queryDefinition, new SearchHandle());
30-
MatchDocumentSummary[] results = handle.getMatchResults();
31-
for (int i = 0; i < results.length; i++) {
32-
docMgr.delete(results[i].getUri());
33-
}
34+
if (marklogicVersion.equals("8")) {
35+
QueryManager qryMgr = databaseClient.newQueryManager();
36+
GenericDocumentManager docMgr = databaseClient.newDocumentManager();
37+
SearchHandle handle = qryMgr.search(queryDefinition, new SearchHandle());
38+
MatchDocumentSummary[] results = handle.getMatchResults();
39+
for (int i = 0; i < results.length; i++) {
40+
docMgr.delete(results[i].getUri());
41+
}
42+
} else if (marklogicVersion.equals("9")) {
43+
final DataMovementManager dataMovementManager = databaseClient.newDataMovementManager();
44+
QueryBatcher qb = dataMovementManager.newQueryBatcher(queryDefinition)
45+
.withBatchSize(2500)
46+
.withConsistentSnapshot()
47+
.onUrisReady(new DeleteListener())
48+
.onQueryFailure(throwable -> throwable.printStackTrace());
49+
JobTicket ticket = dataMovementManager.startJob(qb);
50+
qb.awaitCompletion();
51+
dataMovementManager.stopJob(ticket);
3452

35-
/*
36-
final DataMovementManager dataMovementManager = databaseClient.newDataMovementManager();
37-
QueryBatcher qb = dataMovementManager.newQueryBatcher(queryDefinition)
38-
.withBatchSize(2500)
39-
.withConsistentSnapshot()
40-
.onUrisReady(new DeleteListener())
41-
.onQueryFailure(throwable -> throwable.printStackTrace());
42-
JobTicket ticket = dataMovementManager.startJob(qb);
43-
qb.awaitCompletion();
44-
dataMovementManager.stopJob(ticket);
45-
*/
53+
}
4654
return RepeatStatus.FINISHED;
4755
}
4856

57+
58+
public void setMarklogicVersion(String marklogicVersion) {
59+
this.marklogicVersion = marklogicVersion;
60+
}
4961
}

samples/src/main/java/com/marklogic/spring/batch/samples/DeleteDocumentsJob.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ public Job job(JobBuilderFactory jobBuilderFactory,
3131
@JobScope
3232
public Step deleteDocumentsStep(StepBuilderFactory stepBuilderFactory,
3333
DatabaseClientProvider databaseClientProvider,
34-
@Value("#{jobParameters['output_collections']}") String[] collections) {
34+
@Value("#{jobParameters['output_collections']}") String[] collections,
35+
@Value("#{jobParameters['marklogic_version'] ?: \"8\"}") String marklogicVersion) {
3536
StructuredQueryDefinition query = new StructuredQueryBuilder().collection(collections);
36-
Tasklet deleteDocumentsTasklet = new DeleteDocumentsTasklet(databaseClientProvider, query);
37+
DeleteDocumentsTasklet deleteDocumentsTasklet = new DeleteDocumentsTasklet(databaseClientProvider, query);
38+
deleteDocumentsTasklet.setMarklogicVersion(marklogicVersion);
3739
return stepBuilderFactory.get("Delete Documents").tasklet(deleteDocumentsTasklet).build();
3840
}
3941
}

samples/src/test/java/com.marklogic.spring.batch.samples/DeleteDocumentsJobTest.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,23 @@ public void insertDocument(String uri, String collections, String xml) {
2727

2828
@Before
2929
public void setup() {
30-
Assume.assumeTrue(isMarkLogic9());
3130
for (int i = 0; i < 10; i++) {
3231
insertDocument("doc" + i, "monster", "<hello />");
3332
}
3433
}
3534

36-
//Ignoring this test for now, I'm using DMSDK for this test and for some reason,
37-
//DMSDK is ignoring the host name that I send to the DataManager. It works if I put in the
38-
//host that it expects but fails on my CI build.
35+
@Test
36+
public void deleteMonsterCollectionWithDmsdkTest() throws Exception {
37+
Assume.assumeTrue(isMarkLogic9());
38+
JobParametersBuilder jpb = new JobParametersBuilder();
39+
jpb.addString("output_collections", "monster");
40+
jpb.addString("marklogic_version", "9");
41+
JobExecution jobExecution = getJobLauncherTestUtils().launchJob(jpb.toJobParameters());
42+
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
43+
getClientTestHelper().assertCollectionSize("Expecting zero documents in monster collection", "monster", 0);
44+
}
45+
46+
3947
@Test
4048
public void deleteMonsterCollectionTest() throws Exception {
4149
JobParametersBuilder jpb = new JobParametersBuilder();

0 commit comments

Comments
 (0)