/*
* Copyright 2015 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.registry.event.core.internal.delivery.jms;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.registry.event.core.notify.NotificationManager;
import org.wso2.carbon.registry.event.core.subscription.Subscription;
import org.wso2.carbon.registry.event.core.exception.EventBrokerException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import javax.jms.MessageListener;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.jms.JMSException;
import javax.xml.stream.XMLStreamException;
import java.io.ByteArrayInputStream;
import java.util.Enumeration;
public class JMSMessageListener implements MessageListener {
private Log log = LogFactory.getLog(JMSMessageListener.class);
private NotificationManager notificationManager;
private Subscription subscription;
public JMSMessageListener(NotificationManager notificationManager, Subscription subscription) {
this.notificationManager = notificationManager;
this.subscription = subscription;
}
public void renewSubscription(Subscription subscription){
this.subscription.setExpires(subscription.getExpires());
this.subscription.setProperties(subscription.getProperties());
}
public void onMessage(Message message) {
try {
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(this.subscription.getTenantId());
PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(this.subscription.getOwner());
PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
StAXOMBuilder stAXOMBuilder =
new StAXOMBuilder(new ByteArrayInputStream(
textMessage.getText().getBytes()));
org.wso2.carbon.registry.event.core.Message messageToSend =
new org.wso2.carbon.registry.event.core.Message();
messageToSend.setMessage(stAXOMBuilder.getDocumentElement());
// set the properties
Enumeration propertyNames = message.getPropertyNames();
String key = null;
while (propertyNames.hasMoreElements()){
key = (String) propertyNames.nextElement();
messageToSend.addProperty(key, message.getStringProperty(key));
}
this.notificationManager.sendNotification(messageToSend, this.subscription);
} else {
log.warn("Non text message received");
}
} catch (JMSException e) {
log.error("Can not read the text message ", e);
} catch (XMLStreamException e) {
log.error("Can not build the xml string", e);
} catch (EventBrokerException e) {
log.error("Can not send the notification ", e);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}
}
}