/**
* Copyright (c) 2012 GFT Appverse, S.L., Sociedad Unipersonal.
*
* This Source Code Form is subject to the terms of the Appverse Public License
* Version 2.0 (“APL v2.0”). If a copy of the APL was not distributed with this
* file, You can obtain one at http://www.appverse.mobi/licenses/apl_v2.0.pdf. [^]
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the conditions of the AppVerse Public License v2.0
* are met.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. EXCEPT IN CASE OF WILLFUL MISCONDUCT OR GROSS NEGLIGENCE, IN NO EVENT
* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package org.appverse.web.framework.backend.messaging.services.integration.impl.live;
import javax.jms.JMSException;
import javax.jms.Message;
import org.appverse.web.framework.backend.api.helpers.log.AutowiredLogger;
import org.appverse.web.framework.backend.api.model.integration.AbstractIntegrationBean;
import org.appverse.web.framework.backend.messaging.services.integration.IJMSServiceConsumer;
import org.appverse.web.framework.backend.messaging.services.integration.IJMSServicePublisher;
import org.slf4j.Logger;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessagePostProcessor;
import org.springframework.jms.support.converter.MessageConverter;
/**
* Implementation to provide integration with JMS broker through JMSTemplate
*
* @param <T>
*/
public abstract class JMSSyncService<T extends AbstractIntegrationBean>
extends JMSService<T> implements IJMSServicePublisher<T>, IJMSServiceConsumer<T> {
@AutowiredLogger
private static Logger logger;
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServicePublisher#send(org.appverse.web.framework.backend.api.model.integration.AbstractIntegrationBean)
*/
@Override
public void send(final T dto) throws Exception {
this.getTemplatePublisher().convertAndSend(dto,
new MessagePostProcessor() {
@Override
public Message postProcessMessage(final Message message)
throws JMSException {
if (logger.isDebugEnabled())
{
logger.debug("***** SENDING MESSAGE ******");
traceMessage(message);
}
return message;
}
});
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServicePublisher#send(org.appverse.web.framework.backend.api.model.integration.AbstractIntegrationBean, org.appverse.web.framework.backend.api.model.integration.AbstractIntegrationBean)
*/
@Override
public void send(final T dto, final AbstractIntegrationBean header) throws Exception {
this.getTemplatePublisher().convertAndSend(dto,
new MessagePostProcessor() {
@Override
public Message postProcessMessage(final Message message)
throws JMSException {
// overwrite in Repositories
fillHeader(message, header);
if (logger.isDebugEnabled())
{
logger.debug("***** SENDING MESSAGE WITH HEADER******");
traceMessage(message);
}
return message;
}
});
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServicePublisher#fillHeader(javax.jms.Message, org.appverse.web.framework.backend.api.model.integration.AbstractIntegrationBean)
*/
@Override
public void fillHeader(final Message message, final AbstractIntegrationBean header)
throws JMSException
{
throw new UnsupportedOperationException(
"You must overwrite 'fillHeader(final Message message, final AbstractIntegrationBean header)' method");
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServiceConsumer#syncRetrieve()
*/
@Override
@SuppressWarnings("unchecked")
public T syncRetrieve() throws Exception
{
if (logger.isDebugEnabled())
{
Message msg = this.getTemplateConsumer().receive();
logger.debug("***** SYNC CONSUMING MESSAGE******");
traceMessage(msg);
MessageConverter mc = ((IJMSServiceConsumer<?>) this).getTemplateConsumer()
.getMessageConverter();
return (T) mc.fromMessage(msg);
}
else
return (T) ((IJMSServiceConsumer<?>) this).getTemplateConsumer()
.receiveAndConvert();
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServiceConsumer#syncRetrieve(java.lang.String)
*/
@Override
@SuppressWarnings("unchecked")
public T syncRetrieve(final String messageSelector) throws Exception
{
if (logger.isDebugEnabled())
{
Message msg = this.getTemplateConsumer().receive(
messageSelector);
logger.debug("***** SYNC CONSUMING MESSAGE - SELECTOR ******");
traceMessage(msg);
MessageConverter mc = ((IJMSServiceConsumer<?>) this).getTemplateConsumer()
.getMessageConverter();
return (T) mc.fromMessage(msg);
}
else
return (T) ((IJMSServiceConsumer<?>) this).getTemplateConsumer()
.receiveAndConvert(messageSelector);
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServicePublisher#getTemplatePublisher()
*/
@Override
public JmsTemplate getTemplatePublisher() {
throw new UnsupportedOperationException("You must implement 'getTemplatePublisher");
}
/* (non-Javadoc)
* @see org.appverse.web.framework.backend.messaging.services.integration.IJMSServiceConsumer#getTemplateConsumer()
*/
@Override
public JmsTemplate getTemplateConsumer() {
throw new UnsupportedOperationException("You must implement 'getTemplateConsumer");
}
}