View Javadoc

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  }