All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.quartz.jobs.ee.jms.SendTopicMessageJob Maven / Gradle / Ivy

/* 
 * Copyright 2004-2009 Terracotta, Inc. 
 * 
 * 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.quartz.jobs.ee.jms;

import javax.jms.Message;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 

* A Job that sends a javax.jms.Message to a * javax.jms.Topic. This class is for older JMS. If you are using * JMS 1.1, you should use {@link SendDestinationMessageJob} instead. * *

* The following properties are expected to be provided in the * JobDataMap: * *

    *
  • JMS_CONNECTION_FACTORY_JNDI - The JNDI name of the JMS * Connection Factory.
  • *
  • JMS_DESTINATION_JNDI - The JNDI name of the JMS * destination.
  • *
  • JMS_USE_TXN - Whether or not to use a transacted * javax.jms.Session.
  • *
  • JMS_ACK_MODE - The acknowledgment mode for the * javax.jms.Session.
  • *
  • JMS_MSG_FACTORY_CLASS_NAME - The implementation class * name for the JmsMessageFactory.
  • *
* *

* The following properties are optional * *

    *
  • JMS_USER - The JMS user for secure destinations. *
  • JMS_PASSWORD - The JMS password for secure destinations. *
* *

* The following properties can be used for JNDI support: * *

    *
  • INITIAL_CONTEXT_FACTORY - The java.naming.factory.initial * setting for JNDI. *
  • PROVIDER_URL - The java.naming.provider.url for JNDI. *
* * @see JmsMessageFactory * * @author Fernando Ribeiro * @author Weston M. Price */ public final class SendTopicMessageJob implements Job { public void execute(final JobExecutionContext jobCtx) throws JobExecutionException { TopicConnection conn = null; TopicSession sess = null; TopicPublisher publisher = null; try { final JobDataMap dataMap = jobCtx.getMergedJobDataMap(); final Context namingCtx = JmsHelper.getInitialContext(dataMap); final TopicConnectionFactory connFactory = (TopicConnectionFactory) namingCtx .lookup(dataMap .getString(JmsHelper.JMS_CONNECTION_FACTORY_JNDI)); if (!JmsHelper.isDestinationSecure(dataMap)) { conn = connFactory.createTopicConnection(); } else { final String user = dataMap.getString(JmsHelper.JMS_USER); final String password = dataMap .getString(JmsHelper.JMS_PASSWORD); conn = connFactory.createTopicConnection(user, password); } final boolean useTransaction = JmsHelper.useTransaction(dataMap); final int ackMode = dataMap.getInt(JmsHelper.JMS_ACK_MODE); sess = conn.createTopicSession(useTransaction, ackMode); final Topic topic = (Topic) namingCtx.lookup(dataMap .getString(JmsHelper.JMS_DESTINATION_JNDI)); publisher = sess.createPublisher(topic); final JmsMessageFactory messageFactory = JmsHelper .getMessageFactory(dataMap .getString(JmsHelper.JMS_MSG_FACTORY_CLASS_NAME)); final Message msg = messageFactory.createMessage(dataMap, sess); publisher.publish(msg); } catch (final Exception e) { throw new JobExecutionException(e); } finally { JmsHelper.closeResource(publisher); JmsHelper.closeResource(sess); JmsHelper.closeResource(conn); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy