[Carbon-commits] [Carbon] svn commit r110796 - in trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource: . internal multitenancy
kalpanie at wso2.com
kalpanie at wso2.com
Tue Jul 26 07:24:48 EDT 2011
Author: kalpanie
Date: Tue Jul 26 04:24:48 2011
New Revision: 110796
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=110796
Log:
adding datasource listeners
Modified:
trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/DataSourceInformationManager.java
trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/internal/DataSourceServiceComponent.java
trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/multitenancy/DataSourceInitializer.java
Modified: trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/DataSourceInformationManager.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/DataSourceInformationManager.java?rev=110796&r1=110795&r2=110796&view=diff
==============================================================================
--- trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/DataSourceInformationManager.java (original)
+++ trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/DataSourceInformationManager.java Tue Jul 26 04:24:48 2011
@@ -27,12 +27,9 @@
import org.apache.synapse.commons.datasource.factory.DataSourceInformationRepositoryFactory;
import org.wso2.carbon.core.RegistryResources;
import org.wso2.carbon.core.multitenancy.SuperTenantCarbonContext;
-import org.wso2.carbon.datasource.internal.DataSourceServiceComponent;
import org.wso2.carbon.registry.core.Collection;
import org.wso2.carbon.registry.core.*;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.wso2.carbon.user.api.Tenant;
-import org.wso2.carbon.user.api.UserStoreException;
import javax.sql.DataSource;
import java.io.InputStream;
@@ -42,25 +39,30 @@
import java.util.*;
/**
- *
+ * Data source information manager class.
*/
public class DataSourceInformationManager {
private final static Log log = LogFactory.getLog(DataSourceInformationManager.class);
- private DataSourceInformationRepository repository = DataSourceRepositoryHandler.getInstance().
- getRepositoryMap().get(SuperTenantCarbonContext.getCurrentContext().getTenantId());
-
- private Registry registry = null;
+ private DataSourceInformationRepository repository;
+
+ private Registry registry;
private final static String ROOT_PATH = RegistryResources.COMPONENTS
+ "org.wso2.carbon.datasource";
-
- private static DataSourceInformationManager thisInstance = new DataSourceInformationManager();
+
+ private static Map<Integer, DataSourceInformationManager> instanceMap = new HashMap<Integer, DataSourceInformationManager>();
public static DataSourceInformationManager getDataSourceInformationManager() {
- return thisInstance;
+ int tenantId = SuperTenantCarbonContext.getCurrentContext().getTenantId();
+ DataSourceInformationManager instance = instanceMap.get(tenantId);
+ if (instance == null) {
+ instance = new DataSourceInformationManager();
+ instanceMap.put(tenantId, instance);
+ }
+ return instance;
}
public void setRegistry(Registry registry) {
@@ -141,9 +143,7 @@
}
public void addDataSourceInformation(DataSourceInformation information) {
- int tenantId = SuperTenantCarbonContext.getCurrentContext().getTenantId();
repository.addDataSourceInformation(information);
- DataSourceRepositoryHandler.getInstance().getRepositoryMap().put(tenantId, repository);
}
public void persistDataSourceInformation(String name, OMElement element) {
@@ -174,10 +174,7 @@
DataSourceRepositoryHandler.getInstance().getRepositoryMap().entrySet()) {
DataSourceInformationRepository repo = repoEntry.getValue();
if (repo.getDataSourceInformation(name) != null) {
- DataSourceInformation info = repo.removeDataSourceInformation(name);
- DataSourceRepositoryHandler.getInstance().getRepositoryMap().put(
- repoEntry.getKey(), repo);
- return info;
+ return repo.removeDataSourceInformation(name);
}
}
return null;
@@ -203,31 +200,6 @@
public Iterator<DataSourceInformation> getAllDataSourceInformation(
Map<Integer, DataSourceInformationRepository> repoMap) throws DataSourceManagementException {
int tenantId = SuperTenantCarbonContext.getCurrentContext().getTenantId();
- if (tenantId == 0) {
- try {
- Tenant[] tenants = DataSourceServiceComponent.getTenantManager().getAllTenants();
- List<Integer> allTenantIds = new ArrayList<Integer>();
- allTenantIds.add(0);
- for (Tenant t : tenants) {
- allTenantIds.add(t.getId());
- }
-
- Set<Integer> existingTenantIds = repoMap.keySet();
- List<DataSourceInformation> dataSources = new ArrayList<DataSourceInformation>();
- for (Integer i : existingTenantIds) {
- if (allTenantIds.contains(i)) {
- Iterator<DataSourceInformation> itr = repoMap.get(i).
- getAllDataSourceInformation();
- while (itr.hasNext()) {
- dataSources.add(itr.next());
- }
- }
- }
- return dataSources.iterator();
- } catch (UserStoreException e) {
- throw new DataSourceManagementException("Unable to retrive the tenant list");
- }
- }
return repoMap.get(tenantId).getAllDataSourceInformation();
}
Modified: trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/internal/DataSourceServiceComponent.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/internal/DataSourceServiceComponent.java?rev=110796&r1=110795&r2=110796&view=diff
==============================================================================
--- trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/internal/DataSourceServiceComponent.java (original)
+++ trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/internal/DataSourceServiceComponent.java Tue Jul 26 04:24:48 2011
@@ -48,7 +48,9 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
/**
* @scr.component name="org.wso2.carbon.datasource" immediate="true"
@@ -86,20 +88,6 @@
private static RealmService realmService;
- private static List<String> JNDIProviderPort;
-
- private static int CARBON_DEFAULT_PORT_OFFSET = 0;
-
- private static String CARBON_CONFIG_PORT_OFFSET_NODE = "Ports.Offset";
-
- private static String CARBON_CONFIG_PORT_JNDI_PROVIDER_NODE = "Ports.JNDIProviderPort";
-
- private static String DATA_SOURCE_PROPERTIES_JNDI_PROVIDER_PORT = "synapse.datasources.providerPort";
-
- private static String DATA_SOURCE_REPOSITORY_MAP = "repositoryMap";
-
- private int portOffset = 0;
-
protected void activate(ComponentContext cmpCtx) throws Exception {
if (registryService != null) {
int tenantId = SuperTenantCarbonContext.getCurrentContext(
@@ -124,13 +112,8 @@
DataSourceInformationRepository repo = getDSFromCarbonDSConfig();
dataSourceInformationManager.setRepository(repo);
- DataSourceInformationRepository repository
- = dataSourceInformationManager.getRepository();
-
- @SuppressWarnings("unchecked")
- Map<Integer, DataSourceInformationRepository> repositoryMap =
- (Map<Integer, DataSourceInformationRepository>) configurationContext.
- getProperty(DataSourceServiceComponent.DATA_SOURCE_REPOSITORY_MAP);
+ Map<Integer, DataSourceInformationRepository> repositoryMap = repoHandler.
+ getRepositoryMap();
if (repositoryMap == null) {
repositoryMap = new HashMap<Integer, DataSourceInformationRepository>();
repositoryMap.put(tenantId, repo);
@@ -197,25 +180,8 @@
String carbonConfDir = CarbonUtils.getCarbonConfigDirPath();
String propertiesFile = carbonConfDir + File.separator +
DATA_SOURCE_PROPERTIES;
-
- Properties props = loadProperties(propertiesFile);
-
- // Read Port Offset
- portOffset = readPortOffset();
-
- if (CarbonUtils.getServerConfiguration().getFirstProperty(CARBON_CONFIG_PORT_JNDI_PROVIDER_NODE) != null) {
-
- //reading JNDIProviderPort from carbon.xml
- JNDIProviderPort = Arrays.asList(CarbonUtils.getServerConfiguration().getProperties(CARBON_CONFIG_PORT_JNDI_PROVIDER_NODE));
- props.setProperty(DATA_SOURCE_PROPERTIES_JNDI_PROVIDER_PORT, Integer.toString(Integer.parseInt(JNDIProviderPort.get(0)) + portOffset));
-
- } else {
- props = loadProperties(propertiesFile);
- props.setProperty(DATA_SOURCE_PROPERTIES_JNDI_PROVIDER_PORT, Integer.toString(Integer.parseInt(props.getProperty(DATA_SOURCE_PROPERTIES_JNDI_PROVIDER_PORT)) + portOffset));
- }
-
- return DataSourceInformationRepositoryFactory.createDataSourceInformationRepository(props);
-
+ return DataSourceInformationRepositoryFactory.createDataSourceInformationRepository(
+ loadProperties(propertiesFile));
} else {
DataSourceInformationRepository repo = new DataSourceInformationRepository();
repo.setRepositoryListener(new DataSourceRepositoryManager(
@@ -250,23 +216,13 @@
}
}
return properties;
- }
-
- private int readPortOffset() {
-
- String portOffset = CarbonUtils.getServerConfiguration().getFirstProperty(CARBON_CONFIG_PORT_OFFSET_NODE);
-
- try {
- return ((portOffset != null) ? Integer.parseInt(portOffset.trim()) : CARBON_DEFAULT_PORT_OFFSET);
- } catch (NumberFormatException e) {
- return CARBON_DEFAULT_PORT_OFFSET;
- }
- }
+ }
private void handleException(String msg) {
log.error(msg);
throw new IllegalArgumentException(msg);
}
+
protected void setSecretCallbackHandlerService(
SecretCallbackHandlerService secretCallbackHandlerService) {
Modified: trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/multitenancy/DataSourceInitializer.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/multitenancy/DataSourceInitializer.java?rev=110796&r1=110795&r2=110796&view=diff
==============================================================================
--- trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/multitenancy/DataSourceInitializer.java (original)
+++ trunk/carbon/components/data-sources/org.wso2.carbon.datasource/src/main/java/org/wso2/carbon/datasource/multitenancy/DataSourceInitializer.java Tue Jul 26 04:24:48 2011
@@ -30,15 +30,21 @@
import org.wso2.carbon.utils.AbstractAxis2ConfigurationContextObserver;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.Vector;
public class DataSourceInitializer extends AbstractAxis2ConfigurationContextObserver {
private static final Log log = LogFactory.getLog(DataSourceInitializer.class);
+
+ private static Map<Integer, List<DataSourceRepositoryListener>> dsrListenerMap = new HashMap<Integer, List<DataSourceRepositoryListener>>();
public void createdConfigurationContext(ConfigurationContext configurationContext) {
- int tenatId = SuperTenantCarbonContext.getCurrentContext(
+ int tenatId = SuperTenantCarbonContext.getCurrentContext(
configurationContext).getTenantId();
+ SuperTenantCarbonContext.startTenantFlow();
+ SuperTenantCarbonContext.getCurrentContext().setTenantId(tenatId);
DataSourceInformationManager dataSourceInformationManager = DataSourceInformationManager.
getDataSourceInformationManager();
DataSourceInformationRepository repository = new DataSourceInformationRepository();
@@ -58,11 +64,41 @@
getRepositoryMap();
if (repositoryMap == null) {
repositoryMap = new HashMap<Integer, DataSourceInformationRepository>();
- repositoryMap.put(tenatId, dataSourceInformationManager.getRepository());
repoHandler.setDataSourceRepositoryMap(repositoryMap);
+ synchronized (repositoryMap) {
+ repositoryMap.put(tenatId, dataSourceInformationManager.getRepository());
+ }
} else {
- repoHandler.addDataSourceRepository(tenatId, repository);
+ synchronized (repositoryMap) {
+ repoHandler.addDataSourceRepository(tenatId, repository);
+ }
}
+ List<DataSourceRepositoryListener> dsrListeners = dsrListenerMap.get(tenatId);
+ if (dsrListeners != null) {
+ /* notify the listeners */
+ for (DataSourceRepositoryListener dsrListener : dsrListeners) {
+ dsrListener.setDataSourceRepository(repository);
+ }
+ dsrListenerMap.remove(tenatId);
+ }
+ SuperTenantCarbonContext.endTenantFlow();
+ }
+
+ public static void addDataSourceRepositoryListener(int tenantId, DataSourceRepositoryListener listener) {
+ Map<Integer, DataSourceInformationRepository> repositoryMap = DataSourceRepositoryHandler.getInstance().getRepositoryMap();
+ synchronized (repositoryMap) {
+ DataSourceInformationRepository repo = repositoryMap.get(tenantId);
+ if (repo != null) {
+ listener.setDataSourceRepository(repo);
+ } else {
+ List<DataSourceRepositoryListener> listeners = dsrListenerMap.get(tenantId);
+ if (listeners == null) {
+ listeners = new Vector<DataSourceRepositoryListener>();
+ dsrListenerMap.put(tenantId, listeners);
+ }
+ listeners.add(listener);
+ }
+ }
}
}
More information about the Carbon-commits
mailing list