View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.hadoop.chukwa.extraction.engine.datasource;
20  
21  
22  import java.util.HashMap;
23  import org.apache.hadoop.chukwa.extraction.engine.datasource.database.DatabaseDS;
24  import org.apache.hadoop.chukwa.extraction.engine.datasource.record.ChukwaRecordDataSource;
25  
26  public class DataSourceFactory {
27    private static Object lock = new Object();
28    private static DataSourceFactory factory = null;
29    private HashMap<String, DataSource> dataSources = new HashMap<String, DataSource>();
30  
31    private DataSourceFactory() {
32      // TODO load from config Name + class + threadSafe?
33  
34      DataSource databaseDS = new DatabaseDS();
35      dataSources.put("MRJob", databaseDS);
36      dataSources.put("HodJob", databaseDS);
37      dataSources.put("QueueInfo", databaseDS);
38  
39    }
40  
41    public static DataSourceFactory getInstance() {
42      synchronized (lock) {
43        if (factory == null) {
44          factory = new DataSourceFactory();
45        }
46      }
47      return factory;
48    }
49  
50    public DataSource getDataSource(String datasourceName)
51        throws DataSourceException {
52      if (dataSources.containsKey(datasourceName)) {
53        return dataSources.get(datasourceName);
54      } else {
55        DataSource hsdfsDS = new ChukwaRecordDataSource();
56        dataSources.put(datasourceName, hsdfsDS);
57        return hsdfsDS;
58        // TODO proto only!
59        // throw new DataSourceException("Unknown datasource");
60      }
61    }
62  }