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 }