1 /** 2 * 3 * Copyright 2006 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 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 /** 33 * TODO: document me 34 * 35 * NOTE: this class is serialized when modules are installed. Any changes should 36 * be carefully reviewed to ensure they don't cause deserialization errors! 37 * 38 * @version $Rev: 412622 $ $Date: 2006-06-07 17:20:33 -0700 (Wed, 07 Jun 2006) $ 39 */ 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 }