Guide - 7.6 Migration of a PrimeTech Based Storefront

1 Introduction

This documentation describes the necessary migration steps to get from an Intershop 7.5 PrimeTech (app_sf_webshop) based storefront to the same storefront on Intershop 7.6. After these steps the storefront should look and behave as before while running on top of Intershop 7.6.

The described migration steps will not result in a Responsive Starter Store storefront. Such steps are described in the Guide - 7.6 Migration to Responsive Starter Store. Nevertheless, the steps of this guide are the preliminary work for any attempt to migrate to the Responsive Starter Store storefront.

2 Steps

2.1 Migrate Cartridges

In Intershop 7.6 the cartridges of the business platform have been moved to different groups. Instead of"com.intershop" different groups are used. So the dependencies referenced in the projectcartridgesbuild.gradle files need to be changed accordingly. Furthermore, some cartridges are removed, e.g., tools, so these references need to be removed.

The document Guide - 7.6 Build Changes describes a task that can be used to do these group changes automatically.

Group change examples for selected cartridges:

cartridgegroup in 7.5group in 7.6
corecom.intershopcom.intershop.platform
ismlcom.intershopcom.intershop.platform
xcscom.intershopcom.intershop.business
bc_orderprocesscom.intershopcom.intershop.business
sld_ch_sf_basecom.intershopcom.intershop.business

2.2 Migrate Component Set

To migrate a component set to Intershop 7.6 it is needed to:

  1. Update the Gradle Tools of the component set to version 2.7.0.
    This is done in thegradle.properties of the component set.

    gradle.properties
    filter.com.intershop.build.set.cartridge-plugins=2.7.0
  2. Change the distributionUrl of the Gradle wrapper to the new versions URL as well in /gradle/wrapper/gradle-wrapper.properties.
    The URL below is just an example!

    /gradle/wrapper/gradle-wrapper.properties
    distributionUrl=http\://nexus/nexus/content/repositories/distributions/gradle-dist/ish_gradle_2.7/1.8.0.0/ish_gradle_2.7-1.8.0.0-bin.zip 
  3. In addition the assembly filter needs to be updated in the thegradle.properties file.
    Theintershop7 assembly no longer exists as an assembly that projects can be build upon. Instead commerce_management_b2c or commerce_management_b2x has to be used together with the current version number.

    gradle.properties
    filter.com.intershop.assembly.commerce_management_b2c = 7.6.0.0

    References tocom.intershop.services.set.f_b2b_module should be removed since this is no longer available with 7.6. If you're looking for b2b functionality, that can be found together with commerce_management_b2x described in a later chapter.

  4. It might be a good practice to increment the version of the migrated component set.

    gradle.properties
    version = 2.0.0.0
  5. The build.gradle of the component set needs some migration changes too.
    The Java version needs to be incremented to version 1.8.

    build.gradle
        project.plugins.withType(JavaBasePlugin) {
            sourceCompatibility = 1.8
            targetCompatibility = 1.8
        }
  6. Additional dependencies need to be declared.

    build.gradle
        dependencies {
            // required for isml2classMain
            compile  'org.slf4j:slf4j-api'
            compile 'ch.qos.logback:logback-core'
            compile 'org.apache.tomcat:tomcat-el-api'
        }
  7. Once all these changes have been applied the component set needs to be published.

    cd <COMPONENTSET>
    gradlew publish

    If this does not result in "BUILD SUCCESSFUL" additional migration changes are needed according to the given failure messages.

2.3 Migrate Assembly

The migration of the projects assembly can be done after migrating and successfully publishing the component set.

To migrate the assembly to Intershop 7.6 it is needed to:

  1. Update the Gradle Tools of the assembly to version 2.7.0.
    This is done in thegradle.properties of the assembly.

    gradle.properties
    filter.com.intershop.build.set.cartridge-plugins = 2.7.0
    filter.com.intershop.build.set.extension-plugins = 2.7.0
    version.com.intershop.deployment-bootstrap = 2.7.0
  2. Change the distributionUrl of the Gradle wrapper to the new versions URL as well in /gradle/wrapper/gradle-wrapper.properties.
    The URL below is just an example!

    /gradle/wrapper/gradle-wrapper.properties
    distributionUrl=http\://nexus/nexus/content/repositories/distributions/gradle-dist/ish_gradle_2.7/1.8.0.0/ish_gradle_2.7-1.8.0.0-bin.zip 
  3. Because of the changed delivery of the storefront functionality in Intershop 7.6, it is necessary to adjust the configuration of the project assembly in build.gradle.
    First it is necessary to change to one of the new base assemblies of Intershop 7.6 (commerce_management_b2c or commerce_management_b2x). The intershop7 or primtech assemblies are not intended to be a projects base assembly.

    build.gradle
        inheritFrom('com.intershop.assembly:commerce_management_b2c') {
            includeArtifacts type:['deploy-settings-gradle','deploy-gradle']
        }
  4. Since the storefront cartridges are no longer part of a projects base assembly (commerce_management_b2c or commerce_management_b2x), as it has been with the intershop7 assembly of Intershop 7.5, it is needed to be explicitly add them to the projects assembly. This is done in the build.gradle where the storefront cartridges are added to the assemblies cartridge list.

    build.gradle
        cartridges {
            def primetechCartridges = [
                'app_sf_webshop',
                'app_sf_webshop_cm',
                'app_sf_webshop_b2c',
                'app_sf_webshop_smb',
                'as_primetech'
            ]
            include(*(primetechCartridges.collect {"com.intershop.primetech:$it"}), in:[development, test, production])
            
            def projectCartridges = [
                'my_cartridge'
            ]
            include (*(projectCartridges.collect {"com.example.foo:$it"}), in:[development, test, production])
            
            def initCartridges = [
                'my_init'
            ]
            include (*(initCartridges.collect {"com.example.foo:$it"}), in: init)
            
            order = listFromAssembly('com.intershop.assembly:commerce_management_b2c') + primetechCartridges + projectCartridges + initCartridges
        }
  5. TheassemblyBuild|database part of build.gradle needs to be adapted too. This part configures the partial DBinit that is used when runninggradlew :dbinit. It configures the base database dump that is imported first (theinherit part) and theinitCartridges that will prepared afterwards. It is important to include at this point all the cartridges that are configured on top of the base assembly that include dbinit preparer. In the current example this means thatapp_sf_webshop needs to be added here too since it is no longer prepared with the base assembly. In addition the project specific cartridges with dbinit preparers need to be listed here in the correct order.

    build.gradle
    assemblyBuild {
        database {
            inherit('com.intershop.assembly:commerce_management_b2c')
            initCartridges = [
                'app_sf_webshop',
                'my_cartridge', // if it contains dbinit preparer
                'my_init'
            ]
        }
    }
  6. The following section inbuild.gradle is needed:

    build.gradle
    configurations.all {
        exclude group: 'asm', module: 'asm'
    }

    to prevent a failure when publishing.

    Error message
    Execution failed for task ':generateDescriptorFileForBuildAssemblyPublication'.
    > Could not apply withXml() to Ivy module descriptor
       > Some modules could not be sorted because they share a common unqualified name:
            [asm:asm:3.1, org.ow2.asm:asm:5.0.3]
  7. In addition to the configuration changes in the project assemblies build.gradle the versions of depending assemblies/components need to be updated in the thegradle.properties file. Thecommerce_management_b2c orcommerce_management_b2x needs to be set as version. Assembly primetech-b2c orprimetech-b2x needs to be used as filter so the referenced storefront cartridges (see build.gradle) can be found. The projects own component set needs to be listed too (example.foo.set.componentset).

    gradle.properties
    # dependency versions
    version.com.intershop.assembly.commerce_management_b2c = 7.6.0.0
    filter.com.intershop.primetech.primetech-b2c = 10.0.1
    <filter.com.example.foo.set.componentset=2.0.0.0%suffix%>

    References tocom.intershop.services.set.f_b2b_module should be removed since this is no longer available with 7.6. If you're looking for b2b functionality, that can be found together with commerce_management_b2x described in a later chapter.

  8. It might be good practice to increment the version of the migrated assembly.

    gradle.properties
    version = 2.0.0.0
  9. Once all these changes have been applied, publish the assembly.

    cd <ASSEMBLY>
    gradlew publish

    If this does not result in "BUILD SUCCESSFUL" additional migration changes are needed according to the given failure messages.

  10. After a successful publishing, deploy the assembly.

    gradlew deployServer

Possible failures in the deployment like:

Error message
Caused by: com.intershop.deploy.index.DuplicateResourceException: Task :my_demo:deployShareFiles: Resource 'D:\DEV_MIGRATION\server\share\system\config\cluster\de_DE.properties' already defined for Task :core:deployShareFiles

might result from moved files within the server or storefront cartridges and need to be fixed in the projects cartridges until the deployment finishes successful.

2.4 DBMigrate

Once the migrated server is deployed successfully:

  1. Migrate the data in the database.
    Call dbmigrate to achieve this

    dbmigrate -classic

This should run without any problems to get to an updated server with Intershop 7.6 as its base.

Opening a storefront URL should result in the same rendering as before with the Intershop 7.5 base.


3 B2B Differences

While the examples of the above sections are based on a B2C storefront setup, this section will list the differences regarding a B2B storefront with Intershop 7.6.

With Intershop 7.6 the B2B functionality is no longer located in the B2B Extension Module but directly integrated into the B2B enabled commerce_management_b2x assembly. Therefore component set com.intershop.services.set.f_b2b_module is no longer available with 7.6 and cannot be used anymore.

3.1 Component Set

  1. Update the B2B the assembly filter in thegradle.properties file of the component set to reference commerce_management_b2x.

    gradle.properties
    filter.com.intershop.assembly.commerce_management_b2x = 7.6.0.0

3.2 Assembly

  1. Adjust the base assembly of thebuild.gradle of the assembly. The new base assembly of Intershop 7.6 B2B is commerce_management_b2x.

    build.gradle
        inheritFrom('com.intershop.assembly:commerce_management_b2x') {
            includeArtifacts type:['deploy-settings-gradle','deploy-gradle']
        }
  2. Also adjust the list of referenced primetech cartridges in build.gradle.

    build.gradle
        cartridges {
            def primetechCartridges = [
                'app_sf_webshop',
                'app_sf_webshop_b2c',
                'app_sf_webshop_smb',
                'app_sf_webshop_b2b',
                'app_sf_webshop_cm',
                'app_b2b_cm',
                'as_primetech',
                'as_primetech_b2b'
            ]
            include(*(primetechCartridges.collect {"com.intershop.primetech:$it"}), in:[development, test, production])
            
            ...
    
            order = listFromAssembly('com.intershop.assembly:commerce_management_b2x') + primetechCartridges + projectCartridges + initCartridges
     }
  3. And the assemblyBuild|database|inherit part of the build.gradle needs to be adapted too.

    build.gradle
    assemblyBuild {
        database {
            inherit('com.intershop.assembly:commerce_management_b2x')
            initCartridges = [
                'app_sf_webshop',
                'my_cartridge', // if it contains dbinit preparer
                'my_init'
            ]
        }
    }
  4. Update the version and filter settings in the assemblies gradle.properties file.

    gradle.properties
    # dependency versions
    version.com.intershop.assembly.commerce_management_b2x = 7.6.0.0
    filter.com.intershop.primetech.primetech-b2x = 10.0.1
    

Disclaimer

The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Web site, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.

Customer Support
Knowledge Base
Product Resources
Support Tickets