package com.vladmihalcea.flexypool.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
/**
* <code>JndiUtils</code> - JNDI utilities holder
*
* @author Vlad Mihalcea
* @since 1.2
*/
public final class JndiUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(JndiUtils.class);
private JndiUtils() {
throw new UnsupportedOperationException("JndiUtils is not instantiable!");
}
/**
* Lookup object in JNDI
*
* @param name object name
* @param <T> object class parameter type
* @return object
*/
public static <T> T lookup(String name) {
InitialContext initialContext = initialContext();
try {
@SuppressWarnings("unchecked")
T object = (T) initialContext.lookup(name);
if (object == null) {
throw new NameNotFoundException(name + " was found but is null");
}
return object;
} catch (NameNotFoundException e) {
throw new IllegalArgumentException(name + " was not found in JNDI", e);
} catch (NamingException e) {
throw new IllegalArgumentException("JNDI lookup failed", e);
} finally {
closeContext(initialContext);
}
}
/**
* Create InitialContext
*
* @return InitialContext
*/
protected static InitialContext initialContext() {
try {
return new InitialContext();
} catch (NamingException e) {
throw new IllegalStateException("Can't create the InitialContext object");
}
}
/**
* Close InitialContext
*
* @param initialContext initial context
*/
protected static void closeContext(InitialContext initialContext) {
if (initialContext != null) {
try {
initialContext.close();
} catch (NamingException e) {
LOGGER.debug("Can't close InitialContext", e);
}
}
}
}