[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