org.apache.sling.event.impl.jobs.JobManagerImpl Discarding job - properties must be serializable: job/topic | Community
Skip to main content
Lucas_Reyes
New Participant
June 24, 2023
Solved

org.apache.sling.event.impl.jobs.JobManagerImpl Discarding job - properties must be serializable: job/topic

  • June 24, 2023
  • 3 replies
  • 1684 views

Hello,

 

I am getting an exception when processing DamEvent events on my Job manager that implements EventHandler. I am using code guidelines from  references below. My code works fine when processing PageEvent but it does not process the job for DamEvent.

 
public static final String JOB_TOPIC = "aem/solr/indexing/job";
final Map<String, Object> payload = new HashMap<String, Object>();
DamEvent damEvent = DamEvent.fromEvent(event);
payload.put("damEvent", damEvent);
jobManager.addJob(JOB_TOPIC, payload); 
 
** It works when using PageEvent pageEvent = PageEvent.fromEvent(event);
 
In the error log I see this exception on DamEvent events:

the 23.06.2023 16:43:12.938 *WARN* [EventAdminThread #20] org.apache.sling.event.impl.jobs.JobManagerImpl Discarding job - properties must be serializable: aem/solr/indexing/job : {damEvent=com.day.cq.dam.api.DamEvent@733fc832}

 

I see this note in the Sling documentation which I don't quite understand: "The job topic follows the conventions for the topic of an OSGi event. All objects in the payload must be serializable and publically available (exported by a bundle). This is required as the job is persisted and unmarshalled before processing.

Also, I see there is a checkJob in the API (https://github.com/apache/sling-org-apache-sling-event/blob/master/src/main/java/org/apache/sling/event/impl/jobs/Utility.java) which describes the exception I am getting. 

 

Is this a bug? I am working on AEM 6.5.15.0 

 

References:

https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html

https://sling.apache.org/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html

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 DPrakashRaj

By default objects on aem are not serialized and your payload need to be serialized as explained on https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html

you need to deserialized your payload object(damevent)as explained https://helpx.adobe.com/experience-manager/kb/deserialization-not-allowed-error.html

 

https://www.linkedin.com/pulse/aem-sling-jobs-processed-nurbek-umirov

3 replies

Lucas_Reyes
New Participant
June 26, 2023

Thank you for your replies DPrakashRaj and Tanika02.

 

I was missing the fact that DamEvent does not implement Serializable, but DamEvent.Type does. So a little bit of refactoring fixed my issue while sending the payload:

DamEvent damEvent = DamEvent.fromEvent(event);
payload.put("eventType"damEvent.getType());
payload.put("assetPath"damEvent.getAssetPath());
 
Thank you! 
Tanika02
New Participant
June 26, 2023

Hello @lucas_reyes - 

 

As per the Apache Sling documentation

 

All objects in the payload of a job must be serializable. This is because the job is persisted and unmarshalled before processing. Serialization allows the objects to be converted into a format that can be stored and reconstructed later.

 

Issue : You are trying to add it directly to the payload using payload.put("damEvent", damEvent);. However, the DamEvent class might not implement the Serializable interface, causing the serialization error.

 

 

import java.io.Serializable; public class CustomDamEventData implements Serializable { // Define necessary fields to hold the extracted information from DamEvent private String eventId; private String eventPath; // Constructors, getters, and setters for the fields // ... @Override public String toString() { return "CustomDamEventData{" + "eventId='" + eventId + '\'' + ", eventPath='" + eventPath + '\'' + '}'; } }

 

 

 

DPrakashRaj
DPrakashRajAccepted solution
New Participant
June 24, 2023

By default objects on aem are not serialized and your payload need to be serialized as explained on https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html

you need to deserialized your payload object(damevent)as explained https://helpx.adobe.com/experience-manager/kb/deserialization-not-allowed-error.html

 

https://www.linkedin.com/pulse/aem-sling-jobs-processed-nurbek-umirov