package org.transgalactica.fwk.test.jndi; import java.util.Map; import java.util.Map.Entry; import javax.naming.NamingException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.mock.jndi.SimpleNamingContextBuilder; public class JndiMockLoader implements InitializingBean, DisposableBean { private static final Logger LOGGER = LoggerFactory.getLogger(JndiMockLoader.class); private Map<String, ?> jndiObjects; private SimpleNamingContextBuilder builder; public JndiMockLoader() { } @Override public void afterPropertiesSet() throws NamingException { builder = getOrCreateNamingContextBuilder(); builder.deactivate(); bindJndiObjects(); builder.activate(); } private SimpleNamingContextBuilder getOrCreateNamingContextBuilder() { SimpleNamingContextBuilder b = SimpleNamingContextBuilder.getCurrentContextBuilder(); if (b == null) { LOGGER.info("No SimpleNamingContextBuilder found, creating a new one."); b = new SimpleNamingContextBuilder(); } return b; } private void bindJndiObjects() { for (Entry<String, ?> jndiObject : getJndiObjects().entrySet()) { LOGGER.info("Binding JndiObject : {}", jndiObject); builder.bind(jndiObject.getKey(), jndiObject.getValue()); } } @Override public void destroy() { builder.clear(); } /* * Accesseurs */ public Map<String, ?> getJndiObjects() { return jndiObjects; } public void setJndiObjects(Map<String, ?> jndiObjects) { this.jndiObjects = jndiObjects; } }