meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sap_hybris_commerce:development_process:systemsetup_annotation_when_methods_run [2020/04/10 09:59] – created Antonio Robirosasap_hybris_commerce:development_process:systemsetup_annotation_when_methods_run [2020/04/10 14:03] (current) – Document the hybris classes Antonio Robirosa
Line 1: Line 1:
 ====== SystemSetup Annotation: When are the methods run? ====== ====== SystemSetup Annotation: When are the methods run? ======
  
-The SystemSetup annotation is used to run import data, synchronize catalogues, migrate CMS components and execute Java code **during every project or essential data creation step.**+The SystemSetup annotation is used to run import data, synchronize catalogues, migrate CMS components and execute Java code during **every** project or essential data creation step.
  
-In past version the essential and project data steps weren't run during the initialization of the junit tenant. This prevented the import of test data for the integration tests if you weren't using the [[https://github.com/arobirosa/areco-deployment-script-manager|Areco deployment script manager]] as patch system. To get an updated picture of the current situation, I ran a test on the latest SAP hybris versions and here are the results:+**In all hybris version up to 1905 the essential and project data steps aren't run during the initialization of the junit tenant.** This prevents the import of common test data for complex integration tests if you weren't using the [[https://github.com/arobirosa/areco-deployment-script-manager|Areco deployment script manager]] as patch system. To get an updated picture of the current situation, I ran a test on the latest SAP hybris version 1905 and here are the results are the same as with old versions:
  
-^SystemSetup.Process^INIT^^^UPDATE^^^ALL^^^ +^SystemSetup.Process^INIT^^^UPDATE^^^ALL^^^.^ 
-^^SystemSetup.Type^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ +^SystemSetup.Type^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^What Hybris impexes are imported?
-^ant initialize -Dtenant=master^ +^ant initialize -Dtenant=master|Called once with process INIT and type ESSENTIAL|Called once with process INIT and type PROJECT|Called twice with process INIT and type ESSENTIAL \\ and with process INIT and type PROJECT|No call|||Called once with process INIT and type ESSENTIAL|Called once with process INIT and type PROJECT|Called twice with process INIT and type ESSENTIAL \\ and with process INIT and type PROJECT|Project and essential scripts| 
-^ant initialize -Dtenant=junit^ +^ant initialize -Dtenant=junit|:!: No call|||||||||:!: None| 
-^ant yunitinit^ +^ant yunitinit|:!: No call|||||||||:!: None| 
-^ant updatesystem -Dtenant=master((with a JSON configuration to run the project data))^ +^ant updatesystem -Dtenant=master((with a JSON configuration to run the project data))|No call|||Called once with process UPDATE and type ESSENTIAL|Called once with process UPDATE and type PROJECT|Called twice with  process UPDATE and type ESSENTIAL and with process UPDATE and type PROJECT|Called once with process UPDATE and type ESSENTIAL|Called once with process UPDATE and type PROJECT|Called twice with process INIT and type ESSENTIAL and with process INIT and type PROJECT|Project and essential scripts| 
-^ant updatesystem -Dtenant=junit((with a JSON configuration to run the project data))+^ant updatesystem -Dtenant=junit((with a JSON configuration to run the project data))|:!: No call|||||||||:!: None| 
-^On HAC, initialize of the master tenant^ +^ant yunitupdate|:!: No call|||||||||:!: None|
-^On HAC, initialize of the master yunit^ +
-^On HAC, update running system of the master tenant^ +
-^On HAC, update running system of the master yunit^+
  
-===== Test description =====+When @SystemSetup(extension ArecosystemsetuptestConstants.EXTENSIONNAME), the field hybrisContext.getExtensionName() always contains the name of the current extension. \\ 
 +When @SystemSetup(extension "ALL_EXTENSIONS") is used, the methods annotated with @SystemSetup are called as above once or twice **per each hybris and custom extension**. Each time the field hybrisContext.getExtensionName() contains the name of a different extension.
  
-The class used for the test is annotated at class level with: +<WRAP center round important 60%> 
-<code> +Because the majority of the SAP hybris projects use Jenkins and **ant targets** to deploy, update system and initialization using HAC wasn't tested. 
-@SystemSetup(extension = "ALL_EXTENSIONS"+</WRAP> 
-public class AnnotationCallsTest {+===== Cause of this behaviour ===== 
 + 
 +The method de.hybris.ant.taskdefs.InitPlatformAntPerformableImpl#performImpl checks if the current tenant is named **junit** and runs an initialization without essential and project data. This also happens with the update system. Please see the code of UpdatePlatformAntPerformableImpl. 
 + 
 +===== Test description ===== 
 +I created a new extension based on the templa yempty and added the property **initialpassword.admin=nimda** to the local.properies. Then I created a {{ :sap_hybris_commerce:development_process:systemsetupannotationcallstest.java | class for the test}} and annotated at class level with: 
 +<code java
 +@SystemSetup(extension = ArecosystemsetuptestConstants.EXTENSIONNAME
 +public class SystemSetupAnnotationCallsTest {
 </code> </code>
 Each method contains the following code for all possible combinations of process and type: Each method contains the following code for all possible combinations of process and type:
-<code>+<code java>
 @SystemSetup(process = SystemSetup.Process.UPDATE, type = SystemSetup.Type.ESSENTIAL) @SystemSetup(process = SystemSetup.Process.UPDATE, type = SystemSetup.Type.ESSENTIAL)
-        public void logUpdateEssential(final SystemSetupContext hybrisContext) { +public void logUpdateEssential(final SystemSetupContext hybrisContext) { 
-                LOG.error(String.format("Called Update Essential with extension %s, process %s and type %s", hybrisContext.getExtensionName(), hybrisContext.getProcess(), hybrisContext.getType())); +  LOG.error(String.format("Called Update Essential with extension %s, process %s and type %s", hybrisContext.getExtensionName(), hybrisContext.getProcess(), hybrisContext.getType())); 
-        }+}
 </code> </code>
-ran all ant commands and process on HAC and I analysed the log afterwards: +<WRAP center round important 60%> 
-<code> +To make hybris call the methods, had to create a bean definition in the spring application context. Autowiring without the XML bean definition wasn't working. 
-ant clean all initialize -Dtenant=master | tee initializeMaster.log | grep AnnotationCallsTest+</WRAP> 
 +<code xml
 +    <bean id="systemSetupAnnotationCallsTest" class="org.areco.ecommerce.tests.systemsetup.setup.SystemSetupAnnotationCallsTest" />
 </code> </code>
 +
 +
 +I created a JSON configuration for the update running system which runs the create project data step: {{ :sap_hybris_commerce:development_process:updatesystemconfigfile.json | updatesystemconfigfile.json}} \\
 +I ran the following commands and I analysed the log afterwards:
 +<code bash>
 +rm -rf hybris/data/
 +ant clean all
 +ant initialize -Dtenant=master | tee initializeMaster.log | grep SystemSetupAnnotationCallsTest
 +ant initialize -Dtenant=junit | tee initializeJunit.log | grep SystemSetupAnnotationCallsTest
 +ant yunitinit | tee yunitinit.log | grep SystemSetupAnnotationCallsTest
 +ant updatesystem -Dtenant=master -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee updateMaster.log | grep SystemSetupAnnotationCallsTest
 +ant updatesystem -Dtenant=yunit -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee updateJunit.log | grep SystemSetupAnnotationCallsTest
 +ant yunitupdate -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee yunitUpdate.log | grep SystemSetupAnnotationCallsTest
 +</code>
 +
 +Source code: {{ :sap_hybris_commerce:development_process:systemsetupannotationcallstest.java | SystemSetupAnnotationCallsTest.java}} {{ :sap_hybris_commerce:development_process:updatesystemconfigfile.json | updatesystemconfigfile.json}}
  
 -- Based on SAP hybris 1905 -- Based on SAP hybris 1905