Expand my Community achievements bar.

SOLVED

Question Regarding Session in Event Listener

Avatar

Former Community Member
Hi All,
 
I have a question regarding event listener. We have a event listener which listen to delete node event and perform some activity say "send email".
While code review i found this, although this code is working fine i am not convinced with the session being handled here :
   
@Activate protected void activate(ComponentContext context) { try{ final String path="/content/dam/"; Session session = repository.loginAdministrative(repository.getDefaultWorkspace()); observationManager = session.getWorkspace().getObservationManager(); observationManager.addEventListener(this, Event.PROPERTY_REMOVED, path, true, null, null, true); checkOutProperty = OsgiUtil.toString(context.getProperties() .get(ASSET_LOCK_PROPNAME_UPDATE), ASSET_LOCK_PROPNAME_DEFAULT); if (session != null && session.isLive()) { session.save(); } } catch (RepositoryException e) { if(LOG.isErrorEnabled()){ LOG.error("Error Occured in activate method of Property Removed Listener class:" + e.getMessage()); } }catch (Exception e) { if(LOG.isErrorEnabled()){ LOG.error("Error Occured in activate method of Property Removed Listener class:"+e.getMessage()); } } } @Deactivate protected void deactivate(ComponentContext componentContext) { try { if (observationManager != null) { observationManager.removeEventListener(this); } } catch (RepositoryException e) { if(LOG.isErrorEnabled()){ LOG.error("Error Occured " + e); } } catch (Exception e) { if(LOG.isErrorEnabled()){ LOG.error(e.getMessage()); } } }

 
Questions:
* Best practice would be to create session object private to this class and should be logout in deactivate method ?
* Once an event is added in Observation Manager...do we really need session object ?. I was expecting if we should logout from session there.

 

Regards,
D

1 Accepted Solution

Avatar

Correct answer by
Employee Advisor

Hi,

to actually use JCR observation the session, in which you register the listener, must be alive and active. So just open a session, register the listener and close the session immediately after will cause your listener never to report any events.

See [1] for an example.

kind regards,
Jörg

[1] https://cqdump.wordpress.com/2012/11/13/cq-coding-patterns-sling-vs-jcr-part-2/

View solution in original post

3 Replies

Avatar

Correct answer by
Employee Advisor

Hi,

to actually use JCR observation the session, in which you register the listener, must be alive and active. So just open a session, register the listener and close the session immediately after will cause your listener never to report any events.

See [1] for an example.

kind regards,
Jörg

[1] https://cqdump.wordpress.com/2012/11/13/cq-coding-patterns-sling-vs-jcr-part-2/

Avatar

Level 10

Best practice would be to logout in the activate method itself having finally block for the try block so that you dont have to wait till the deactivation of the component.

Avatar

Former Community Member

Thanks Jorg ! Your blogs on coding pattern JCR Vs Sling was very helpful.

I am not sure but any update or follow-up article on CRUD operation support withing Sling would be really great !!