meta data for this page
  •  

This is an old revision of the document!


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.

In past versions 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 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:

SystemSetup.ProcessINITUPDATEALL.
SystemSetup.TypeESSENTIALPROJECTALLESSENTIALPROJECTALLESSENTIALPROJECTALLWhat Hybris impexes are imported?
ant initialize -Dtenant=masterCalled once with process INIT and type ESSENTIAL per extensionCalled once with process INIT and type PROJECT per extensionCalled twice with process INIT and type ESSENTIAL
and with process INIT and type PROJECT per extension
No callCalled once with process INIT and type ESSENTIAL per extensionCalled once with process INIT and type PROJECT per extensionCalled twice with process INIT and type ESSENTIAL
and with process INIT and type PROJECT per extension
Project and essential scripts
ant initialize -Dtenant=junitNo call:!: None
ant yunitinitNo call:!: None
ant updatesystem -Dtenant=master1)No callCalled once with process UPDATE and type ESSENTIAL per extensionCalled once with process UPDATE and type PROJECT per extensionCalled twice with process UPDATE and type ESSENTIAL and with process UPDATE and type PROJECT per extensionCalled once with process UPDATE and type ESSENTIAL per extensionCalled once with process UPDATE and type PROJECT per extensionCalled twice with process INIT and type ESSENTIAL and with process INIT and type PROJECT per extensionProject and essential scripts
ant updatesystem -Dtenant=junit2)123456789

When @SystemSetup(extension = ArecosystemsetuptestConstants.EXTENSIONNAME), the field hybrisContext.getExtensionName() always contains the name of the current extension.

Because most deployment process use Jenkins and ant targets, update system and initialization using HAC wasn't tested.

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 create a class for the test and annotated at class level with:

@SystemSetup(extension = "ALL_EXTENSIONS")
public class SystemSetupAnnotationCallsTest {

Each method contains the following code for all possible combinations of process and type:

@SystemSetup(process = SystemSetup.Process.UPDATE, type = SystemSetup.Type.ESSENTIAL)
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()));
}

To make hybris call the methods, I had to create a bean definition in the spring application context. Autowiring without the XML bean definition wasn't working.

I ran all ant commands and process on HAC and I analysed the log afterwards:

ant initialize -Dtenant=master | tee initializeMaster.log | grep SystemSetupAnnotationCallsTest

– Based on SAP hybris 1905

1) , 2)
with a JSON configuration to run the project data

Discussion

Enter your comment. Wiki syntax is allowed: