You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/11/22 07:52:11 UTC
[1/2] committing initial changes related to Persistence Manager
refactoring
Updated Branches:
refs/heads/master 4df9f714c -> c658beb2b
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
index 4ed9bc5..b4f2f7f 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/SingleTenantCartridgeSubscription.java
@@ -52,8 +52,8 @@ public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
AlreadySubscribedException, RepositoryRequiredException, InvalidRepositoryException, PolicyException {
super.createSubscription(subscriber, alias, autoscalingPolicy, repository);
- setClusterDomain(alias + "." + getHostName() + "." + getType() + ".domain");
- setHostName(alias + "." + getHostName());
+ getCluster().setClusterDomain(alias + "." + getCluster().getHostName() + "." + getType() + ".domain");
+ getCluster().setHostName(alias + "." + getCluster().getHostName());
}
@Override
@@ -61,26 +61,26 @@ public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
throws ADCException, UnregisteredCartridgeException {
ApplicationManagementUtil.registerService(getType(),
- getClusterDomain(),
- getClusterSubDomain(),
+ getCluster().getClusterDomain(),
+ getCluster().getClusterSubDomain(),
getPayload().createPayload(),
getPayload().getPayloadArg().getTenantRange(),
- getHostName(),
+ getCluster().getHostName(),
null);
getPayload().delete();
return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
- getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
- getMgtClusterDomain(), getMgtClusterSubDomain(), null, "PENDING");
+ getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+ getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING");
}
@Override
public void removeSubscription() throws ADCException, NotSubscribedException {
try {
- CloudControllerServiceClient.getServiceClient().terminateAllInstances(getClusterDomain());
+ CloudControllerServiceClient.getServiceClient().terminateAllInstances(getCluster().getClusterDomain());
} catch (AxisFault e) {
String errorMsg = "Error in terminating cartridge subscription, alias " + getAlias();
@@ -93,20 +93,20 @@ public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
throw new ADCException(errorMsg, e);
}
- log.info("Terminated all instances of " + getClusterDomain() + " " + getClusterSubDomain());
+ log.info("Terminated all instances of " + getCluster().getClusterDomain() + " " + getCluster().getClusterSubDomain());
try {
- CloudControllerServiceClient.getServiceClient().unregisterService(getClusterDomain());
+ CloudControllerServiceClient.getServiceClient().unregisterService(getCluster().getClusterDomain());
} catch (Exception e) {
- String errorMsg = "Error in unregistering service cluster with domain " + getClusterDomain() +
- ", sub domain " + getClusterSubDomain();
+ String errorMsg = "Error in unregistering service cluster with domain " + getCluster().getClusterDomain() +
+ ", sub domain " + getCluster().getClusterSubDomain();
log.error(errorMsg);
throw new ADCException(errorMsg, e);
}
- log.info("Unregistered service cluster, domain " + getClusterDomain() + ", sub domain " +
- getClusterSubDomain());
+ log.info("Unregistered service cluster, domain " + getCluster().getClusterDomain() + ", sub domain " +
+ getCluster().getClusterSubDomain());
cleanupSubscription();
}
@@ -119,11 +119,11 @@ public class SingleTenantCartridgeSubscription extends CartridgeSubscription {
if(getRepository() != null) {
payloadArg.setRepoURL(getRepository().getUrl());
}
- payloadArg.setHostName(getHostName());
- payloadArg.setServiceDomain(getClusterDomain());
- payloadArg.setServiceSubDomain(getMgtClusterSubDomain());
- payloadArg.setMgtServiceDomain(getMgtClusterDomain());
- payloadArg.setMgtServiceSubDomain(getMgtClusterSubDomain());
+ payloadArg.setHostName(getCluster().getHostName());
+ payloadArg.setServiceDomain(getCluster().getClusterDomain());
+ payloadArg.setServiceSubDomain(getCluster().getMgtClusterSubDomain());
+ payloadArg.setMgtServiceDomain(getCluster().getMgtClusterDomain());
+ payloadArg.setMgtServiceSubDomain(getCluster().getMgtClusterSubDomain());
if(getCartridgeInfo().getProvider().equals(CartridgeConstants.PROVIDER_NAME_WSO2)) {
payloadArg.setTenantRange(Integer.toString(getSubscriber().getTenantId()));
}
[2/2] git commit: committing initial changes related to Persistence
Manager refactoring
Posted by is...@apache.org.
committing initial changes related to Persistence Manager refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/c658beb2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/c658beb2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/c658beb2
Branch: refs/heads/master
Commit: c658beb2bd9f3fc70564c57425c68d643dec60f8
Parents: 4df9f71
Author: Isuru <is...@wso2.com>
Authored: Fri Nov 22 12:20:52 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Fri Nov 22 12:20:52 2013 +0530
----------------------------------------------------------------------
.../org/apache/stratos/adc/mgt/dao/Cluster.java | 71 +
.../stratos/adc/mgt/dao/DataCartridge.java | 10 +
.../exception/PersistenceManagerException.java | 49 +
.../DatabaseBasedPersistenceManager.java | 1408 ++++++++++++++++++
.../adc/mgt/persistence/PersistenceManager.java | 79 +
.../stratos/adc/mgt/repository/Repository.java | 9 +
.../mgt/subscription/CartridgeSubscription.java | 55 +-
.../subscription/DataCartridgeSubscription.java | 46 +-
.../MultiTenantCartridgeSubscription.java | 12 +-
.../SingleTenantCartridgeSubscription.java | 38 +-
10 files changed, 1712 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
new file mode 100644
index 0000000..df926fd
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/Cluster.java
@@ -0,0 +1,71 @@
+package org.apache.stratos.adc.mgt.dao;
+
+public class Cluster {
+
+ private int id;
+ private String clusterDomain;
+ private String clusterSubDomain;
+ private String mgtClusterDomain;
+ private String mgtClusterSubDomain;
+ private String hostName;
+ private String serviceStatus;
+
+ public Cluster() {
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public String getClusterDomain() {
+ return clusterDomain;
+ }
+
+ public void setClusterDomain(String clusterDomain) {
+ this.clusterDomain = clusterDomain;
+ }
+
+ public String getClusterSubDomain() {
+ return clusterSubDomain;
+ }
+
+ public void setClusterSubDomain(String clusterSubDomain) {
+ this.clusterSubDomain = clusterSubDomain;
+ }
+
+ public String getMgtClusterDomain() {
+ return mgtClusterDomain;
+ }
+
+ public void setMgtClusterDomain(String mgtClusterDomain) {
+ this.mgtClusterDomain = mgtClusterDomain;
+ }
+
+ public String getMgtClusterSubDomain() {
+ return mgtClusterSubDomain;
+ }
+
+ public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
+ this.mgtClusterSubDomain = mgtClusterSubDomain;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getServiceStatus() {
+ return serviceStatus;
+ }
+
+ public void setServiceStatus(String serviceStatus) {
+ this.serviceStatus = serviceStatus;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/DataCartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/DataCartridge.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/DataCartridge.java
index 1e1ec11..25ace7a 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/DataCartridge.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/dao/DataCartridge.java
@@ -23,8 +23,10 @@ public class DataCartridge {
private int id;
private String dataCartridgeType;
+ private String host;
private String userName;
private String password;
+
public int getId() {
return id;
}
@@ -49,4 +51,12 @@ public class DataCartridge {
public void setPassword(String password) {
this.password = password;
}
+
+ public String getHost() {
+ return host;
+ }
+
+ public void setHost(String host) {
+ this.host = host;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/exception/PersistenceManagerException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/exception/PersistenceManagerException.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/exception/PersistenceManagerException.java
new file mode 100644
index 0000000..ccf2f9c
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/exception/PersistenceManagerException.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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
+ *
+ * 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 org.apache.stratos.adc.mgt.exception;
+
+public class PersistenceManagerException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
+ private String message;
+
+ public PersistenceManagerException() {
+ super();
+ }
+
+ public PersistenceManagerException(String message, Throwable cause) {
+ super(message, cause);
+ this.message = message;
+ }
+
+ public PersistenceManagerException(String message) {
+ super(message);
+ this.message = message;
+ }
+
+ public PersistenceManagerException(Throwable cause) {
+ super(cause);
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
new file mode 100644
index 0000000..eb8ebb0
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/DatabaseBasedPersistenceManager.java
@@ -0,0 +1,1408 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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
+ *
+ * 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 org.apache.stratos.adc.mgt.persistence;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.adc.mgt.client.CloudControllerServiceClient;
+import org.apache.stratos.adc.mgt.dao.Cluster;
+import org.apache.stratos.adc.mgt.dao.DataCartridge;
+import org.apache.stratos.adc.mgt.dto.Policy;
+import org.apache.stratos.adc.mgt.exception.ADCException;
+import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscriber.Subscriber;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.DataCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.SingleTenantCartridgeSubscription;
+import org.apache.stratos.adc.mgt.subscription.factory.CartridgeSubscriptionFactory;
+import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
+import org.apache.stratos.adc.mgt.utils.PolicyHolder;
+import org.apache.stratos.adc.mgt.utils.RepoPasswordMgtUtil;
+import org.apache.stratos.adc.mgt.utils.StratosDBUtils;
+import org.apache.stratos.cloud.controller.util.xsd.CartridgeInfo;
+import org.wso2.carbon.context.CarbonContext;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DatabaseBasedPersistenceManager extends PersistenceManager {
+
+ private static final Log log = LogFactory.getLog(DatabaseBasedPersistenceManager.class);
+
+ @Override
+ public void persistCartridgeSubscription(CartridgeSubscription cartridgeSubscription)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ int repositoryId = -1;
+ //persist Repository if available
+ if(cartridgeSubscription.getRepository() != null) {
+ repositoryId = persistRepository(connection, cartridgeSubscription.getRepository());
+ }
+
+ int dataCartridgeInfoId = -1;
+ //persist Data Cartridge Subscription specific details if available
+ if(cartridgeSubscription.getCartridgeInfo().getProvider().equals(CartridgeConstants.DATA_CARTRIDGE_PROVIDER) &&
+ cartridgeSubscription instanceof DataCartridgeSubscription) {
+ DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription) cartridgeSubscription;
+ dataCartridgeInfoId = persistDataCartridgeInformation(connection, dataCartridgeSubscription.getHost(),
+ dataCartridgeSubscription.getUsername(), dataCartridgeSubscription.getPassword());
+ }
+
+ PreparedStatement persistSubscriptionStmt = null;
+
+ String insertSubscription = "INSERT INTO SUBSCRIPTION (CARTRIDGE_TYPE,CARTRIDGE_ALIAS,MAPPED_DOMAIN," +
+ "SUBSCRIPTION_STATUS,MULTITENANT,PROVIDER,AUTOSCALING_POLICY,HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN," +
+ "MGT_SUBDOMAIN,SERVICE_STATUS,DATA_CARTRIDGE_ID,REPOSITORY_ID)"
+ + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+
+ try {
+ persistSubscriptionStmt = connection.prepareStatement(insertSubscription);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for persisting Subscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistSubscriptionStmt.setString(1, cartridgeSubscription.getType());
+ persistSubscriptionStmt.setString(2, cartridgeSubscription.getAlias());
+ persistSubscriptionStmt.setString(3, cartridgeSubscription.getMappedDomain());
+ persistSubscriptionStmt.setString(4, cartridgeSubscription.getSubscriptionStatus());
+ persistSubscriptionStmt.setBoolean(5, cartridgeSubscription.getCartridgeInfo().getMultiTenant());
+ persistSubscriptionStmt.setString(6, cartridgeSubscription.getCartridgeInfo().getProvider());
+ persistSubscriptionStmt.setString(7, cartridgeSubscription.getAutoscalingPolicy().getName());
+ persistSubscriptionStmt.setString(8, cartridgeSubscription.getHostName());
+ persistSubscriptionStmt.setString(9, cartridgeSubscription.getClusterDomain());
+ persistSubscriptionStmt.setString(10, cartridgeSubscription.getClusterSubDomain());
+ persistSubscriptionStmt.setString(11, cartridgeSubscription.getMgtClusterDomain());
+ persistSubscriptionStmt.setString(12, cartridgeSubscription.getMgtClusterSubDomain());
+ persistSubscriptionStmt.setString(13, "CLUSTER_CREATED");//TODO: fix properly
+ persistSubscriptionStmt.setInt(14, dataCartridgeInfoId);
+ persistSubscriptionStmt.setInt(15, repositoryId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for persisting Subscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistSubscriptionStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for persisting Subscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ connection.commit();
+
+ } catch (SQLException e) {
+ try {
+ connection.rollback();
+
+ } catch (SQLException e1) {
+ log.error("Failed to rollback", e);
+ }
+ String errorMsg = "Failed to commit the changes for persisting Subscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, persistSubscriptionStmt);
+ }
+ }
+
+ private int persistRepository (Connection connection, Repository repository) throws PersistenceManagerException{
+
+ PreparedStatement persistRepoStmt = null;
+ ResultSet resultSet = null;
+ int repoId = -1;
+
+ String insertRepo = "INSERT INTO REPOSITORY (URL,USERNAME,PASSWORD,IS_PRIVATE)"
+ + " VALUES (?,?,?,?)";
+
+ try {
+ persistRepoStmt = connection.prepareStatement(insertRepo, Statement.RETURN_GENERATED_KEYS);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for persisting Repository";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistRepoStmt.setString(1, repository.getUrl());
+ persistRepoStmt.setString(2, repository.getUserName());
+ persistRepoStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(repository.getPassword()));
+ persistRepoStmt.setBoolean(4, repository.isPrivateRepository());
+
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for persisting Repository";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistRepoStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for persisting Repository";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistRepoStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+ try {
+ resultSet = persistRepoStmt.getGeneratedKeys();
+ if (resultSet.next()) {
+ repoId = resultSet.getInt(1);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistRepoStmt, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeStatement(persistRepoStmt);
+ StratosDBUtils.closeResultSet(resultSet);
+ }
+
+ return repoId;
+ }
+
+ /*private int persistCluster (Connection connection, Cluster cluster) throws PersistenceManagerException {
+
+ PreparedStatement persistClusterStmt = null;
+ ResultSet resultSet = null;
+ int clusterId = -1;
+
+ String insertCluster = "INSERT INTO CLUSTER (HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN,MGT_SUBDOMAIN,SERVICE_STATUS)"
+ + " VALUES (?,?,?,?,?,?,?)";
+
+ try {
+ persistClusterStmt = connection.prepareStatement(insertCluster, Statement.RETURN_GENERATED_KEYS);
+
+ } catch (SQLException e) {
+ StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+ throw new PersistenceManagerException("Failed create a Prepared Statement for persisting Cluster", e);
+ }
+
+ try {
+ persistClusterStmt.setString(1, cluster.getHostName());
+ persistClusterStmt.setString(2, cluster.getClusterDomain());
+ persistClusterStmt.setString(3, cluster.getClusterSubDomain());
+ persistClusterStmt.setString(4, cluster.getMgtClusterDomain());
+ persistClusterStmt.setString(5, cluster.getMgtClusterSubDomain());
+ persistClusterStmt.setString(6, "CREATED");//TODO:refactor
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for persisting Cluster";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistClusterStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for persisting Cluster";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistClusterStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+ try {
+ resultSet = persistClusterStmt.getGeneratedKeys();
+ if (resultSet.next()) {
+ clusterId = resultSet.getInt(1);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to get the generated keys for the Result Set of persisting Repository";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistClusterStmt, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeStatement(persistClusterStmt);
+ StratosDBUtils.closeResultSet(resultSet);
+ }
+
+ return clusterId;
+ } */
+
+ private int persistDataCartridgeInformation (Connection connection, String host, String adminUserName,
+ String adminPassword) throws PersistenceManagerException {
+
+ PreparedStatement persistDataCartridgeInformationStmt = null;
+ ResultSet resultSet = null;
+ int dataCartridgeInfoId = -1;
+
+ String insertDataCartridgeInfo = "INSERT INTO DATA_CARTRIDGE (HOST,ADMIN_USERNAME,ADMIN_PASSWORD)"
+ + " VALUES (?,?,?)";
+
+ try {
+ persistDataCartridgeInformationStmt = connection.prepareStatement(insertDataCartridgeInfo,
+ Statement.RETURN_GENERATED_KEYS);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for persisting Data Cartridge Information";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistDataCartridgeInformationStmt.setString(1, host);
+ persistDataCartridgeInformationStmt.setString(2, adminUserName);
+ persistDataCartridgeInformationStmt.setString(3, RepoPasswordMgtUtil.encryptPassword(adminPassword));
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for persisting Data Cartridge Information";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistDataCartridgeInformationStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for persisting Data Cartridge Information";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+ try {
+ resultSet = persistDataCartridgeInformationStmt.getGeneratedKeys();
+ if (resultSet.next()) {
+ dataCartridgeInfoId = resultSet.getInt(1);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to get the generated keys for the Result Set of persisting Data Cartridge " +
+ "Information";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistDataCartridgeInformationStmt, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeStatement(persistDataCartridgeInformationStmt);
+ StratosDBUtils.closeResultSet(resultSet);
+ }
+
+ return dataCartridgeInfoId;
+ }
+
+ /*private int persistSubscriber (Connection connection, Subscriber subscriber) throws PersistenceManagerException {
+
+ PreparedStatement persistSubscriberStmt = null;
+
+ String insertSubscriber = "INSERT INTO TENANT (TENANT_ID,USERNAME,PASSWORD) VALUES (?,?,?)";
+
+ try {
+ persistSubscriberStmt = connection.prepareStatement(insertSubscriber);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for persisting Subscriber";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistSubscriberStmt.setInt(1, subscriber.getTenantId());
+ persistSubscriberStmt.setString(2, subscriber.getAdminUserName());
+ persistSubscriberStmt.setString(3, subscriber.getTenantDomain());
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for persisting Subscriber";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ persistSubscriberStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for persisting Subscriber";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, persistSubscriberStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeStatement(persistSubscriberStmt);
+ }
+
+ return subscriber.getTenantId();
+ }*/
+
+ @Override
+ public void removeCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+ //TODO
+ }
+
+ @Override
+ public CartridgeSubscription getCartridgeSubscription(int tenantId, String alias) throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
+ "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+
+ PreparedStatement getSubscriptionStatement = null;
+ try {
+ getSubscriptionStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getSubscriptionStatement.setString(1, alias);
+ getSubscriptionStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getSubscriptionStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ CartridgeSubscription cartridgeSubscription = null;
+ try {
+ while (resultSet.next()) {
+ cartridgeSubscription = populateCartridgeSubscription(resultSet);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionStatement, resultSet);
+ }
+
+ return cartridgeSubscription;
+ }
+
+ private CartridgeSubscription populateCartridgeSubscription (ResultSet resultSet)
+ throws PersistenceManagerException, SQLException {
+
+ String cartridgeType = resultSet.getString("CARTRIDGE_TYPE");
+
+ CartridgeInfo cartridgeInfo = null;
+ try {
+ cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(cartridgeType);
+
+ } catch (Exception e) {
+ //Cannot happen, but can continue
+ String message = "Error getting Cartridge Definition for " + cartridgeType;
+ log.error(message, e);
+ }
+
+ //If an error occurred while getting the CartridgeInfo instance, create an instance with a minimal data set
+ if(cartridgeInfo == null) {
+ cartridgeInfo = new CartridgeInfo();
+ cartridgeInfo.setMultiTenant(resultSet.getBoolean("MULTITENANT"));
+ cartridgeInfo.setProvider(resultSet.getString("PROVIDER"));
+ }
+
+ CartridgeSubscription cartridgeSubscription = null;
+ try {
+ cartridgeSubscription = CartridgeSubscriptionFactory.getCartridgeSubscriptionInstance(cartridgeInfo);
+
+ } catch (ADCException e) {
+ throw new PersistenceManagerException(e);
+ }
+
+ Policy autoScalingPolicy = PolicyHolder.getInstance().getPolicy(resultSet.getString("AUTOSCALING_POLICY"));
+ if(autoScalingPolicy == null) {
+ //get the default AutoScaling policy
+ autoScalingPolicy = PolicyHolder.getInstance().getDefaultPolicy();
+ }
+
+ //populate data
+ cartridgeSubscription.setSubscriptionId(resultSet.getInt("SUBSCRIPTION_ID"));
+ cartridgeSubscription.setType(cartridgeType);
+ cartridgeSubscription.setAlias(resultSet.getString("CARTRIDGE_ALIAS"));
+ cartridgeSubscription.setMappedDomain(resultSet.getString("MAPPED_DOMAIN"));
+ cartridgeSubscription.setSubscriptionStatus(resultSet.getString("SUBSCRIPTION_STATUS"));
+ cartridgeSubscription.setAutoscalingPolicy(autoScalingPolicy);
+
+ //Repository related data
+ if (resultSet.getInt("REPOSITORY_ID") != -1) {
+ Repository repository = new Repository();
+ repository.setId(resultSet.getInt("REPOSITORY_ID"));
+ repository.setUrl(resultSet.getString("URL"));
+ repository.setUserName(resultSet.getString("USERNAME"));
+ repository.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.getString("PASSWORD")));
+ repository.setPrivateRepository(resultSet.getBoolean("IS_PRIVATE"));
+ cartridgeSubscription.setRepository(repository);
+ }
+
+ //Cluster related data
+ Cluster cluster = new Cluster();
+ cluster.setId(resultSet.getInt("CLUSTER_ID"));
+ cluster.setHostName(resultSet.getString("HOSTNAME"));
+ cluster.setClusterDomain(resultSet.getString("DOMAIN"));
+ cluster.setClusterSubDomain(resultSet.getString("SUBDOMAIN"));
+ cluster.setMgtClusterDomain(resultSet.getString("MGT_DOMAIN"));
+ cluster.setMgtClusterSubDomain(resultSet.getString("MGT_SUBDOMAIN"));
+ cluster.setServiceStatus(resultSet.getString("SERVICE_STATUS"));
+ cartridgeSubscription.setCluster(cluster);
+
+ //data cartridge specific information
+ if (resultSet.getInt("DATA_CARTRIDGE_ID") != -1 && cartridgeSubscription instanceof
+ SingleTenantCartridgeSubscription) {
+ DataCartridgeSubscription dataCartridgeSubscription = (DataCartridgeSubscription)cartridgeSubscription;
+ dataCartridgeSubscription.setHost(resultSet.getString("HOST"));
+ dataCartridgeSubscription.setUsername(resultSet.getString("ADMIN_USERNAME"));
+ dataCartridgeSubscription.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.
+ getString("ADMIN_PASSWORD")));
+ }
+
+ //Subscriber related data
+ CarbonContext carbonContext = CarbonContext.getThreadLocalCarbonContext();
+ Subscriber subscriber = new Subscriber(carbonContext.getUsername(), carbonContext.getTenantId(),
+ carbonContext.getTenantDomain());
+ cartridgeSubscription.setSubscriber(subscriber);
+
+ return cartridgeSubscription;
+ }
+
+ @Override
+ public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId) throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
+ "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+
+ PreparedStatement getSubscriptionsStatement = null;
+ try {
+ getSubscriptionsStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getSubscriptionsStatement.setInt(1, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getSubscriptionsStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ List<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
+ try {
+ while(resultSet.next()) {
+ CartridgeSubscription cartridgeSubscription = populateCartridgeSubscription(resultSet);
+ cartridgeSubscriptions.add(cartridgeSubscription);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ }
+
+ return cartridgeSubscriptions;
+ }
+
+ @Override
+ public List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_TYPE=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID " +
+ "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+
+ PreparedStatement getSubscriptionsStatement = null;
+ try {
+ getSubscriptionsStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getSubscriptionsStatement.setString(1, cartridgeType);
+ getSubscriptionsStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getSubscriptionsStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ List<CartridgeSubscription> cartridgeSubscriptions = new ArrayList<CartridgeSubscription>();
+ try {
+ while(resultSet.next()) {
+ CartridgeSubscription cartridgeSubscription = populateCartridgeSubscription(resultSet);
+ cartridgeSubscriptions.add(cartridgeSubscription);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getSubscriptionsStatement, resultSet);
+ }
+
+ return cartridgeSubscriptions;
+ }
+
+ @Override
+ public Repository getRepository(int tenantId, String alias) throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.TENANT_ID=? AND S.CARTRIDGE_ALIAS=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID ";
+
+ PreparedStatement getRepositoryStatement = null;
+ try {
+ getRepositoryStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getRepositoryStatement.setInt(1, tenantId);
+ getRepositoryStatement.setString(2, alias);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getRepositoryStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ Repository repository = null;
+ try {
+ while(resultSet.next()) {
+ repository = populateRepository(resultSet);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ }
+
+ return repository;
+ }
+
+ private Repository populateRepository (ResultSet resultSet) throws SQLException {
+
+ if(resultSet.getInt("REPOSITORY_ID") == -1) {
+ return null;
+ }
+
+ Repository repository = new Repository();
+ repository.setId(resultSet.getInt("REPOSITORY_ID"));
+ repository.setUrl(resultSet.getString("URL"));
+ repository.setUserName(resultSet.getString("USERNAME"));
+ repository.setPassword(RepoPasswordMgtUtil.decryptPassword(resultSet.getString("PASSWORD")));
+ repository.setPrivateRepository(resultSet.getBoolean("IS_PRIVATE"));
+
+ return repository;
+ }
+
+ @Override
+ public Repository getRepository(String clusterDomain) throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.DOMAIN=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join REPOSITORY R on S.REPOSITORY_ID=R.REPOSITORY_ID ";
+
+ PreparedStatement getRepositoryStatement = null;
+ try {
+ getRepositoryStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getRepositoryStatement.setString(1, clusterDomain);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getRepositoryStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ Repository repository = null;
+ try {
+ while(resultSet.next()) {
+ repository = populateRepository(resultSet);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getRepositoryStatement, resultSet);
+ }
+
+ return repository;
+ }
+
+ @Override
+ public DataCartridge getDataCartridgeSubscriptionInfo(int tenantId, String alias)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED' " +
+ "inner join DATA_CARTRIDGE D on S.DATA_CARTRIDGE_ID=D.DATA_CARTRIDGE_ID ";
+
+ PreparedStatement getDataCartridgeSubscriptionInfoStatement = null;
+ try {
+ getDataCartridgeSubscriptionInfoStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getDataCartridgeSubscriptionInfoStatement.setString(1, alias);
+ getDataCartridgeSubscriptionInfoStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getDataCartridgeSubscriptionInfoStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ DataCartridge dataCartridge = null;
+ try {
+ while (resultSet.next()) {
+ dataCartridge = populateDataCartridgeInfo(resultSet);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getDataCartridgeSubscriptionInfoStatement, resultSet);
+ }
+
+ return dataCartridge;
+ }
+
+ private DataCartridge populateDataCartridgeInfo (ResultSet resultSet) throws SQLException {
+
+ if(resultSet.getInt("DATA_CARTRIDGE_ID") == -1) {
+ return null;
+ }
+
+ DataCartridge dataCartridge = new DataCartridge();
+ dataCartridge.setId(resultSet.getInt("DATA_CARTRIDGE_ID"));
+ dataCartridge.setDataCartridgeType(resultSet.getString("CARTRIDGE_TYPE"));
+ dataCartridge.setHost(resultSet.getString("HOST"));
+ dataCartridge.setUserName(resultSet.getString("ADMIN_USERNAME"));
+ dataCartridge.setPassword(resultSet.getString("ADMIN_PASSWORD"));
+
+ return dataCartridge;
+ }
+
+ @Override
+ public boolean isAliasTaken(int tenantId, String alias) throws PersistenceManagerException {
+
+ boolean isAliasTaken = false;
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
+
+ PreparedStatement isAliasTakenStatement = null;
+ try {
+ isAliasTakenStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ isAliasTakenStatement.setString(1, alias);
+ isAliasTakenStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = isAliasTakenStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ if(resultSet.next()) {
+ log.info("Alias " + alias + " has been already used for tenant " + tenantId);
+ isAliasTaken = true;
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, isAliasTakenStatement, resultSet);
+ }
+
+ return isAliasTaken;
+ }
+
+ @Override
+ public boolean hasSubscribed(int tenantId, String cartridgeType) throws PersistenceManagerException {
+
+ boolean hasSubscribed = false;
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT * FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_TYPE=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
+
+ PreparedStatement hasSubscribedStatement = null;
+ try {
+ hasSubscribedStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ hasSubscribedStatement.setString(1, cartridgeType);
+ hasSubscribedStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = hasSubscribedStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ if(resultSet.next()) {
+ log.info("Tenant " + tenantId + " has already subscribed for the Cartridge Type " + cartridgeType);
+ hasSubscribed = true;
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, hasSubscribedStatement, resultSet);
+ }
+
+ return hasSubscribed;
+ }
+
+ @Override
+ public void updateDomianMapping(int tenantId, String cartridgeAlias, String newDomain)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ PreparedStatement updateDomainMappingStmt = null;
+
+ String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET MAPPED_DOMAIN = ? " +
+ "WHERE TENANT_ID = ? AND ALIAS = ?";
+
+ try {
+ updateDomainMappingStmt = connection.prepareStatement(insertDataCartridgeInfo);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateDomainMappingStmt.setString(1, newDomain);
+ updateDomainMappingStmt.setInt(2, tenantId);
+ updateDomainMappingStmt.setString(3, cartridgeAlias);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateDomainMappingStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, updateDomainMappingStmt);
+ }
+ }
+
+ @Override
+ public String getMappedDomain(int tenantId, String cartridgeAlias) throws PersistenceManagerException {
+
+ String mappedDomain = null;
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT MAPPED_DOMAIN FROM SUBSCRIPTION S " +
+ "WHERE S.TENANT_ID=? AND S.CARTRIDGE_ALIAS=? AND S.STATE != 'UNSUBSCRIBED'";
+
+ PreparedStatement getMappedDomainStatement = null;
+ try {
+ getMappedDomainStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getMappedDomainStatement.setInt(1, tenantId);
+ getMappedDomainStatement.setString(2, cartridgeAlias);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getMappedDomainStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ if(resultSet.next()) {
+ mappedDomain = resultSet.getString("MAPPED_DOMAIN");
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getMappedDomainStatement, resultSet);
+ }
+
+ return mappedDomain;
+ }
+
+ @Override
+ public Cluster getCluster(int tenantId, String cartridgeAlias) throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ String sqlQuery = "SELECT HOSTNAME,DOMAIN,SUBDOMAIN,MGT_DOMAIN,MGT_SUBDOMAIN,SERVICE_STATUS FROM SUBSCRIPTION S " +
+ "WHERE S.CARTRIDGE_ALIAS=? AND S.TENANT_ID=? AND S.STATE != 'UNSUBSCRIBED'";
+
+ PreparedStatement getClusterStatement = null;
+ try {
+ getClusterStatement = connection.prepareStatement(sqlQuery);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for retreiving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getClusterStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ getClusterStatement.setString(1, cartridgeAlias);
+ getClusterStatement.setInt(2, tenantId);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getClusterStatement);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ ResultSet resultSet = null;
+
+ try {
+ resultSet = getClusterStatement.executeQuery();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for retrieving CartridgeSubscription";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ Cluster cluster = null;
+ try {
+ if(resultSet.next()) {
+ cluster = populateCluster(resultSet);
+ }
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to populate CartridgeSubscription instance";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, getClusterStatement, resultSet);
+ }
+
+ return cluster;
+ }
+
+ @Override
+ public void updateSubscriptionStatus(int tenantId, String cartridgeAlias, String newStatus)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ PreparedStatement updateSubscriptionStatusStmt = null;
+
+ String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET SUBSCRIPTION_STATUS = ? " +
+ "WHERE TENANT_ID = ? AND ALIAS = ?";
+
+ try {
+ updateSubscriptionStatusStmt = connection.prepareStatement(insertDataCartridgeInfo);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateSubscriptionStatusStmt.setString(1, newStatus);
+ updateSubscriptionStatusStmt.setInt(2, tenantId);
+ updateSubscriptionStatusStmt.setString(3, cartridgeAlias);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateSubscriptionStatusStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, updateSubscriptionStatusStmt);
+ }
+
+ }
+
+ @Override
+ public void updateServiceStatus(int tenantId, String cartridgeAlias, String newStatus)
+ throws PersistenceManagerException {
+
+ Connection connection = null;
+ try {
+ connection = StratosDBUtils.getConnection();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to obtain a DB connection";
+ log.error(errorMsg);
+ StratosDBUtils.closeConnection(connection);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ PreparedStatement updateServiceStatusStmt = null;
+
+ String insertDataCartridgeInfo = "UPDATE CARTRIDGE_SUBSCRIPTION SET SUBSCRIPTION_STATUS = ? " +
+ "WHERE TENANT_ID = ? AND ALIAS = ?";
+
+ try {
+ updateServiceStatusStmt = connection.prepareStatement(insertDataCartridgeInfo);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed create a Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateServiceStatusStmt.setString(1, newStatus);
+ updateServiceStatusStmt.setInt(2, tenantId);
+ updateServiceStatusStmt.setString(3, cartridgeAlias);
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to add data to Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+ }
+
+ try {
+ updateServiceStatusStmt.executeUpdate();
+
+ } catch (SQLException e) {
+ String errorMsg = "Failed to execute the Prepared Statement for updating Domain Mapping";
+ log.error(errorMsg);
+ StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
+ throw new PersistenceManagerException(errorMsg, e);
+
+ } finally {
+ StratosDBUtils.closeAllConnections(connection, updateServiceStatusStmt);
+ }
+ }
+
+ private Cluster populateCluster (ResultSet resultSet) throws SQLException {
+
+ Cluster cluster = new Cluster();
+ cluster.setHostName(resultSet.getString("HOSTNAME"));
+ cluster.setClusterDomain(resultSet.getString("DOMAIN"));
+ cluster.setClusterSubDomain(resultSet.getString("SUBDOMAIN"));
+ cluster.setMgtClusterDomain(resultSet.getString("MGT_DOMAIN"));
+ cluster.setMgtClusterSubDomain(resultSet.getString("MGT_SUBDOMAIN"));
+ cluster.setServiceStatus(resultSet.getString("SERVICE_STATUS"));
+
+ return cluster;
+ }
+
+ @Override
+ public void removeDomainMapping(int tenantId, String cartridgeAlias)
+ throws PersistenceManagerException {
+
+ updateDomianMapping(tenantId, cartridgeAlias, null);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
new file mode 100644
index 0000000..c28f265
--- /dev/null
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/persistence/PersistenceManager.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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
+ *
+ * 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 org.apache.stratos.adc.mgt.persistence;
+
+import org.apache.stratos.adc.mgt.dao.Cluster;
+import org.apache.stratos.adc.mgt.dao.DataCartridge;
+import org.apache.stratos.adc.mgt.exception.PersistenceManagerException;
+import org.apache.stratos.adc.mgt.repository.Repository;
+import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+
+import java.util.List;
+
+public abstract class PersistenceManager {
+
+ public abstract void persistCartridgeSubscription (CartridgeSubscription cartridgeSubscription)
+ throws PersistenceManagerException;
+
+ public abstract void removeCartridgeSubscription (int tenantId, String alias)
+ throws PersistenceManagerException;
+
+ public abstract CartridgeSubscription getCartridgeSubscription(int tenantId, String alias)
+ throws PersistenceManagerException;
+
+ public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId)
+ throws PersistenceManagerException;
+
+ public abstract List<CartridgeSubscription> getCartridgeSubscriptions(int tenantId, String cartridgeType)
+ throws PersistenceManagerException;
+
+ public abstract Repository getRepository (int tenantId, String alias)
+ throws PersistenceManagerException;
+
+ public abstract Repository getRepository (String clusterDomain)
+ throws PersistenceManagerException;
+
+ public abstract DataCartridge getDataCartridgeSubscriptionInfo (int tenantId, String alias)
+ throws PersistenceManagerException;
+
+ public abstract boolean isAliasTaken (int tenantId, String alias)
+ throws PersistenceManagerException;
+
+ public abstract boolean hasSubscribed (int tenantId, String cartridgeType)
+ throws PersistenceManagerException;
+
+ public abstract void removeDomainMapping (int tenantId, String cartridgeAlias)
+ throws PersistenceManagerException;
+
+ public abstract void updateDomianMapping (int tenantId, String cartridgeAlias, String newDomain)
+ throws PersistenceManagerException;
+
+ public abstract String getMappedDomain (int tenantId, String cartridgeAlias)
+ throws PersistenceManagerException;
+
+ public abstract Cluster getCluster (int tenantId, String cartridgeAlias)
+ throws PersistenceManagerException;
+
+ public abstract void updateSubscriptionStatus (int tenantId, String cartridgeAlias, String newStatus)
+ throws PersistenceManagerException;
+
+ public abstract void updateServiceStatus (int tenantId, String cartridgeAlias, String newStatus)
+ throws PersistenceManagerException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
index 43b6bb5..dbd532e 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/repository/Repository.java
@@ -21,6 +21,7 @@ package org.apache.stratos.adc.mgt.repository;
public class Repository {
+ private int id;
private String url;
private String userName;
private String password;
@@ -57,4 +58,12 @@ public class Repository {
public void setPrivateRepository(boolean privateRepository) {
isPrivateRepository = privateRepository;
}
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
index afd3791..d1994ff 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/CartridgeSubscription.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.adc.mgt.custom.domain.RegistryManager;
import org.apache.stratos.adc.mgt.dao.CartridgeSubscriptionInfo;
+import org.apache.stratos.adc.mgt.dao.Cluster;
import org.apache.stratos.adc.mgt.dns.DNSManager;
import org.apache.stratos.adc.mgt.dto.Policy;
import org.apache.stratos.adc.mgt.exception.*;
@@ -43,20 +44,15 @@ import java.util.Properties;
public abstract class CartridgeSubscription {
private static Log log = LogFactory.getLog(CartridgeSubscription.class);
-
private int subscriptionId;
private String type;
private String alias;
- private String clusterDomain;
- private String clusterSubDomain;
- private String mgtClusterDomain;
- private String mgtClusterSubDomain;
- private String hostName;
private Policy autoscalingPolicy;
private Subscriber subscriber;
private Repository repository;
private CartridgeInfo cartridgeInfo;
private Payload payload;
+ private Cluster cluster;
private String subscriptionStatus;
private String mappedDomain;
private List<String> connectedSubscriptionAliases;
@@ -70,11 +66,12 @@ public abstract class CartridgeSubscription {
this.setCartridgeInfo(cartridgeInfo);
this.setType(cartridgeInfo.getType());
- this.setClusterDomain("");
- this.setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
- this.setMgtClusterDomain("");
- this.setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
- this.setHostName(cartridgeInfo.getHostName());
+ this.setCluster(new Cluster());
+ getCluster().setClusterDomain("");
+ getCluster().setClusterSubDomain(CartridgeConstants.DEFAULT_SUBDOMAIN);
+ getCluster().setMgtClusterDomain("");
+ getCluster().setMgtClusterSubDomain(CartridgeConstants.DEFAULT_MGT_SUBDOMAIN);
+ getCluster().setHostName(cartridgeInfo.getHostName());
this.setSubscriptionStatus(CartridgeConstants.SUBSCRIBED);
this.connectedSubscriptionAliases = new ArrayList<String>();
}
@@ -266,10 +263,10 @@ public abstract class CartridgeSubscription {
}
//TODO: FIXME: do we need this?
- new DNSManager().removeSubDomain(hostName);
+ new DNSManager().removeSubDomain(getCluster().getHostName());
try {
- new RegistryManager().removeDomainMappingFromRegistry(hostName);
+ new RegistryManager().removeDomainMappingFromRegistry(getCluster().getHostName());
} catch (Exception e) {
String errorMsg = "Error in removing domain mapping, alias " + alias + ", tenant " +
@@ -278,9 +275,9 @@ public abstract class CartridgeSubscription {
}
TopologyManagementService topologyMgtService = DataHolder.getTopologyMgtService();
- String[] ips = topologyMgtService.getActiveIPs(type, clusterDomain, clusterSubDomain);
+ String[] ips = topologyMgtService.getActiveIPs(type, getCluster().getClusterDomain(), getCluster().getClusterSubDomain());
try {
- PersistenceManager.updateInstanceState("INACTIVE", ips, clusterDomain, clusterSubDomain, type);
+ PersistenceManager.updateInstanceState("INACTIVE", ips, getCluster().getClusterDomain(), getCluster().getClusterSubDomain(), type);
} catch (Exception e) {
String errorMsg = "Error in updating state to INACTIVE";
@@ -315,7 +312,7 @@ public abstract class CartridgeSubscription {
}
public String getHostName() {
- return hostName;
+ return getCluster().getHostName();
}
public void setType(String type) {
@@ -327,39 +324,39 @@ public abstract class CartridgeSubscription {
}
public String getClusterDomain() {
- return clusterDomain;
+ return getCluster().getClusterDomain();
}
public void setClusterDomain(String clusterDomain) {
- this.clusterDomain = clusterDomain;
+ getCluster().setClusterDomain(clusterDomain);
}
public String getClusterSubDomain() {
- return clusterSubDomain;
+ return getCluster().getClusterSubDomain();
}
public void setClusterSubDomain(String clusterSubDomain) {
- this.clusterSubDomain = clusterSubDomain;
+ getCluster().setClusterSubDomain(clusterSubDomain);
}
public String getMgtClusterDomain() {
- return mgtClusterDomain;
+ return getCluster().getMgtClusterDomain();
}
public void setMgtClusterDomain(String mgtClusterDomain) {
- this.mgtClusterDomain = mgtClusterDomain;
+ getCluster().setMgtClusterDomain(mgtClusterDomain);
}
public String getMgtClusterSubDomain() {
- return mgtClusterSubDomain;
+ return getCluster().getMgtClusterSubDomain();
}
public void setMgtClusterSubDomain(String mgtClusterSubDomain) {
- this.mgtClusterSubDomain = mgtClusterSubDomain;
+ getCluster().setMgtClusterSubDomain(mgtClusterSubDomain);
}
public void setHostName(String hostName) {
- this.hostName = hostName;
+ getCluster().setHostName(hostName);
}
public Policy getAutoscalingPolicy() {
@@ -413,4 +410,12 @@ public abstract class CartridgeSubscription {
public void setSubscriptionStatus(String subscriptionStatus) {
this.subscriptionStatus = subscriptionStatus;
}
+
+ public Cluster getCluster() {
+ return cluster;
+ }
+
+ public void setCluster(Cluster cluster) {
+ this.cluster = cluster;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
index fcc7700..c905044 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/DataCartridgeSubscription.java
@@ -34,16 +34,16 @@ import java.util.Properties;
public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription {
- protected String host;
- protected String username;
- protected String password;
+ private String host;
+ private String username;
+ private String password;
public DataCartridgeSubscription(CartridgeInfo cartridgeInfo) {
super(cartridgeInfo);
- this.host = "localhost";
- this.username = CartridgeConstants.MYSQL_DEFAULT_USER;
- this.password = ApplicationManagementUtil.generatePassword();
+ this.setHost("localhost");
+ this.setUsername(CartridgeConstants.MYSQL_DEFAULT_USER);
+ this.setPassword(ApplicationManagementUtil.generatePassword());
}
@Override
@@ -69,8 +69,8 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
PayloadArg payloadArg = super.createPayloadParameters();
payloadArg.setDataCartridgeHost(this.getHost());
- payloadArg.setDataCartridgeAdminUser(username);
- payloadArg.setDataCartridgeAdminPassword(password);
+ payloadArg.setDataCartridgeAdminUser(getUsername());
+ payloadArg.setDataCartridgeAdminPassword(getPassword());
return payloadArg;
}
@@ -79,25 +79,25 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
throws ADCException, UnregisteredCartridgeException {
ApplicationManagementUtil.registerService(getType(),
- getClusterDomain(),
- getClusterSubDomain(),
+ getCluster().getClusterDomain(),
+ getCluster().getClusterSubDomain(),
getPayload().createPayload(),
getPayload().getPayloadArg().getTenantRange(),
- getHostName(),
+ getCluster().getHostName(),
ApplicationManagementUtil.setRegisterServiceProperties(getAutoscalingPolicy(),
getSubscriber().getTenantId(), getAlias()));
getPayload().delete();
DataCartridge dataCartridge = new DataCartridge();
- dataCartridge.setUserName(username);
- dataCartridge.setPassword(password);
+ dataCartridge.setUserName(getUsername());
+ dataCartridge.setPassword(getPassword());
dataCartridge.setDataCartridgeType(getType());
return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
- getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
- getMgtClusterDomain(), getMgtClusterSubDomain(), dataCartridge, "PENDING");
+ getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+ getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), dataCartridge, "PENDING");
}
public String getHost() {
@@ -107,4 +107,20 @@ public class DataCartridgeSubscription extends SingleTenantCartridgeSubscription
public void setHost(String host) {
this.host = host;
}
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/c658beb2/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
index 4e7796d..a9a1a6c 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/subscription/MultiTenantCartridgeSubscription.java
@@ -92,11 +92,11 @@ public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
for (DomainContext domainContext : domainContexts) {
if (domainContext.getSubDomain().equalsIgnoreCase("mgt")) {
- setMgtClusterDomain(domainContext.getDomain());
- setMgtClusterSubDomain(domainContext.getSubDomain());
+ getCluster().setMgtClusterDomain(domainContext.getDomain());
+ getCluster().setMgtClusterSubDomain(domainContext.getSubDomain());
} else {
- setClusterDomain(domainContext.getDomain());
- setClusterSubDomain(domainContext.getSubDomain());
+ getCluster().setClusterDomain(domainContext.getDomain());
+ getCluster().setClusterSubDomain(domainContext.getSubDomain());
}
}
} else {
@@ -121,8 +121,8 @@ public class MultiTenantCartridgeSubscription extends CartridgeSubscription {
return ApplicationManagementUtil.createCartridgeSubscription(getCartridgeInfo(), getAutoscalingPolicy(),
getType(), getAlias(), getSubscriber().getTenantId(), getSubscriber().getTenantDomain(),
- getRepository(), getHostName(), getClusterDomain(), getClusterSubDomain(),
- getMgtClusterDomain(), getMgtClusterSubDomain(), null, "PENDING");
+ getRepository(), getCluster().getHostName(), getCluster().getClusterDomain(), getCluster().getClusterSubDomain(),
+ getCluster().getMgtClusterDomain(), getCluster().getMgtClusterSubDomain(), null, "PENDING");
}
@Override