From 3d2f66cf10f85c1aaab51efe7c0e0d8425f4dac6 Mon Sep 17 00:00:00 2001 From: maverickstuder Date: Thu, 6 Jun 2024 14:39:23 +0200 Subject: [PATCH] fixed issue with thread-safety of local fields in the HeadlineClassificationService: * HeadlineClassificationService is no singleton anymore * instead initialize it in the ClassificationService and pass it to the classifyMethods as required --- .../ClarifyndClassificationService.java | 12 +++++------- .../DocuMineClassificationService.java | 11 +++++------ .../HeadlineClassificationService.java | 10 ---------- .../RedactManagerClassificationService.java | 12 +++++------- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/ClarifyndClassificationService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/ClarifyndClassificationService.java index b0622e3..8b98b65 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/ClarifyndClassificationService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/ClarifyndClassificationService.java @@ -21,33 +21,31 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class ClarifyndClassificationService { - private final HeadlineClassificationService headlineClassificationService; - public void classifyDocument(ClassificationDocument document) { List headlineFontSizes = document.getFontSizeCounter().getHighterThanMostPopular(); log.debug("Document FontSize counters are: {}", document.getFontSizeCounter().getCountPerValue()); - headlineClassificationService.resetContext(); + HeadlineClassificationService headlineClassificationService = new HeadlineClassificationService(); for (ClassificationPage page : document.getPages()) { - classifyPage(page, document, headlineFontSizes); + classifyPage(headlineClassificationService, page, document, headlineFontSizes); } } - private void classifyPage(ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyPage(HeadlineClassificationService headlineClassificationService, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { for (AbstractPageBlock textBlock : page.getTextBlocks()) { if (textBlock instanceof TextPageBlock) { - classifyBlock((TextPageBlock) textBlock, page, document, headlineFontSizes); + classifyBlock(headlineClassificationService, (TextPageBlock) textBlock, page, document, headlineFontSizes); } } } - private void classifyBlock(TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyBlock(HeadlineClassificationService headlineClassificationService, TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { var bodyTextFrame = page.getBodyTextFrame(); diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/DocuMineClassificationService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/DocuMineClassificationService.java index 97a8c13..54c57d8 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/DocuMineClassificationService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/DocuMineClassificationService.java @@ -24,7 +24,6 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class DocuMineClassificationService { - private final HeadlineClassificationService headlineClassificationService; private static final Pattern pattern = Pattern.compile("^([1-9]\\d?\\.){1,3}\\d{1,2}\\.?\\s[0-9A-Za-z \\[\\]]{2,50}", Pattern.CASE_INSENSITIVE); private static final Pattern pattern2 = Pattern.compile("\\p{L}{3,}", Pattern.CASE_INSENSITIVE); private static final Pattern pattern3 = Pattern.compile("^(\\d{1,1}\\.){1,3}\\d{1,2}\\.?\\s[a-z]{1,2}\\/[a-z]{1,2}.*"); @@ -36,25 +35,25 @@ public class DocuMineClassificationService { log.debug("Document FontSize counters are: {}", document.getFontSizeCounter().getCountPerValue()); - headlineClassificationService.resetContext(); + HeadlineClassificationService headlineClassificationService = new HeadlineClassificationService(); for (ClassificationPage page : document.getPages()) { - classifyPage(page, document, headlineFontSizes); + classifyPage(headlineClassificationService, page, document, headlineFontSizes); } } - private void classifyPage(ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyPage(HeadlineClassificationService headlineClassificationService, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { for (AbstractPageBlock textBlock : page.getTextBlocks()) { if (textBlock instanceof TextPageBlock) { - classifyBlock((TextPageBlock) textBlock, page, document, headlineFontSizes); + classifyBlock(headlineClassificationService, (TextPageBlock) textBlock, page, document, headlineFontSizes); } } } - private void classifyBlock(TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyBlock(HeadlineClassificationService headlineClassificationService, TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { log.debug("headlineFontSizes: {}", headlineFontSizes); var bodyTextFrame = page.getBodyTextFrame(); diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/HeadlineClassificationService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/HeadlineClassificationService.java index e302321..7100ccb 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/HeadlineClassificationService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/HeadlineClassificationService.java @@ -2,15 +2,12 @@ package com.knecon.fforesight.service.layoutparser.processor.services.classifica import static com.knecon.fforesight.service.layoutparser.processor.model.PageBlockType.getHeadlineNumber; -import org.springframework.stereotype.Service; - import com.knecon.fforesight.service.layoutparser.processor.model.PageBlockType; import com.knecon.fforesight.service.layoutparser.processor.model.text.TextPageBlock; import lombok.Getter; import lombok.Setter; -@Service @Getter @Setter public class HeadlineClassificationService { @@ -19,13 +16,6 @@ public class HeadlineClassificationService { PageBlockType originalClassifiedBlockType; TextPageBlock lastHeadlineFromOutline; - public void resetContext() { - setLastHeadline(null); - setOriginalClassifiedBlockType(null); - setLastHeadlineFromOutline(null); - } - - public void setLastHeadlineFromOutline(TextPageBlock lastHeadlineFromOutline) { this.lastHeadlineFromOutline = lastHeadlineFromOutline; diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/RedactManagerClassificationService.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/RedactManagerClassificationService.java index ff532b5..93f966c 100644 --- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/RedactManagerClassificationService.java +++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/services/classification/RedactManagerClassificationService.java @@ -22,8 +22,6 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class RedactManagerClassificationService { - private final HeadlineClassificationService headlineClassificationService; - public void classifyDocument(ClassificationDocument document) { @@ -31,25 +29,25 @@ public class RedactManagerClassificationService { log.debug("Document FontSize counters are: {}", document.getFontSizeCounter().getCountPerValue()); - headlineClassificationService.resetContext(); + HeadlineClassificationService headlineClassificationService = new HeadlineClassificationService(); for (ClassificationPage page : document.getPages()) { - classifyPage(page, document, headlineFontSizes); + classifyPage(headlineClassificationService, page, document, headlineFontSizes); } } - private void classifyPage(ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyPage(HeadlineClassificationService headlineClassificationService, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { for (AbstractPageBlock textBlock : page.getTextBlocks()) { if (textBlock instanceof TextPageBlock) { - classifyBlock((TextPageBlock) textBlock, page, document, headlineFontSizes); + classifyBlock(headlineClassificationService, (TextPageBlock) textBlock, page, document, headlineFontSizes); } } } - private void classifyBlock(TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { + private void classifyBlock(HeadlineClassificationService headlineClassificationService, TextPageBlock textBlock, ClassificationPage page, ClassificationDocument document, List headlineFontSizes) { var bodyTextFrame = page.getBodyTextFrame();