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