====== AIRS_CI-408 Preventive Action 7.1 - Architecture Rule ====== [[https://tasks.supplyon.de/browse/AIRS_CI-408|AIRS_CI-408 Preventive Action 7.1 - Architecture Rule]] [[https://git.seeburger.de/r/c/supplyon/airsupply/+/97105|Commit from Stefan]], which defines architectural rules. [[https://git.seeburger.de/r/c/supplyon/airsupply/+/100535|Commit from Burkhard]], which reverts Commit from Stefan (because of a startup failure). [[https://tasks.supplyon.de/browse/AIRS_CI-395|AIRS_CI-395 AIRS Escalation finding: Refactor CDI Beans to stateless beans]] [[https://www.archunit.org/userguide/html/000_Index.html|ArchUnit Documentation]] [[https://github.com/TNG/ArchUnit-Examples|ArchUnit Examples]] [[https://git.seeburger.de/r/c/supplyon/airsupply/+/103644|Change in Gerrit]] ([[https://git.seeburger.de/r/c/supplyon/airsupply/+/101862|First Change in Gerrit]]) ([[https://git.seeburger.de/r/c/supplyon/airsupply/+/105380|Cherry Pick of Burkhard to release/rel_20]]) **Task Description**\\ Implement architectural rule to ensure that concurrent import processes do not operate on shared memory. **Acceptance Criteria**\\ An architectural rule has to be implemented: * The rule is implemented as static JUnit test * The rule checks for state in CDI beans * If the rule detects a violation, the complete build process must fail and report an error **Burkhard**\\ * the test is already existing (''CDIandEJBArchitectureTest.beansMustNotHaveAnyState'') * the goal is to refactor all classes which were excepted fromm this test ===== Refactor beans ===== * **-** Refactor beans * **-** ConcessionCreateXMLHandler.class * **-** is not stateless as it keeps state in field cfg * **-** is not stateless as it keeps state in field currentCtrlArea * **-** is not stateless as it keeps state in field doc * **-** is not stateless as it keeps state in field isAirbusConcession * **-** is not stateless as it keeps state in field manager * **-** is not stateless as it keeps state in field mimeMessageImportProcessor * **-** is not stateless as it keeps state in field nCreationTimeStamp * **-** is not stateless as it keeps state in field nReceivingTimeStamp * **-** is not stateless as it keeps state in field ncrHeader * **-** is not stateless as it keeps state in field ncrPositions * **-** is not stateless as it keeps state in field procResult * **-** is not stateless as it keeps state in field props * **-** is not stateless as it keeps state in field protoNCRHeader * **-** is not stateless as it keeps state in field sExternalMessageId * **-** is not stateless as it keeps state in field sInternalMessageId * **-** is not stateless as it keeps state in field sReceiverInfo * **-** is not stateless as it keeps state in field sSenderInfo * **-** is not stateless as it keeps state in field sStatus * **-** NCRResponseXMLHandler * **-** is not stateless as it keeps state in field cfg * **-** is not stateless as it keeps state in field currentCtrlArea * **-** is not stateless as it keeps state in field doc * **-** is not stateless as it keeps state in field manager * **-** is not stateless as it keeps state in field mimeMessageImportProcessor * **-** is not stateless as it keeps state in field nCreationTimeStamp * **-** is not stateless as it keeps state in field nReceivingTimeStamp * **-** is not stateless as it keeps state in field ncrHeader * **-** is not stateless as it keeps state in field ncrPositions * **-** is not stateless as it keeps state in field procResult * **-** is not stateless as it keeps state in field props * **-** is not stateless as it keeps state in field sExternalMessageId * **-** is not stateless as it keeps state in field sInternalMessageId * **-** is not stateless as it keeps state in field sReceiverInfo * **-** is not stateless as it keeps state in field sSenderInfo * **-** is not stateless as it keeps state in field sStatus * **-** NcrQualityReportXmlHandler * **-** is not stateless as it keeps state in field includedAttachments * **-** is not stateless as it keeps state in field mimeHandlerMessageFormat * **-** is not stateless as it keeps state in field portalGroup * **-** is not stateless as it keeps state in field xmlDoc * **-** NcrQualityReportJob * **-** is not stateless as it keeps state in field stopped * **-** POFinalizerJob * **-** is not stateless as it keeps state in field bJobStopped * **-** POCustomerImportCSV * **-** is not stateless as it keeps state in field bCollabProcessed * **-** is not stateless as it keeps state in field changeVerifier * **-** is not stateless as it keeps state in field dbData * **-** is not stateless as it keeps state in field importData * **-** is not stateless as it keeps state in field userContext * **-** POCustomerImportXML * **-** is not stateless as it keeps state in field bCollabProcessed * **-** is not stateless as it keeps state in field changeVerifier * **-** is not stateless as it keeps state in field dbData * **-** is not stateless as it keeps state in field importData * **-** is not stateless as it keeps state in field userContext * **-** POSupplierImportCSV * **-** is not stateless as it keeps state in field bCollabProcessed * **-** is not stateless as it keeps state in field changeVerifier * **-** is not stateless as it keeps state in field dbData * **-** is not stateless as it keeps state in field importData * **-** is not stateless as it keeps state in field userContext * **-** POSupplierImportXML * **-** is not stateless as it keeps state in field bCollabProcessed * **-** is not stateless as it keeps state in field changeVerifier * **-** is not stateless as it keeps state in field dbData * **-** is not stateless as it keeps state in field importData * **-** is not stateless as it keeps state in field userContext * **+** EquipmentProcessDefinition * **+** NoeProcessDefinition * **+** NonAirbusProcessDefinition * **+** StandardPartProcessDefinition ===== Commit from Stefan ===== * ''@ArchTest'' * airsupply/src/java-test/com/seeburger/airsupply/CDIandEJBArchitectureTest.java * Changed interface of class ''AbstractAlertCSVDownload'' (methods return ''void'' now) * airsupply-base/src/java/com/seeburger/airsupply/alertmon/control/AbstractAlertCSVDownload.java * airsupply/src/java-test/com/seeburger/airsupply/alertmon/control/ConcessionAlertCSVDownloadScreenTest.java * airsupply/src/java-test/com/seeburger/airsupply/alertmon/control/NOEAlertCSVDownloadScreenTest.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/ConcessionAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/ForecastAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/MDAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/NOEAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/POAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/SBIAlertCSVDownloadScreen.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/VMIAlertCSVDownloadScreen.java * Removed ''init()'' / ''super.init()'' * airsupply/src/java/com/seeburger/airsupply/ncr/manager/ConcessionNCRManagerEJB.java * airsupply/src/java/com/seeburger/airsupply/ncr/manager/NOENCRManagerEJB.java * airsupply/src/java/com/seeburger/airsupply/ncr/manager/NCRManagerEJB.java (removed ''init()'' ) * Set ''@ApplicationScoped'' * airsupply/src/java/com/seeburger/airsupply/ncr/alertmon/NCRAlertMonitorConnector.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/BasicProcessDefinitionDeterminator.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/ConcessionTemplateDownloadScreenInfo.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NCRAttachmentCheckCreateRight.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NcrPrintActionScreenUtil.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NCRRedirectURL.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NCRRightFilterFactory.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NCRRightsCheck.java * airsupply/src/java/com/seeburger/airsupply/ncr/control/NoeTemplateDownloadScreenInfo.java * airsupply/src/java/com/seeburger/airsupply/ncr/exchange/NCRXMLImportUtil.java * airsupply/src/java/com/seeburger/airsupply/ncr/manager/processes/AgnosticFieldDefinitions.java * airsupply/src/java/com/seeburger/airsupply/ncr/shared/util/NCRCustomerConfigTypeProvider.java * Made class public * airsupply/src/java/com/seeburger/airsupply/po/manager/importprocessor/POCustomerImportCSV.java * airsupply/src/java/com/seeburger/airsupply/po/manager/importprocessor/POCustomerImportXML.java * airsupply/src/java/com/seeburger/airsupply/po/manager/importprocessor/POSupplierImportCSV.java * airsupply/src/java/com/seeburger/airsupply/po/manager/importprocessor/POSupplierImportXML.java * Misc * airsupply-base/src/java/com/seeburger/airsupply/alertmon/manager/SASAlertManagerEJB.java * airsupply/src/java/com/seeburger/airsupply/alertmon/control/ConcessionAlertOverviewScreen.java * airsupply/src/java/com/seeburger/airsupply/ncr/exchange/qualityreport/NcrQualityReportXmlHandler.java