22
33import com .fasterxml .jackson .databind .JsonNode ;
44import com .fasterxml .jackson .databind .ObjectMapper ;
5- import com .marklogic .contentpump .ContentPump ;
65import com .marklogic .contentpump .bean .MlcpBean ;
76import com .marklogic .hub .HubConfig ;
87import com .marklogic .hub .JobStatusListener ;
98import com .marklogic .quickstart .util .StreamGobbler ;
109import org .apache .commons .io .FileUtils ;
10+ import org .slf4j .Logger ;
11+ import org .slf4j .LoggerFactory ;
1112import org .springframework .batch .core .StepContribution ;
1213import org .springframework .batch .core .scope .context .ChunkContext ;
1314import org .springframework .batch .core .step .tasklet .Tasklet ;
1415import org .springframework .batch .repeat .RepeatStatus ;
1516
1617import java .io .File ;
1718import java .io .IOException ;
19+ import java .net .URL ;
20+ import java .net .URLClassLoader ;
1821import java .util .ArrayList ;
1922import java .util .Arrays ;
2023import java .util .function .Consumer ;
2124
2225class MlcpTasklet implements Tasklet {
2326
27+ protected final Logger logger = LoggerFactory .getLogger (getClass ());
28+
2429 private HubConfig hubConfig ;
2530 private JsonNode mlcpOptions ;
2631 private JobStatusListener statusListener ;
@@ -66,34 +71,53 @@ public RepeatStatus execute(StepContribution contribution, ChunkContext chunkCon
6671 }
6772
6873 private void runMlcp (long jobId , MlcpBean bean ) throws IOException , InterruptedException {
74+ ClassLoader cl = ClassLoader .getSystemClassLoader ();
75+
76+ URL [] urls = ((URLClassLoader )cl ).getURLs ();
77+
6978 String javaHome = System .getProperty ("java.home" );
7079 String javaBin = javaHome +
7180 File .separator + "bin" +
7281 File .separator + "java" ;
7382 String classpath = System .getProperty ("java.class.path" );
74- String className = ContentPump .class .getCanonicalName ();
75-
76- File loggerFile = File .createTempFile ("mlcp-" , "-logger" );
77- String loggerData = "log4j.rootLogger=INFO,console\n " +
78- "log4j.appender.console=org.apache.log4j.ConsoleAppender\n " +
79- "log4j.appender.console.target=System.err\n " +
80- "log4j.appender.console.layout=org.apache.log4j.PatternLayout\n " +
81- "log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n\n " +
83+
84+ File loggerFile = File .createTempFile ("mlcp-" , "-logger.xml" );
85+ String loggerData = "<configuration>\n " +
8286 "\n " +
83- "# To suppress not native warn on Mac and Solaris\n " +
84- "log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR\n " +
87+ " <appender name=\" STDOUT\" class=\" ch.qos.logback.core.ConsoleAppender\" >\n " +
88+ " <!-- encoders are assigned the type\n " +
89+ " ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->\n " +
90+ " <encoder>\n " +
91+ " <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\n " +
92+ " </encoder>\n " +
93+ " </appender>\n " +
8594 "\n " +
86- "# To enable debug\n " +
87- "#log4j.logger.com.marklogic.mapreduce=DEBUG\n " +
88- "#log4j.logger.com.marklogic.contentpump=DEBUG\n " ;
95+ " <logger name=\" org.apache.http\" level=\" WARN\" />\n " +
96+ "\n " +
97+ " <logger name=\" com.marklogic.spring.batch.core.repository.dao.MarkLogicStepExecutionDao\" level=\" WARN\" />\n " +
98+ " <logger name=\" com.marklogic.spring.batch.core.repository.dao.MarkLogicJobExecutionDao\" level=\" WARN\" />\n " +
99+ " <logger name=\" com.marklogic.client.impl.DocumentManagerImpl\" level=\" WARN\" />\n " +
100+ " <logger name=\" com.marklogic.client.impl.DatabaseClientImpl\" level=\" WARN\" />\n " +
101+ " <logger name=\" com.marklogic\" level=\" INFO\" />\n " +
102+ " <logger name=\" com.marklogic.appdeployer\" level=\" INFO\" />\n " +
103+ " <logger name=\" com.marklogic.hub\" level=\" INFO\" />\n " +
104+ " <logger name=\" com.marklogic.contentpump\" level=\" INFO\" />\n " +
105+ " <logger name=\" org.apache.catalina.webresources.Cache\" level=\" ERROR\" />\n " +
106+ " <logger name=\" org.apache.hadoop.util.Shell\" level=\" OFF\" />\n " +
107+ " <logger name=\" org.apache.hadoop.util.NativeCodeLoader\" level=\" ERROR\" />\n " +
108+ "\n " +
109+ " <root level=\" WARN\" >\n " +
110+ " <appender-ref ref=\" STDOUT\" />\n " +
111+ " </root>\n " +
112+ "</configuration>\n " ;
89113 FileUtils .writeStringToFile (loggerFile , loggerData );
90114
91115 ArrayList <String > args = new ArrayList <>();
92116 args .add (javaBin );
93- args .add ("-Dlog4j .configurationFile=" + loggerFile .getAbsolutePath () );
94- args .add ("-cp " );
117+ args .add ("-Dlogback .configurationFile=" + loggerFile .toURI ()); //logback );
118+ args .add ("-jar " );
95119 args .add (classpath );
96- args .add (className );
120+ args .add ("mlcp" );
97121 args .addAll (Arrays .asList (bean .buildArgs ()));
98122
99123 ProcessBuilder pb = new ProcessBuilder (args );
@@ -104,7 +128,7 @@ private void runMlcp(long jobId, MlcpBean bean) throws IOException, InterruptedE
104128
105129 @ Override
106130 public void accept (String status ) {
107-
131+ System . out . println ( status );
108132 // don't log an error if the winutils binary is missing
109133 if (status .contains ("ERROR" ) && !status .contains ("winutils binary" )) {
110134 hasError = true ;
0 commit comments