Monitoring Copy-Paste Operations in AEM Toolbar | Community
Skip to main content
ryuushihou1990
May 16, 2025
Solved

Monitoring Copy-Paste Operations in AEM Toolbar

  • May 16, 2025
  • 1 reply
  • 615 views

Hello everyone,

I would like to ask for some advice regarding monitoring copy-paste operations in the AEM toolbar.
My goal is to detect when a new node is created via copy-paste and then remove the onTime property from that new node.

However, I keep encountering an error on the jcr:content node saying that it cannot be found.

From my research, it seems that when the node is copied, the operation is not fully synchronized yet.
But when I check in CRXDE after the copy, I can see the target node clearly.

I have attached my code for reference.

Best answer by ryuushihou1990

Hi @santoshsai,

Requesting you to pleases help @ryuushihou1990 with the follow up query. 


@supriya_savre @santoshsai 

Thank you for your patient support.

I've found the root cause of the issue.
The problem was that the system user used in the image did not have the necessary permissions.

After adding the correct path permissions, the code in Image  was able to successfully locate the copied node and remove the desired properties.

Thank you again for all your help. Much appreciated!

1 reply

SantoshSai
Community Advisor
Community Advisor
May 16, 2025

Hi @ryuushihou1990,

When AEM does a copy-paste via the Sites toolbar:

  • It first creates the node, triggering your listener.

  • The child nodes (like jcr:content) might not be fully available yet.

  • Your code immediately attempts to access the full structure, leading to errors.

1. Use a Delayed Job Instead of Immediate Action

Instead of modifying the node directly in the ResourceChangeListener, enqueue a delayed Job (Sling Job or Scheduler) that acts on the node after a few seconds, giving time for the copy to complete.

Example:
// In your listener:
jobManager.addJob("remove/onTime", 
    Collections.singletonMap("path", path));

Then create a Job Consumer to handle the property removal after a short delay.

2. Wrap Node Access in Retry Logic

If you prefer to stay within the listener, implement a retry with exponential backoff:

int retries = 3;
while (retries-- > 0) {
    if (session.nodeExists(path)) {
        Node node = session.getNode(path);
        if (node.hasProperty("onTime")) {
            node.getProperty("onTime").remove();
            session.save();
        }
        break;
    }
    Thread.sleep(500); // wait before retry
}

This is not the most elegant approach but may work for limited cases. Use with caution.

3. Target jcr:content Directly

In some scenarios, the copy-paste triggers on the top-level node (e.g., /content/site/en/page), but the onTime is inside jcr:content.

So if your goal is to remove the onTime from jcr:content, modify:

Node node = session.getNode(path + "/jcr:content");

But again, only after ensuring the node exists (via retry or delay).

Hope that helps!

Santosh Sai
ryuushihou1990
May 17, 2025

Hi @santoshsai 

Thank you very much for your detailed and thoughtful response.

I tried using the listener.png you provided to monitor the copy-paste operation, and I registered a delayed job(job.png ) to remove the onTime property. I also updated the target path to basePath + "/jcr:content".

However, after repackaging the bundle and performing the copy-paste operation again, I noticed from the log files that the job kept trying to find the jcr:content node, but it never seemed to be available.
In fact, I had previously tried a brute-force approach by looping indefinitely to wait for the node to appear, but even then, the target jcr:content node never showed up.

Supriya_Savre
May 20, 2025

Hi @santoshsai,

Requesting you to pleases help @ryuushihou1990 with the follow up query.