Package com.cloudera.lib.server

Source Code of com.cloudera.lib.server.BaseService

/*
* Copyright (c) 2011, Cloudera, Inc. All Rights Reserved.
*
* Cloudera, Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"). You may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for
* the specific language governing permissions and limitations under the
* License.
*/
package com.cloudera.lib.server;

import com.cloudera.lib.util.XConfiguration;

import java.util.Map;

/**
* Convenience class implementing the {@link Service} interface.
*/
public abstract class BaseService implements Service {
  private String prefix;
  private Server server;
  private XConfiguration serviceConfig;

  /**
   * Service constructor.
   *
   * @param prefix service prefix.
   */
  public BaseService(String prefix) {
    this.prefix = prefix;
  }

  /**
   * Initializes the service.
   * <p/>
   * It collects all service properties (properties having the
   * <code>#SERVER#.#SERVICE#.</code> prefix). The property names are then
   * trimmed from the <code>#SERVER#.#SERVICE#.</code> prefix.
   * <p/>
   * After collecting  the service properties it delegates to the
   * {@link #init()} method.
   * @param server the server initializing the service, give access to the
   * server context.
   * @throws ServiceException thrown if the service could not be initialized.
   */
  @Override
  public final void init(Server server) throws ServiceException {
    this.server = server;
    String servicePrefix = getPrefixedName("");
    serviceConfig = new XConfiguration();
    for (Map.Entry<String, String> entry : server.getConfig().resolve()) {
      String key = entry.getKey();
      if (key.startsWith(servicePrefix)) {
        serviceConfig.set(key.substring(servicePrefix.length()), entry.getValue());
      }
    }
    init();
  }


  /**
   * Post initializes the service. This method is called by the
   * {@link Server} after all services of the server have been initialized.
   * <p/>
   * This method does a NOP.
   *
   * @throws ServiceException thrown if the service could not be
   * post-initialized.
   */
  @Override
  public void postInit() throws ServiceException {
  }

  /**
   * Destroy the services.  This method is called once, when the
   * {@link Server} owning the service is being destroyed.
   * <p/>
   * This method does a NOP.
   */
  @Override
  public void destroy() {
  }

  /**
   * Returns the service dependencies of this service. The service will be
   * instantiated only if all the service dependencies are already initialized.
   * <p/>
   * This method returns an empty array (size 0)
   *
   * @return an empty array (size 0).
   */
  @Override
  public Class[] getServiceDependencies() {
    return new Class[0];
  }

  /**
   * Notification callback when the server changes its status.
   * <p/>
   * This method returns an empty array (size 0)
   *
   * @param oldStatus old server status.
   * @param newStatus new server status.
   * @throws ServiceException thrown if the service could not process the status change.
   */
  @Override
  public void serverStatusChange(Server.Status oldStatus, Server.Status newStatus) throws ServiceException {
  }

  /**
   * Returns the service prefix.
   *
   * @return the service prefix.
   */
  protected String getPrefix() {
    return prefix;
  }

  /**
   * Returns the server owning the service.
   *
   * @return the server owning the service.
   */
  protected Server getServer() {
    return server;
  }

  /**
   * Returns the full prefixed name of a service property.
   *
   * @param name of the property.
   * @return prefixed name of the property.
   */
  protected String getPrefixedName(String name) {
    return server.getPrefixedName(prefix + "." + name);
  }

  /**
   * Returns the service configuration properties. Property
   * names are trimmed off from its prefix.
   * <p/>
   * The sevice configuration properties are all properties
   * with names starting with <code>#SERVER#.#SERVICE#.</code>
   * in the server configuration.
   *
   * @return the service configuration properties with names
   * trimmed off from their <code>#SERVER#.#SERVICE#.</code>
   * prefix.
   */
  protected XConfiguration getServiceConfig() {
    return serviceConfig;
  }

  /**
   * Initializes the server.
   * <p/>
   * This method is called by {@link #init(Server)} after all service properties
   * (properties prefixed with
   * @throws ServiceException thrown if the service could not be initialized.
   */
  protected abstract void init() throws ServiceException;

}
TOP

Related Classes of com.cloudera.lib.server.BaseService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.