Flexible Search Query with JOIN Hybris Example - Hybris Interview question

Flexible Search is an API provided by Hybris to fetch results from Database . You can either use it on hac console or directly in java .

There are some Flexible Query examples which are widely used in Hybris Project .

1. Flexible Query in Hybris to fetch Products :


SELECT * FROM {Product}


We have to put the Model from which the results are required in {}


2. Flexible Query to fetch Products of a particular Catalog

For this type of query we have to use JOIN to as Catalog and Product are different Models in hybris so the data is stored in 2 different tables.


SELECT * FROM {Product AS p
    JOIN Catalog AS  catalog on {p:catalog} = {catalog:pk}}
WHERE 
    {catalog.id} ='electronicProductCatalog'


This above flexible search query will fetch all products of electronicProductCatalog for both Staged and Online Version.


3. Flexible Query in Hybris to fetch Products of a Catalog with Online version

For this type of query we have to use 2 JOIN to as Catalog, Product and CatalogVersion are different Models and  3 different tables.

SELECT * FROM {Product AS p
    JOIN Catalog AS  catalog on {p:catalog} = {catalog:pk}
    JOIN CatalogVersion As ver on {p:catalogVersion} = {ver:pk}
}
WHERE 
    {catalog.id} ='electronicProductCatalog' AND
    {ver.version} = 'Online'


4. Flexible Query in Hybris to fetch Products of a Catalog with Staged version


SELECT * FROM {Product AS p
    JOIN Catalog AS  catalog on {p:catalog} = {catalog:pk}
    JOIN CatalogVersion As ver on {p:catalogVersion} = {ver:pk}
}
WHERE 
    {catalog.id} ='electronicProductCatalog' AND
    {ver.version} = 'Staged'

ModelService.Refresh() method and Its uses - Hybris Interview question


The OOB Hybris Model Service provides a method, to refresh the model. Usually we use this method to refresh the data, before saving the data in database, using save method.
There might be conditions, where some other thread or operation would be updating the same model instance. By doing a refresh, we can be sure of not loosing those changes. This is of more importance, if we are going through a time consuming transaction like payment.
Also transaction like, stock update, may happen simultaneously from multiple users, so we should always refresh the model, before saving it.






Flexible Search Query with JOIN Hybris Example


Hybris Composite Cron Job

Composite Cron Job in Hybris - Hybris Interview question



Composite Cron Job : 

1. A composite cronJob is a composition of multiple cronjobs .

2. It means that a cronjob will call another job and also multiple cronjobs successively.

3. This phenomena is driven by CompositeCronJob and CompositeEntry.





How to make Extension as Template in Hybris - Hybris Interview question

1.Change in extensioninfo.xml file 

First add the property below in the extensioninfo.xml after core tag of  the extension which you want to use as a template.

Eg. We want to make electronicstore as template. Add he below property in extensioninfo.xml of  electronicstore.

<meta key=”extgen-template-extension” value=”true”/>


2. Create an extgen.properties file .

Create  a blank file named as extgen.properties parallel to project.properties file in your extension.

We will create an extgen.properties file in electronic store 

3. Modify extgen.properties file .

Modify extgen.properties file with below properties :

YEXTNAME_TOKEN=electronicsstore
YMODULE_TOKEN=electronic
YMODULE_PACKAGE_ROOT=store
YMODULE_CLASS_PREFIX=store
YPACKAGE_TOKEN=de.hybris.platform.electronicsstore
YMANAGER_TOKEN=ElectronicsstoreManager
YCLASSPREFIX_TOKEN=Electronicsstore
YGENERATED_TOKEN=Generated

4. Do Ant extgen .

Go to your platform directory .
Type setantenv.bat 
Type ant extgen .
You will see your extension in templates.

Create a new extension in Hybris - Hybris Interview question

To create an extension we will use ant extgen command and yempty template .

1. Go to platform directory .

2. Run setantenv.bat commad.

3. Run ant extgen

4. Extgen prompts you to enter extension name . Enter extension name and press Enter.

5. Enter package name as desired .

6. New Extension will be created in custom folder in your hybris /bin directory.

7. Add Extension name to localExtensions.xml.

8. Run ant clean all.

Difference between ant all and ant clean all in hybris - Hybris Interview question

ant clean all
ant all
 Delete all model classes create again.
Does not delete model classes but create new ones if required.
It checks whether config,log,data,temp etc folders are available inside hybris folder.
If this folder structure is not available then it creates the folder structure
It assumes folder structure is already exist
 If there is no build, It will create a build from scratch, if there is any build exist, It will delete and recreate it
If there is no build, it will create a build from scratch, if there is any build exist, it will modify it rather than recreating it.
Slower than ant all as it delete classes and folders and regenerate them.
Faster than ant clean all
Is advised to use only when there are changes in items.xml file
Is advised to use for every build.

How to run multiple hybris instance in one machine?

So many times you need you run more than 1 server of hybris on same machine , like if you want to run your customized code and OOTB Hybris Store as well . You just need to add the following properties in local.properties File.


Then do ant all and start the hybris server :

tomcat.http.port=7001
tomcat.ssl.port=7002
tomcat.ajp.port=7009
tomcat.jmx.port=7003
tomcat.jmx.server.port=7004

solrserver.instances.default.port=8986

tomcat.debugjavaoptions=-XXaltjvm=dcevm -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=6001,suspend=n


This will help you to run hybris server in debug mode as well on port 6001





How can you add values to a collection type attribute and Map from Impex in Hybris ?

1. For Collection type attribute you can use comma separated values which are to be inserted.

eg. INSERT_UPDATE UserGroup;uid[unique=true];groups(uid)[mode=append];readableLanguages(isocode);writeableLanguages(isocode);
;base-electronics-cmsmanagergroup;basecmsmanagergroup;ja,en,de,zh;ja,en,de,zh



Here , both readableLanguages and writeableLanguages are of type LanguageCollection .

2. Also you can use mode=append in header for Collection Type attribute .



3. For Map type attribute by default you have to use -> delimiter within key and value pair .

INSERT_UPDATE myProduct;myAttribute
;myKey->myValue

How to make cronjob run on some servers(in case of load balancer or cluster ) and but not on others?

This scenario can be achieved using Nodes concept in hybris.

1. First you need to define applicable nodes in local.properties using cluster.node.groups property such as


cluster.node.groups = backoffice,storefront .


2. Assign the cronjob to group of nodes by 2 ways :

 a) When you define the cronjob then use method .setNodeGroup("nameofnodegroup") like .setNodeGroup("storefront ").

b) Using Impex :


INSERT_UPDATE CronJob; code[unique=true];job(code);nodeGroup
;myCronJob;myJob;storefront


Whenever next time the cronjob is going to it will trigger on the nodeGroup defined .

Model service create method vs new operator - Hybris Interview question



ModelService is a Service provided by Hybris Out of the Box . It has many predefined methods such as create() , save () ,saveAll() .




When we try to create a new instances of an item type programmatically, there are two ways




1 . Using the Traditional new operator

2. or the hybris way, using the ModelService.create()




For Example

ProductModel product1 = new ProductModel();

ProductModel product2 = modelService.create(ProductModel.class);

The advantages of using model service method are below:
The model service create method will generate and assign the pk for product object.
The create method will initialize the default values, defined in items.xml for mandatory attributes.
While calling save all method, the object is already attached to context, and will be saved. While product1 needs to attach explicitly.



Flexible Search Query with JOIN Hybris Example


Hybris Composite Cron Job