I want to use natural threads for read - write operation in config file , i
have used threads implemented in groovy, but my code neither throws
exception nor makes anything else , here are several subjects i am
interested in:

Is it possible to implement natural Threads inside nifi executeScript
processor groovy code?
How should i implement this logic inside nifi environment without threads?

here is my code example, WHAT SHOULD I CHANGE TO MAKE THIS CODE WORK?

static String content = "";
static File file = new File("C:/Users/Desktop/test/conf.xml");
static BufferedReader s;
static BufferedWriter w;
static RandomAccessFile ini= new RandomAccessFile(file, "rwd");
static FileLock lock= ini.getChannel().lock();
def static thread=Thread.start{
try {
    String sCurrentLine;
    s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));
    while ((sCurrentLine = s.readLine()) != null) {
        content += sCurrentLine;
    }

    ini.seek(0);
     def flowFile1 = session.create()
           flowFile1 = session.putAttribute(flowFile1, "filename",
"conf.xml");
           session.write(flowFile1, new StreamCallback() {
               @Override
               public void process(InputStream inputStream1, OutputStream
outputStream) throws IOException {

                  
outputStream.write(content.getBytes(StandardCharsets.UTF_8))
               }

           });
           session.transfer(flowFile1, REL_SUCCESS);

    def xml = new XmlParser().parseText(content);
    xml.'**'.findAll{it.name() == 'runAs'}.each{ it.replaceBody 'false'};
    def newxml1 = XmlUtil.serialize(xml);
    String data = newxml1;
    if (!data.isEmpty()) {
        ini.setLength(0);
        w = new BufferedWriter(Channels.newWriter(ini.getChannel(),
"UTF-8"));
        w.write(data);
        lock.release();
        w.close();

    }


}catch (FileNotFoundException e) {
    TimeUnit.SECONDS.sleep(50000);
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();

} catch(OverlappingFileLockException e){
    TimeUnit.SECONDS.sleep(50000);
    lock.release();
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
} finally {

    lock.release()
    thread.stop();
}


}

 def static thread2=Thread.start{
    try {

        String sCurrentLine;
        s = new BufferedReader(Channels.newReader(ini.getChannel(),
"UTF-8"));
        while ((sCurrentLine = s.readLine()) != null) {
            content += sCurrentLine;
        }
        ini.seek(0);

        def flowFile = session.get();
         if (flowFile != null) return;
         def serviceName = flowFile.getAttribute('serviceName');
         def date = flowFile.getAttribute('filename').substring(0, 10);
         def xml = new XmlParser().parseText(content)
         if (serviceName == 'borderCrossDecl') {

             xml.RS.borderCrossDecl.details.findAll({ p ->
                 p.runAs[0].text() == "false" && p.start[0].text() ==
date.toString();
             }).each({ p ->
                 p.start[0].value = addDays(p.start[0].text())
                 p.runAs[0].value = "true"
             })
         }
        def xml1 = new XmlParser().parseText(content);
        def newXml = XmlUtil.serialize(xml1)
        String data = newXml.toString();
        if (!data.isEmpty()) {
            ini.setLength(0);
            w = new BufferedWriter(Channels.newWriter(ini.getChannel(),
"UTF-8"));
            w.write(data);
            lock.release();
            w.close();

        }
    }catch (FileNotFoundException e) {
        TimeUnit.SECONDS.sleep(50000);
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();

    } catch(OverlappingFileLockException e){
        TimeUnit.SECONDS.sleep(50000);
        lock.release();
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        lock.release();
        thread2.stop();
    }

};

 thread.join();
 thread2.join();



--
Sent from: http://apache-nifi-users-list.2361937.n4.nabble.com/

Reply via email to