/*
* Copyright 2009 Mustard Grain, Inc.
*
* Licensed 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 voldemort.server;
import voldemort.annotations.jmx.JmxGetter;
import voldemort.annotations.jmx.JmxManaged;
import voldemort.common.service.AbstractService;
import voldemort.common.service.ServiceType;
import voldemort.common.service.VoldemortService;
import voldemort.utils.JmxUtils;
/**
* AbstractSocketService abstracts the different implementations so that we can
* use this common super class by various callers.
*
*/
@JmxManaged(description = "A server that handles remote operations on stores via TCP/IP.")
public abstract class AbstractSocketService extends AbstractService implements VoldemortService {
protected final int port;
protected final String serviceName;
protected final boolean enableJmx;
public AbstractSocketService(ServiceType type, int port, String serviceName, boolean enableJmx) {
super(type);
this.port = port;
this.serviceName = serviceName;
this.enableJmx = enableJmx;
}
/**
* Simply retrieves the port on which this service is listening for incoming
* requests.
*
* @return Port number
*/
@JmxGetter(name = "port", description = "The port on which the server is accepting connections.")
public final int getPort() {
return port;
}
/**
* Returns a StatusManager instance for use with status reporting tools.
*
* @return StatusManager
*/
public abstract StatusManager getStatusManager();
/**
* If JMX is enabled, will register the given object under the service name
* with which this class was created.
*
* @param obj Object to register as an MBean
*/
protected void enableJmx(Object obj) {
if(enableJmx)
JmxUtils.registerMbean(serviceName, obj);
}
}