1 17 18 package org.apache.geronimo.naming.reference; 19 20 import org.apache.geronimo.gbean.AbstractNameQuery; 21 import org.apache.geronimo.gbean.AbstractName; 22 import org.apache.geronimo.kernel.config.Configuration; 23 import org.apache.geronimo.kernel.config.ConfigurationManager; 24 import org.apache.geronimo.kernel.config.ConfigurationUtil; 25 import org.apache.geronimo.kernel.repository.Artifact; 26 import org.apache.geronimo.kernel.Kernel; 27 import org.apache.geronimo.kernel.GBeanNotFoundException; 28 29 import java.util.Set ; 30 import java.util.Collections ; 31 32 40 public abstract class ConfigurationAwareReference extends SimpleAwareReference { 41 private static final long serialVersionUID = 283358809226901462L; 42 private final Artifact configId; 43 protected final Set abstractNameQueries; 44 45 protected ConfigurationAwareReference(Artifact configId, AbstractNameQuery abstractNameQuery) { 46 this.configId = configId; 47 this.abstractNameQueries = Collections.singleton(abstractNameQuery); 48 } 49 50 protected ConfigurationAwareReference(Artifact configId, Set abstractNameQueries) { 51 this.configId = configId; 52 this.abstractNameQueries = abstractNameQueries; 53 } 54 55 public Configuration getConfiguration() { 56 Kernel kernel = getKernel(); 57 ConfigurationManager configurationManager = ConfigurationUtil.getConfigurationManager(kernel); 58 return configurationManager.getConfiguration(configId); 59 } 60 61 public AbstractName resolveTargetName() throws GBeanNotFoundException { 62 Configuration configuration = getConfiguration(); 63 try { 64 return configuration.findGBean(abstractNameQueries); 65 } catch (GBeanNotFoundException e) { 66 Set results = getKernel().listGBeans(abstractNameQueries); 67 if (results.size() == 1) { 68 return (AbstractName) results.iterator().next(); 69 } 70 throw new GBeanNotFoundException("Name query " + abstractNameQueries + " not satisfied in kernel, matches: " + results, e); 71 } 72 } 73 74 } 75 | Popular Tags |