My hybris development environment test

I am using my company mac pro 2015 for a lot of thing. So I need different environment look like C#, hybris, ABAP, etc. These environment needs service look like db. These service using my ram always. So I am using VM for environment which are not used often. I created VM for new hybris versions for testing (docker cannot pause / resume systems yet). I try some scenarios for my best hybris development environment.

VM: OS version Centos 7, Java 8 u162, MySQL 5.7.21 and hybris version 6.6.

Enviroment Compile time (ant clean all)
Hybris files in host shared with guest vm 21 minutes 9 seconds
Hybris files in guest vm 3 minutes 8 seconds
2 minutes 29 seconds
Hybris files in guest vm and shared with host (without nfs optimization)  5 minutes 44 seconds

 

Creating history for item

If you want create history for item look like backoffice, you can use below example.

public void updateConsignmentStatus(String userUid, ConsignmentModel consignment, ConsignmentStatus status) {
  Map<string, object=""> originals = new HashMap();
  originals.put(ConsignmentModel.STATUS, consignment.getStatus());

  consignment.setStatus(status);

  Map<string, object> news = new HashMap();
  news.put(ConsignmentModel.STATUS, consignment.getStatus());

  final SavedValues savedValues = JaloConnection.getInstance().logItemModification(consignment.getPk(), news, originals, false);
  savedValues.setUser(UserManager.getInstance().getUserByLogin(userUid));
  modelService.saveAll();
}

DB connection for DDL in groovy

DANGER!!!

In hybris hac, you cannot run DDL (data definition language) commands. You need unprotected connection to db. You can use below groovy example. Attention: DDL commands are dangerous!!!

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

def config = spring.getBean("configurationService").getConfiguration();

DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(config.getString("db.driver"));
dataSource.setUrl(config.getString("db.url"));
dataSource.setUsername(config.getString("db.username"));
dataSource.setPassword(config.getString("db.password"));
JdbcTemplate jdbc = new JdbcTemplate(dataSource)
jdbc.execute("ALTER TABLE MYTABLE ALTER (P_MYFIELD BIGINT)");

Using separate file for different class logging

Below example logging flexiblesearch class to separate file with time based trigger policy. Also we can add rollover strategy for removing old files.

log4j2.appender.FlexlogAppender.type=RollingFile log4j2.appender.FlexlogAppender.name=FlexlogAppender
log4j2.appender.FlexlogAppender.fileName=${HYBRIS_LOG_DIR}/Flexlog.log
log4j2.appender.FlexlogAppender.filePattern=${HYBRIS_LOG_DIR}/Flexlog.log-%d{yyyy-MM-dd}.log
log4j2.appender.FlexlogAppender.ImmediateFlush=true log4j2.appender.FlexlogAppender.layout.type=PatternLayout
log4j2.appender.FlexlogAppender.layout.pattern=%m%n log4j2.appender.FlexlogAppender.policies.type = Policies
log4j2.appender.FlexlogAppender.policies.time.type = TimeBasedTriggeringPolicy log4j2.appender.FlexlogAppender.policies.time.interval = 1000000
log4j2.appender.FlexlogAppender.policies.time.modulate = true log4j2.logger.flexible.name = de.hybris.platform.jalo.flexiblesearch
log4j2.logger.flexible.level = DEBUG log4j2.logger.flexible.appenderRef.stdout.ref = FlexlogAppender log4j2.logger.flexible.additivity = false

Installing SAP Netware ABAP 7.51 SP02 on CentOS 7 Minimal

You can find great documentation for installing SAP Netware ABAP 7.51 SP02 at Julie blog post. I didn’t use shared OS because of huge disk/ram usage.

Prerequest

Install your favorite text editor

Install nano, vim, etc with yum.

yum install nano
Enable ssh for root

You can open multiple terminal and make copy paste with ssh to your server.

nano /etc/ssh/sshd_config

Remove # for uncomment line “PermitRootLogin yes” or add it if missing.

service sshd restart
Disable firewall

You need to open a lot of port for SAP Netware in firewall. You can disable firewall instead of configuring it.

service firewalld stop
systemctl disable firewalld
Install uuidd package

SAP Netware using uuidd library for generating GUID, install it.

yum install uuidd

Install sch package

SAP Netware using sch command in installation step, install it.

yum install tcsh
Install vmware tools and shared folder

Install open-vm-tools.

yum install open-vm-tools

You can find vmware tools in VMWare Virtual Machine menu as Install VMware Tools. Then you can check /mnt folder for CD which including tools. Copy it to your temp.

cp VMwareTools-10.x.tar.gz /tmp
tar -zxvf VMwareTools-10.x.tar.gz

Install python for tools installer.

yum install python

Change directory to extracted folder then run tools installer.

phyton install vmware-install.pl

Installation

Start installation script with below arguments.

./install.sh -g -s

Known hybris strategies

StrategyAbstractInterfaceDescription
DefaultCommerceCloneSavedCartStrategy  Clone cart.
DefaultCloneAbstractOrderStrategy  Clone order.
DefaultCommerceAddToCartStrategyCommerceAddToCartStrategyAdding product to cart.
DefaultCommerceUpdateCartEntryStrategy    
DefaultCartValidationStrategy    
DefaultMultiCodeCouponRedemptionStrategy CouponRedemptionStrategy<>Single code coupon redemption.
DefaultSingleCodeCouponRedemptionStrategy CouponRedemptionStrategy<>Multi code coupon redemption.
DefaultCommercePlaceOrderStrategy    
CommerceStockLevelStatusStrategy    
AbstractFacetSearchStrategy   
KeyStrategyCache key strategy.
AbstractCheckoutFlowStrategy  
FindPaymentCostStrategy 
AbstractCancelDenialStrategy OrderCancelDenialStrategy 
  AutoLoginStrategy  
GUIDCookieStrategy  
DefaultCreateOrderFromCartStrategy      
DefaultCommerceCartMergingStrategy
AbstractCheckoutFlowStrategy 
TicketOrdersAssociationStrategy 
AbstractCheckoutFlowStrategy
DefaultRedirectStrategy
DefaultBaseStoreSelectorStrategy BaseStoreSelectorStrategy

Changing item attribute type in hybris

Some times you need attribute type change in hybris. Hybris as own ORM and it is not support updating attribute type. If you change attribute type you will get error like this:

de.hybris.platform.servicelayer.exceptions.ModelSavingException: <########## NewPropError ##########> value type mismatch in unlocalized property ‘myproperty’ of ‘myitem’ : expected ‘class java.lang.Integer’ but got ‘class java.lang.Long’

If you don’t want to adding new field than migrating data and removing old, you can use below procedure.

  • Change column type in DB. You cannot do this on hac because DDL disabled (solution added as related pot).
  • Update system in hac (Platform -> Update without Create essential data option).

Mount shared folder in VM

You can use below command for mount shared folder to VM guest. You need install vmware tools before use this.

/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other