package org.jboss.as.naming.service; import org.jboss.as.naming.NamingStore; import org.jboss.as.naming.context.NamespaceContextSelector; import org.jboss.as.naming.deployment.ContextNames; import org.jboss.msc.service.Service; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartException; import org.jboss.msc.service.StopContext; import org.jboss.msc.value.InjectedValue; import javax.naming.CompositeName; import javax.naming.Context; import javax.naming.NamingException; /** * @author Eduardo Martins */ public class DefaultNamespaceContextSelectorService implements Service<Void> { public static final ServiceName SERVICE_NAME = ContextNames.NAMING.append("defaultNamespaceContextSelector"); private static final CompositeName EMPTY_NAME = new CompositeName(); private final InjectedValue<NamingStore> globalNamingStore; private final InjectedValue<NamingStore> jbossNamingStore; private final InjectedValue<NamingStore> remoteExposedNamingStore; public DefaultNamespaceContextSelectorService() { this.globalNamingStore = new InjectedValue<>(); this.jbossNamingStore = new InjectedValue<>(); this.remoteExposedNamingStore = new InjectedValue<>(); } public InjectedValue<NamingStore> getGlobalNamingStore() { return globalNamingStore; } public InjectedValue<NamingStore> getJbossNamingStore() { return jbossNamingStore; } public InjectedValue<NamingStore> getRemoteExposedNamingStore() { return remoteExposedNamingStore; } @Override public void start(StartContext startContext) throws StartException { NamespaceContextSelector.setDefault(new NamespaceContextSelector() { public Context getContext(String identifier) { final NamingStore namingStore; if (identifier.equals("global")) { namingStore = globalNamingStore.getValue(); } else if (identifier.equals("jboss")) { namingStore = jbossNamingStore.getValue(); } else if (identifier.equals("jboss/exported")) { namingStore = remoteExposedNamingStore.getValue(); } else { namingStore = null; } if (namingStore != null) { try { return (Context) namingStore.lookup(EMPTY_NAME); } catch (NamingException e) { throw new IllegalStateException(e); } } else { return null; } } }); } @Override public void stop(StopContext stopContext) { } @Override public Void getValue() throws IllegalStateException, IllegalArgumentException { return null; } }