Author: chathura
Date: Tue Dec 18 21:22:25 2007
New Revision: 11470

Log:


Implemented the support for switching databases at runtime.
Now we can add database configurations using the UI and switch to any such 
configuration by just clicking on the config!



Modified:
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryConfiguration.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/HSQLDBInitializer.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
   
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/registry.xml
   trunk/registry/modules/webapps/conf/web.xml
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/AdminUtil.java
   
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/CommonUtil.java

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryConfiguration.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryConfiguration.java
       (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/config/RegistryConfiguration.java
       Tue Dec 18 21:22:25 2007
@@ -37,7 +37,7 @@
 
 public class RegistryConfiguration {
 
-    private DataBaseConfiguration deafultDataBaseConfiguration = null;
+    private DataBaseConfiguration defaultDataBaseConfiguration = null;
     private Map dbconfgigMap = new HashMap();
 
     /**
@@ -72,6 +72,7 @@
             StAXOMBuilder buillder = new StAXOMBuilder(in);
             OMElement configElement = buillder.getDocumentElement();
             if (configElement != null) {
+
                 Iterator dbconfgs = configElement.getChildrenWithName(new 
QName("dbconfig"));
                 while (dbconfgs.hasNext()) {
                     OMElement dbconfig = (OMElement) dbconfgs.next();
@@ -111,12 +112,19 @@
                     }
 
                     dbconfgigMap.put(dbName, dataBaseConfiguration);
+                }
 
-                    String defaultConfig = dbconfig.getAttributeValue(new 
QName("default"));
-                    if (defaultConfig != null && 
defaultConfig.equalsIgnoreCase("true")) {
-                        setDeafultDataBaseConfiguration(dataBaseConfiguration);
-                    }
+                OMElement currentConfigElement =
+                        configElement.getFirstChildWithName(new 
QName("currentConfig"));
+                if (currentConfigElement == null) {
+                    String msg = "Current database configuration is not 
defined.";
+                    throw new RegistryException(msg);
                 }
+
+                String currentConfigName = currentConfigElement.getText();
+                DataBaseConfiguration currentConfiguration =
+                        getDataBaseConfiguration(currentConfigName);
+                setDefaultDataBaseConfiguration(currentConfiguration);
             }
 
         } catch (XMLStreamException e) {
@@ -138,23 +146,29 @@
 
     public OMElement getRegistryConfigAsXML() {
         
-        OMFactory factoty = OMAbstractFactory.getOMFactory();
-        OMElement root = factoty.createOMElement("wso2regsitry", null);
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        OMElement root = factory.createOMElement("wso2regsitry", null);
+
+        if (getDefaultDataBaseConfiguration() != null) {
+            OMElement currrentConfigElement = 
factory.createOMElement("currentConfig", null);
+            
currrentConfigElement.setText(getDefaultDataBaseConfiguration().getConfigName());
+            root.addChild(currrentConfigElement);
+        }
+
         Iterator values = dbconfgigMap.values().iterator();
-        
         while (values.hasNext()) {
             DataBaseConfiguration dataBaseConfiguration = 
(DataBaseConfiguration) values.next();
-            OMElement config = factoty.createOMElement("dbconfig", null);
-            OMElement url = factoty.createOMElement("url", null);
+            OMElement config = factory.createOMElement("dbconfig", null);
+            OMElement url = factory.createOMElement("url", null);
             url.setText(dataBaseConfiguration.getDbUrl());
             config.addChild(url);
-            OMElement userName = factoty.createOMElement("userName", null);
+            OMElement userName = factory.createOMElement("userName", null);
             userName.setText(dataBaseConfiguration.getUserName());
             config.addChild(userName);
-            OMElement password = factoty.createOMElement("password", null);
+            OMElement password = factory.createOMElement("password", null);
             password.setText(dataBaseConfiguration.getPassWord());
             config.addChild(password);
-            OMElement driverName = factoty.createOMElement("driverName", null);
+            OMElement driverName = factory.createOMElement("driverName", null);
             driverName.setText(dataBaseConfiguration.getDriverName());
             config.addChild(driverName);
             config.addAttribute("name", dataBaseConfiguration.getConfigName(), 
null);
@@ -163,12 +177,12 @@
         return root;
     }
 
-    public DataBaseConfiguration getDeafultDataBaseConfiguration() {
-        return deafultDataBaseConfiguration;
+    public DataBaseConfiguration getDefaultDataBaseConfiguration() {
+        return defaultDataBaseConfiguration;
     }
 
-    public void setDeafultDataBaseConfiguration(DataBaseConfiguration 
deafultDataBaseConfiguration) {
-        this.deafultDataBaseConfiguration = deafultDataBaseConfiguration;
+    public void setDefaultDataBaseConfiguration(DataBaseConfiguration 
deafultDataBaseConfiguration) {
+        this.defaultDataBaseConfiguration = deafultDataBaseConfiguration;
     }
 
     public Map getDbconfgigMap() {

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
  (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/jdbc/hsql/DBUtils.java
  Tue Dec 18 21:22:25 2007
@@ -19,33 +19,31 @@
 
 package org.wso2.registry.jdbc.hsql;
 
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
+import java.sql.*;
 
 public class DBUtils {
 
     private static final String artifactsTable = "CREATE TABLE ARTIFACTS (AID 
INTEGER GENERATED BY DEFAULT AS IDENTITY," +
-                "PATH VARCHAR (500) NOT NULL," +
-                "MEDIA_TYPE VARCHAR (500)," +
-                "DIRECTORY INTEGER NOT NULL," +
-                "STATE INTEGER," +
-                "AUTHOR VARCHAR (500)," +
-                "CREATED_TIME TIMESTAMP," +
-                "LAST_UPDATER VARCHAR (500)," +
-                "LAST_UPDATED_TIME TIMESTAMP," +
-                "DESCRIPTION VARCHAR (500)," +
-                "CONTENT BINARY," +
-                "PRIMARY KEY (AID)," +
-                "UNIQUE(PATH))";
+            "PATH VARCHAR (500) NOT NULL," +
+            "MEDIA_TYPE VARCHAR (500)," +
+            "DIRECTORY INTEGER NOT NULL," +
+            "STATE INTEGER," +
+            "AUTHOR VARCHAR (500)," +
+            "CREATED_TIME TIMESTAMP," +
+            "LAST_UPDATER VARCHAR (500)," +
+            "LAST_UPDATED_TIME TIMESTAMP," +
+            "DESCRIPTION VARCHAR (500)," +
+            "CONTENT BINARY," +
+            "PRIMARY KEY (AID)," +
+            "UNIQUE(PATH))";
 
     private static final String propertiesTable = "CREATE TABLE PROPERTIES 
(P_ID INTEGER GENERATED BY DEFAULT AS IDENTITY," +
-                "AID INTEGER NOT NULL," +
-                "PKEY VARCHAR (100) NOT NULL," +
-                "PVALUE VARCHAR (500) NOT NULL," +
-                "PRIMARY KEY (P_ID)," +
-                "UNIQUE (AID, PKEY)," +
-                "FOREIGN KEY (AID) REFERENCES ARTIFACTS (AID))";
+            "AID INTEGER NOT NULL," +
+            "PKEY VARCHAR (100) NOT NULL," +
+            "PVALUE VARCHAR (500) NOT NULL," +
+            "PRIMARY KEY (P_ID)," +
+            "UNIQUE (AID, PKEY)," +
+            "FOREIGN KEY (AID) REFERENCES ARTIFACTS (AID))";
 
     private static final String childrenTable = "CREATE TABLE CHILDREN (CID 
INTEGER GENERATED BY DEFAULT AS IDENTITY," +
             "PARENT_ID INTEGER NOT NULL," +
@@ -61,7 +59,7 @@
             "USER_ID VARCHAR (20) NOT NULL," +
             "TAGGED_TIME TIMESTAMP NOT NULL," +
             "PRIMARY KEY (TN_ID)," +
-            "UNIQUE (TAG_NAME, AID, USER_ID)," +            
+            "UNIQUE (TAG_NAME, AID, USER_ID)," +
             "FOREIGN KEY (AID) REFERENCES ARTIFACTS (AID))";
 
     private static final String commentsTable = "CREATE TABLE COMMENTS (CM_ID 
INTEGER GENERATED BY DEFAULT AS IDENTITY," +
@@ -108,6 +106,17 @@
 
     public void initializeDatabase(Connection conn) throws SQLException {
 
+        DatabaseMetaData metaData = conn.getMetaData();
+        ResultSet result = metaData.getTables(null, null, "artifacts", null);
+        if(result.next()) {
+            return;
+        }
+
+        ResultSet result2 = metaData.getTables(null, null, "ARTIFACTS", null);
+        if(result2.next()) {
+            return;
+        }
+
         Statement s = conn.createStatement();
         s.executeUpdate(artifactsTable);
         s.executeUpdate(propertiesTable);
@@ -119,7 +128,7 @@
         s.executeUpdate(logsTable);
 
         //creating version related tables
-         s.executeUpdate(versionTable);
-         s.executeUpdate(dependencyTable);
+        s.executeUpdate(versionTable);
+        s.executeUpdate(dependencyTable);
     }
 }

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/HSQLDBInitializer.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/HSQLDBInitializer.java
   (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/secure/HSQLDBInitializer.java
   Tue Dec 18 21:22:25 2007
@@ -51,6 +51,12 @@
                 log.info("User Manager tables were already created.");
                 return;
             }
+
+            ResultSet result2 = metaData.getTables(null, null, "UM_USERS", 
null);
+            if(result2.next()) {
+                log.info("User Manager tables were already created.");
+                return;
+            }
             
         } catch (SQLException e) {
             String msg = "Could not get the metadata of the User Manager 
database.";

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
    (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/RegistryServlet.java
    Tue Dec 18 21:22:25 2007
@@ -75,7 +75,7 @@
                     setAttribute(RegistryConstants.REGISTRY_CONFIG, 
registryConfiguration);
 
             DataBaseConfiguration dbConfiguration =
-                    registryConfiguration.getDeafultDataBaseConfiguration();
+                    registryConfiguration.getDefaultDataBaseConfiguration();
 
             if (dbConfiguration.getConfigName().equals("in-memory")) {
                 registryRealm = new InMemoryRegistryRealm();

Modified: 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/registry.xml
==============================================================================
--- 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/registry.xml
    (original)
+++ 
trunk/registry/modules/core/src/main/java/org/wso2/registry/servlet/registry.xml
    Tue Dec 18 21:22:25 2007
@@ -1,6 +1,8 @@
 <wso2regsitry>
+
+    <currentConfig>in-memory</currentConfig>
     
-    <dbconfig name="in-memory" default="true">
+    <dbconfig name="in-memory">
     </dbconfig>
 
     <dbconfig name="DB1">

Modified: trunk/registry/modules/webapps/conf/web.xml
==============================================================================
--- trunk/registry/modules/webapps/conf/web.xml (original)
+++ trunk/registry/modules/webapps/conf/web.xml Tue Dec 18 21:22:25 2007
@@ -35,10 +35,10 @@
         <servlet-name>WebServlet</servlet-name>
         <url-pattern>/web/*</url-pattern>
     </servlet-mapping>
-    <servlet-mapping>
+    <!-- servlet-mapping>
         <servlet-name>WebServlet</servlet-name>
         <url-pattern>/</url-pattern>
-    </servlet-mapping>
+    </servlet-mapping -->
     <servlet-mapping>
         <servlet-name>WebServlet</servlet-name>
         <url-pattern>/system/*</url-pattern>

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/ControllerServlet.java
   Tue Dec 18 21:22:25 2007
@@ -332,13 +332,6 @@
 
                 AdminUtil.addDBURLBasedConfiguration(request, response);
 
-            } else if (command.equals("/removeDBConfig")) {
-
-                AdminUtil.removeDBConfiguration(request, response);
-
-            } else if (command.equals("/applyConfig")) {
-
-                AdminUtil.removeDBConfiguration(request, response);
             }
         }
     }
@@ -638,6 +631,21 @@
                 response.getWriter().write(mediaTypes);
 
                 return;
+
+            } else if (command.equals("/removeDBConfig")) {
+
+                AdminUtil.removeDBConfiguration(request, response);
+
+            } else if (command.equals("/applyConfig")) {
+
+                try {
+                    AdminUtil.applyDBConfiguration(request, response);
+                } catch (RegistryException e) {
+                    setErrorMessage(request, e.getMessage());
+                    forwardToAdmin(request, response);
+                }
+
+                response.sendRedirect("/wso2registry/web/");
             }
 
         }

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/AdminUtil.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/AdminUtil.java
     (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/AdminUtil.java
     Tue Dec 18 21:22:25 2007
@@ -21,10 +21,23 @@
 import org.wso2.registry.config.RegistryConfiguration;
 import org.wso2.registry.config.DataBaseConfiguration;
 import org.wso2.registry.RegistryConstants;
+import org.wso2.registry.Registry;
+import org.wso2.registry.RegistryException;
+import org.wso2.registry.secure.SecureRegistry;
+import org.wso2.registry.jdbc.utils.RegistryDataSource;
+import org.wso2.registry.jdbc.realm.RegistryRealm;
+import org.wso2.registry.jdbc.realm.InMemoryRegistryRealm;
+import org.wso2.registry.jdbc.InMemoryJDBCRegistry;
+import org.wso2.registry.jdbc.JDBCRegistry;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+import javax.sql.DataSource;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import java.util.Map;
 import java.io.IOException;
 
@@ -87,14 +100,72 @@
         }
     }
 
-    public static void applyDBConfiguration(HttpServletRequest request, 
HttpServletResponse response) {
+    public static void applyDBConfiguration(
+            HttpServletRequest request,
+            HttpServletResponse response)
+            throws RegistryException {
 
-        RegistryConfiguration regConfiguration = (RegistryConfiguration) 
request.getSession().
-                
getServletContext().getAttribute(RegistryConstants.REGISTRY_CONFIG);
+        ServletContext servletContext = 
request.getSession().getServletContext();
 
-        DataBaseConfiguration dataBaseConfiguration =
+        RegistryConfiguration regConfiguration = (RegistryConfiguration) 
servletContext.
+                getAttribute(RegistryConstants.REGISTRY_CONFIG);
+
+        DataBaseConfiguration dbConfiguration =
                 
regConfiguration.getDataBaseConfiguration(request.getParameter("config"));
-        
regConfiguration.setDeafultDataBaseConfiguration(dataBaseConfiguration);
+        regConfiguration.setDefaultDataBaseConfiguration(dbConfiguration);
+
+        RegistryRealm registryRealm;
+        Registry coreRegistry;
+
+        if (dbConfiguration.getConfigName().equals("in-memory")) {
+            registryRealm = new InMemoryRegistryRealm();
+            coreRegistry = new InMemoryJDBCRegistry(registryRealm);
+
+        } else {
+
+            DataSource dataSource;
+
+            if (dbConfiguration.getDataSourceName() != null &&
+                    dbConfiguration.getDataSourceName().length() > 0) {
+                try {
+                    Context context = new InitialContext();
+                    dataSource =
+                            (DataSource) 
context.lookup(dbConfiguration.getDataSourceName());
+
+                } catch (NamingException e) {
+
+                    String msg = "Could not find the specified data source 
named: " +
+                            dbConfiguration.getDataSourceName() + ". Caused 
by: " +
+                            e.getMessage();
+                    throw new RegistryException(msg);
+                }
+
+            } else {
+
+                dataSource = new RegistryDataSource(
+                        dbConfiguration.getDbUrl(),
+                        dbConfiguration.getDriverName(),
+                        dbConfiguration.getUserName(),
+                        dbConfiguration.getPassWord());
+            }
+
+            registryRealm = new RegistryRealm(dataSource);
+            coreRegistry = new JDBCRegistry(dataSource, registryRealm);
+        }
+
+        // create a system registry and put it in the context
+        SecureRegistry systemRegistry =
+                new SecureRegistry(RegistryConstants.SYSTEM_USER,
+                        RegistryConstants.SYSTEM_PASSWORD,
+                        coreRegistry,
+                        registryRealm);
+
+        servletContext.setAttribute(RegistryConstants.REGISTRY, coreRegistry);
+        servletContext.setAttribute(RegistryConstants.REGISTRY_REALM, 
registryRealm);
+        System.getProperties().put(RegistryConstants.REGISTRY, coreRegistry);
+        System.getProperties().put(RegistryConstants.SYSTEM_REGISTRY, 
systemRegistry);
+
+        CommonUtil.invalidateAllSessions(request);
 
         try {
             
request.getRequestDispatcher(UIConstants.ADMIN_JSP).forward(request, response);

Modified: 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/CommonUtil.java
==============================================================================
--- 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/CommonUtil.java
    (original)
+++ 
trunk/registry/modules/webapps/src/main/java/org/wso2/registry/web/utils/CommonUtil.java
    Tue Dec 18 21:22:25 2007
@@ -57,4 +57,9 @@
 
         return userRegistry;
     }
+
+    public static void invalidateAllSessions(HttpServletRequest request) {
+
+        request.getSession().invalidate();
+    }
 }

_______________________________________________
Registry-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/registry-dev

Reply via email to