/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.jms.cacheflush.listener;
import java.beans.ExceptionListener;
import java.io.IOException;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hoteia.qalingo.core.jms.cacheflush.producer.CacheFlushMessageJms;
import org.hoteia.qalingo.core.mapper.XmlMapper;
import org.hoteia.qalingo.core.web.cache.util.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component(value = "cacheFlushQueueListener")
public class CacheFlushQueueListener implements MessageListener, ExceptionListener {
protected final Log logger = LogFactory.getLog(getClass());
@Autowired
private CacheService cacheService;
@Autowired
protected XmlMapper xmlMapper;
/**
* Implementation of <code>MessageListener</code>.
*/
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage tm = (TextMessage) message;
String valueJMSMessage = tm.getText();
if(StringUtils.isNotEmpty(valueJMSMessage)){
final CacheFlushMessageJms cacheFlushMessageJms = xmlMapper.getXmlMapper().readValue(valueJMSMessage, CacheFlushMessageJms.class);
cacheService.flushCacheEntity(cacheFlushMessageJms.getObjectClass(), cacheFlushMessageJms.getObjectId().toString());
if (logger.isDebugEnabled()) {
logger.debug("Processed message, value: " + valueJMSMessage);
}
} else {
logger.warn("Cache Flush: Jms Message is empty");
}
}
} catch (JMSException e) {
logger.error(e.getMessage(), e);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
@Override
public void exceptionThrown(Exception e) {
logger.debug("Exception on queue listener: " + e.getCause() + ":" + e.getLocalizedMessage());
}
}