Java use-class getting called twice | Community
Skip to main content
bilal_ahmad
May 5, 2020
Solved

Java use-class getting called twice

  • May 5, 2020
  • 5 replies
  • 20535 views

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.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Theo_Pendle

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 😉 This would be a good candidate for an upgrade, you may find that it solves your problem!

However, sticking to WCMUse for now:

  1. If your activate() method is being called twice, the most likely reason is that there are two requests being made. How are you making the request to the model? For example, if you have a test page with a bunch of components on it and you are loading that page to test, is it possible that there are 2 components that use the CommonUtilUse model and therefore it is being called twice?
  2. Are you using CommonUtilUse.java anywhere in your Java code (even if you are not directly calling activate())? Becuase activate() is called automatically in some scenarios, so perhaps you are indirectly calling it via your SuperScriptUse.java class or something along those lines?

 

5 replies

ArpitVarshney
Community Advisor
Community Advisor
May 5, 2020

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

bilal_ahmad
May 8, 2020

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>

 

 

 

VeenaVikraman
Community Advisor
Community Advisor
May 5, 2020

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 ) ?

bilal_ahmad
May 8, 2020
Thank you so much Veena. for responding to my issue, also apologies for the delayed response.
Ankur_Khare
Community Advisor
Community Advisor
May 9, 2020

Check your sightly code .

You must be calling your model twice

Ankur_Khare
Community Advisor
Community Advisor
May 9, 2020

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.

bilal_ahmad
May 10, 2020
I haven't tried this - going to try and update here. Thanks ton!
Theo_Pendle
Theo_PendleAccepted solution
May 9, 2020

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 😉 This would be a good candidate for an upgrade, you may find that it solves your problem!

However, sticking to WCMUse for now:

  1. If your activate() method is being called twice, the most likely reason is that there are two requests being made. How are you making the request to the model? For example, if you have a test page with a bunch of components on it and you are loading that page to test, is it possible that there are 2 components that use the CommonUtilUse model and therefore it is being called twice?
  2. Are you using CommonUtilUse.java anywhere in your Java code (even if you are not directly calling activate())? Becuase activate() is called automatically in some scenarios, so perhaps you are indirectly calling it via your SuperScriptUse.java class or something along those lines?

 

bilal_ahmad
May 10, 2020

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.