Dear members,
I'm using AEM 6.4.4 and using wcm-use along with it. The issue is that my use-class activate() method is getting called twice. Anyone has faced this issue before? I tried debugging it but no luck how it's happening. Any help would be really appreciated.
Thanks,
Bilal.
Solved! Go to Solution.
Hi @bilal_ahmad,
My first input for this is probably not the answer you're looking for, but... you should think about switching from WCMUse to Sling Models. They allow for more features, are easier to use and are the current best practice for AEM component models. They are better documented and these days I think most people are more used to Sling Models so you're likely to get more and better answers if you ask a question
However, sticking to WCMUse for now:
Hi @bilal_ahmad
There must be issue in your custom code as there is no such issue identified in AEM OOB.
You need to debug your code or share your code(HTL+Java) sample for better understanding.
Regards,
Arpit
Thank you Arpit, for your response. I tried debugging it but the only clue I got is that my activate() method got called twice
Here are my files for your reference:
<sly data-sly-use.commonutilobj="${'com.mysite.aem.core.use.CommonUtilUse'}"/>
<div id="${commonutilobj.componentId}" data-tracking-event-label="${commonutilobj.componentLabel}" class="jumbotron ${!properties.backgroundColor ? '': '{0}{1}' @format=[properties.backgroundColor,'-bg']} ${properties.paddingTop} ${properties.paddingBottom} ${properties.alwaysShowImg ? 'alwaysImg' : ''} ${!properties.fileReferencebckgroundimage ? '' : '{0}{1}{2}' @ format=['backgroundImg-',properties.horizontalAlign, properties.verticalAlign]} ${properties.alignment}" style="background-image: url('${properties.fileReferencebckgroundimage @ context='uri'}')">
<div class="wrapper">
<div class="row" data-sly-test="${properties.H3Title || properties.H5Eyebrow || properties.leadPara}">
<div class="col-md-8 ${properties.alignment=='text-center'? 'mx-auto':''}">
<h5 data-sly-test="${properties.H5Eyebrow}" class="alt ${properties.H5EyebrowColor}">${properties.H5Eyebrow ='unsafe'}</h5>
<h3 data-sly-test="${properties.H3Title}" class="${properties.H3TitleColor}"
data-sly-use.supuse="${'com.mysite.aem.core.components.use.SuperScriptUse' @ param=properties.H3Title}">${supuse.highlight ='unsafe'}</h3>
<p data-sly-test="${properties.leadPara}" class="lead2 ${properties.leadParaColor}">${properties.leadPara ='unsafe'}</p>
</div>
</div>
</div>
</div>
Views
Replies
Total Likes
Hi @bilal_ahmad
I don't see any reason why your activate method is calling twice.
You are using two wcmuse classes in HTL. Can you clarify which one's activate method is getting called twice? and also make sure that in your java code you're not calling activate method manually from another method.
Regards,
Arpit
Views
Replies
Total Likes
Views
Replies
Total Likes
@bilal_ahmad As you already mentioned that it is only happening for CommonUtilUse class and not for the other one which confirms that there is an issue in your custom code, not an issue AEM known issue.
Whatever code you have shared there is no such code that confirms that it is getting called twice. You need to check and debug your whole code to identify the issue.
Regards,
Arpit
Views
Replies
Total Likes
Thank you @ArpitVarshney, but CommonUtilUse is called only once from this component on this html. I have created a page where there's only one component, this one and then i'm seeing it getting called twice. I have, however other components which use the same java class but if I include them on my page, number of calls further increase in multiple of 2.
Views
Replies
Total Likes
Can you give a sample of the code how you are invoking the class and just a skeleton of your class (remove any main business logic ) ?
Views
Replies
Total Likes
Thank you so much Veena. for responding to my issue, also apologies for the delayed response. I'll attach the files here:
<sly data-sly-use.commonutilobj="${'com.mysite.aem.core.use.CommonUtilUse'}"/>
<div id="${commonutilobj.componentId}" data-tracking-event-label="${commonutilobj.componentLabel}" class="jumbotron ${!properties.backgroundColor ? '': '{0}{1}' @format=[properties.backgroundColor,'-bg']} ${properties.paddingTop} ${properties.paddingBottom} ${properties.alwaysShowImg ? 'alwaysImg' : ''} ${!properties.fileReferencebckgroundimage ? '' : '{0}{1}{2}' @ format=['backgroundImg-',properties.horizontalAlign, properties.verticalAlign]} ${properties.alignment}" style="background-image: url('${properties.fileReferencebckgroundimage @ context='uri'}')">
<div class="wrapper">
<div class="row" data-sly-test="${properties.H3Title || properties.H5Eyebrow || properties.leadPara}">
<div class="col-md-8 ${properties.alignment=='text-center'? 'mx-auto':''}">
<h5 data-sly-test="${properties.H5Eyebrow}" class="alt ${properties.H5EyebrowColor}">${properties.H5Eyebrow ='unsafe'}</h5>
<h3 data-sly-test="${properties.H3Title}" class="${properties.H3TitleColor}"
data-sly-use.supuse="${'com.mysite.aem.core.components.use.SuperScriptUse' @ param=properties.H3Title}">${supuse.highlight ='unsafe'}</h3>
<p data-sly-test="${properties.leadPara}" class="lead2 ${properties.leadParaColor}">${properties.leadPara ='unsafe'}</p>
</div>
</div>
</div>
</div>
Views
Replies
Total Likes
Views
Replies
Total Likes
Thanks for the response, Veena_07
Here's how I found out - I have created a page with only one component(this one) on it. I start my AEM instance in debug mode and placed a breakpoint at activate() method. when I refresh the page, the control comes to the activate method, it executes, then it gets called again and gets processed. Many Thanks, Bilal.
Views
Replies
Total Likes
Check your sightly code .
You must be calling your model twice
You can try one thing change the name of your model.
And update the same in your sightly code and see.
In this way you will be able to confirm its getting called from somewhere else inbyour code.
Views
Replies
Total Likes
Hi @bilal_ahmad,
My first input for this is probably not the answer you're looking for, but... you should think about switching from WCMUse to Sling Models. They allow for more features, are easier to use and are the current best practice for AEM component models. They are better documented and these days I think most people are more used to Sling Models so you're likely to get more and better answers if you ask a question
However, sticking to WCMUse for now:
wow! @Theo_Pendle such a detailed answer :). thank you for your time and attention at this. Well, I agree to you that I(or rather we, the development team) should migrate our code and start using latest practices(sling model in this case) I'd say that we are already on that path, but migrating slowly from old practices to the new ones.
Now, for your raised points,
1. I'm having a page where only one component which uses this class is present, still two calls to activate method.
2. I'm not referring CommonUtilUse.java in another java class so that there might be a possibility that it's activate() is getting called anyway.
I appreciate your explanation, though. Thanks, Bilal.
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies