package org.safehaus.penrose.management.connection;
import org.safehaus.penrose.connection.*;
import org.safehaus.penrose.partition.Partition;
import org.safehaus.penrose.partition.PartitionManager;
import org.safehaus.penrose.partition.PartitionConfig;
import org.safehaus.penrose.management.BaseService;
import org.safehaus.penrose.management.PenroseJMXService;
import org.safehaus.penrose.session.Session;
import org.safehaus.penrose.session.SessionManager;
/**
* @author Endi Sukma Dewata
*/
public class ConnectionService extends BaseService implements ConnectionServiceMBean {
protected PartitionManager partitionManager;
protected String partitionName;
protected String connectionName;
public ConnectionService(
PenroseJMXService jmxService,
PartitionManager partitionManager,
String partitionName,
String connectionName
) throws Exception {
this.jmxService = jmxService;
this.partitionManager = partitionManager;
this.partitionName = partitionName;
this.connectionName = connectionName;
}
public String getObjectName() {
return ConnectionClient.getStringObjectName(partitionName, connectionName);
}
public Object getObject() {
return getConnection();
}
public ConnectionConfig getConnectionConfig() throws Exception {
return getPartitionConfig().getConnectionConfigManager().getConnectionConfig(connectionName);
}
public void setConnectionConfig(ConnectionConfig connectionConfig) throws Exception {
getPartitionConfig().getConnectionConfigManager().updateConnectionConfig(connectionConfig);
}
public Connection getConnection() {
Partition partition = getPartition();
if (partition == null) return null;
ConnectionManager connectionManager = partition.getConnectionManager();
return connectionManager.getConnection(connectionName);
}
public PartitionConfig getPartitionConfig() {
return partitionManager.getPartitionConfig(partitionName);
}
public Partition getPartition() {
return partitionManager.getPartition(partitionName);
}
public String getAdapterName() throws Exception {
ConnectionConfig connectionConfig = getConnectionConfig();
return connectionConfig.getAdapterName();
}
public void start() throws Exception {
log.debug("Starting connection "+partitionName+"/"+connectionName+"...");
Partition partition = getPartition();
ConnectionManager connectionManager = partition.getConnectionManager();
connectionManager.startConnection(connectionName);
log.debug("Connection started.");
}
public void stop() throws Exception {
log.debug("Stopping connection "+partitionName+"/"+connectionName+"...");
Partition partition = getPartition();
ConnectionManager connectionManager = partition.getConnectionManager();
connectionManager.stopConnection(connectionName);
log.debug("Connection stopped.");
}
public void restart() throws Exception {
log.debug("Restarting connection "+partitionName+"/"+connectionName+"...");
Partition partition = getPartition();
ConnectionManager connectionManager = partition.getConnectionManager();
connectionManager.stopConnection(connectionName);
connectionManager.startConnection(connectionName);
log.debug("Connection restarted.");
}
public String getStatus() throws Exception {
Connection connection = getConnection();
return connection == null ? ConnectionServiceMBean.STOPPED : ConnectionServiceMBean.STARTED;
}
public Session createAdminSession() throws Exception {
Partition partition = getPartition();
SessionManager sessionManager = partition.getPartitionContext().getSessionManager();
return sessionManager.createAdminSession();
}
}