/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.cachepool.extend.connection.datasource;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.log4j.Logger;
import org.hibernate.cfg.Environment;
/**
* <p>
* NamingHelper.java
* </p>
*
* @author Jon.King 2007-5-9
*/
public final class NamingHelper {
private static final Logger log = Logger.getLogger(NamingHelper.class);
private NamingHelper() {
}
public static InitialContext getInitialContext(Properties props) throws NamingException {
Hashtable<Object, Object> hash = getJndiProperties(props);
log.info("JNDI InitialContext properties:" + hash);
try {
return (hash.size() == 0) ? new InitialContext() : new InitialContext(hash);
} catch (NamingException e) {
log.error("Could not obtain initial context", e);
throw e;
}
}
/**
* Transform JNDI properties passed in the form <tt>hibernate.jndi.*</tt>
* to the format accepted by <tt>InitialContext</tt> by triming the leading "<tt>hibernate.jndi</tt>".
*/
public static Properties getJndiProperties(Properties properties) {
HashSet<String> specialProps = new HashSet<String>();
specialProps.add(Environment.JNDI_CLASS);
specialProps.add(Environment.JNDI_URL);
Properties result = new Properties();
for (Iterator<Object> iter = properties.keySet().iterator(); iter.hasNext();) {
String prop = (String) iter.next();
if (prop.indexOf(Environment.JNDI_PREFIX) > -1 && !specialProps.contains(prop)) {
result.setProperty(prop.substring(Environment.JNDI_PREFIX.length() + 1), properties.getProperty(prop));
}
}
String jndiClass = properties.getProperty(Environment.JNDI_CLASS);
String jndiURL = properties.getProperty(Environment.JNDI_URL);
// we want to be able to just use the defaults, if JNDI environment properties are not supplied. So don't put null in anywhere
if (jndiClass != null)
result.put(Context.INITIAL_CONTEXT_FACTORY, jndiClass);
if (jndiURL != null)
result.put(Context.PROVIDER_URL, jndiURL);
return result;
}
}