/*
* Copyright 2001-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 java.lang.reflect.Method;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.quartz.JobDataMap;
/**
* Utility class that aids in the processing of JMS based jobs and sending of
* <code>javax.jms.Message</code>
*
* @author Fernando Ribeiro
* @author Weston M. Price
*/
public final class JmsHelper {
public static final String CREDENTIALS = "java.naming.security.credentials";
public static final String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial";
public static final String JMS_ACK_MODE = "jms.acknowledge";
public static final String JMS_CONNECTION_FACTORY_JNDI = "jms.connection.factory";
public static final String JMS_DESTINATION_JNDI = "jms.destination";
public static final String JMS_MSG_FACTORY_CLASS_NAME = "jms.message.factory.class.name";
public static final String JMS_PASSWORD = "jms.password";
public static final String JMS_USE_TXN = "jms.use.transaction";
public static final String JMS_USER = "jms.user";
public static final String PRINCIPAL = "java.naming.security.principal";
public static final String PROVIDER_URL = "java.naming.provider.url";
public static void closeResource(final Object resource) {
if (resource == null)
return;
try {
final Method m = resource.getClass().getMethod("close",
new Class[0]);
m.invoke(resource, new Object[0]);
} catch (final Exception e) {
}
}
public static InitialContext getInitialContext(final JobDataMap dataMap)
throws NamingException {
final Hashtable<String, String> params = new Hashtable<String, String>(4);
final String initialContextFactory = dataMap
.getString(INITIAL_CONTEXT_FACTORY);
if (initialContextFactory != null)
params.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
final String providerUrl = dataMap.getString(PROVIDER_URL);
if (providerUrl != null)
params.put(Context.PROVIDER_URL, providerUrl);
final String principal = dataMap.getString(PRINCIPAL);
if (principal != null)
params.put(Context.SECURITY_PRINCIPAL, principal);
final String credentials = dataMap.getString(CREDENTIALS);
if (credentials != null)
params.put(Context.SECURITY_CREDENTIALS, credentials);
if (params.size() == 0)
return new InitialContext();
else
return new InitialContext(params);
}
public static JmsMessageFactory getMessageFactory(final String name)
throws JmsJobException {
try {
final Class<?> cls = Class.forName(name);
final JmsMessageFactory factory = (JmsMessageFactory) cls
.newInstance();
return factory;
} catch (final Exception e) {
throw new JmsJobException(e.getMessage(), e);
}
}
public static boolean isDestinationSecure(final JobDataMap dataMap) {
return ((dataMap.getString(JmsHelper.JMS_USER) != null) && (dataMap
.getString(JmsHelper.JMS_PASSWORD) != null));
}
public static boolean useTransaction(final JobDataMap dataMap) {
return dataMap.getBoolean(JMS_USE_TXN);
}
private JmsHelper() {
}
}