У меня вопрос относительно прослушивателя событий. У нас есть прослушиватель событий, который прослушивает событие удаления узла и выполняет некоторые действия, например, «отправить электронное письмо».
Во время проверки кода я обнаружил это, хотя этот код работает нормально, я не уверен, что сеанс обрабатывается здесь:
@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());
}
}
}
Вопросы:
- Лучшей практикой было бы создать объект сеанса, закрытый для этого класса, и должен ли он выйти из системы в методе деактивации?
- Когда событие добавлено в Observation Manager, действительно ли нам нужен объект сеанса? Я ожидал, что мы должны выйти из сеанса там.