Add support for Oracle database
Change-Id: I2695c6df6e9eafeeae8cd68a84ef74f5e2c361ac
This commit is contained in:
		| @@ -63,3 +63,48 @@ rights on it: | |||||||
|  |  | ||||||
| Visit MySQL's link:http://dev.mysql.com/doc/[documentation] for further | Visit MySQL's link:http://dev.mysql.com/doc/[documentation] for further | ||||||
| information regarding using MySQL. | information regarding using MySQL. | ||||||
|  |  | ||||||
|  | [[createdb_oracle]] | ||||||
|  | Oracle | ||||||
|  | ~~~~~~ | ||||||
|  |  | ||||||
|  | PostgreSQL or H2 is the recommended database for Gerrit Code Review. | ||||||
|  | Oracle is supported for environments where running on an existing Oracle | ||||||
|  | installation simplifies administrative overheads, such as database backups. | ||||||
|  |  | ||||||
|  | Create a user for the web application within sqlplus, assign it a | ||||||
|  | password, and grant the user full rights on the newly created database: | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |   SQL> create user gerrit2 identified by secret_password default tablespace users; | ||||||
|  |   SQL> grant connect, resources to gerrit2; | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | JDBC driver ojdbc6.jar must be obtained from your Oracle distribution. Gerrit | ||||||
|  | initialization process tries to copy it from a known location: | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | /u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | If this file can not be located at this place, then the alternative location | ||||||
|  | can be provided. | ||||||
|  |  | ||||||
|  | Instance name is the Oracle SID. Sample database section in | ||||||
|  | $site_path/etc/gerrit.config: | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | [database] | ||||||
|  |         type = oracle | ||||||
|  |         instance = xe | ||||||
|  |         hostname = localhost | ||||||
|  |         username = gerrit2 | ||||||
|  |         port = 1521 | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | Sample database section in $site_path/etc/secure.config: | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | [database] | ||||||
|  |         password = secret_pasword | ||||||
|  | ---- | ||||||
|   | |||||||
| @@ -35,6 +35,8 @@ public class DatabaseConfigModule extends AbstractModule { | |||||||
|         Names.named("jdbc")).to(JDBCInitializer.class); |         Names.named("jdbc")).to(JDBCInitializer.class); | ||||||
|     bind(DatabaseConfigInitializer.class).annotatedWith( |     bind(DatabaseConfigInitializer.class).annotatedWith( | ||||||
|         Names.named("mysql")).to(MySqlInitializer.class); |         Names.named("mysql")).to(MySqlInitializer.class); | ||||||
|  |     bind(DatabaseConfigInitializer.class).annotatedWith( | ||||||
|  |         Names.named("oracle")).to(OracleInitializer.class); | ||||||
|     bind(DatabaseConfigInitializer.class).annotatedWith( |     bind(DatabaseConfigInitializer.class).annotatedWith( | ||||||
|         Names.named("postgresql")).to(PostgreSQLInitializer.class); |         Names.named("postgresql")).to(PostgreSQLInitializer.class); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -79,6 +79,8 @@ class InitDatabase implements InitStep { | |||||||
|  |  | ||||||
|     if (dci instanceof MySqlInitializer) { |     if (dci instanceof MySqlInitializer) { | ||||||
|       libraries.mysqlDriver.downloadRequired(); |       libraries.mysqlDriver.downloadRequired(); | ||||||
|  |     } else if (dci instanceof OracleInitializer) { | ||||||
|  |       libraries.oracleDriver.downloadRequired(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     dci.initConfig(database); |     dci.initConfig(database); | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ class Libraries { | |||||||
|  |  | ||||||
|   /* final */LibraryDownloader bouncyCastle; |   /* final */LibraryDownloader bouncyCastle; | ||||||
|   /* final */LibraryDownloader mysqlDriver; |   /* final */LibraryDownloader mysqlDriver; | ||||||
|  |   /* final */LibraryDownloader oracleDriver; | ||||||
|  |  | ||||||
|   @Inject |   @Inject | ||||||
|   Libraries(final Provider<LibraryDownloader> downloadProvider) { |   Libraries(final Provider<LibraryDownloader> downloadProvider) { | ||||||
|   | |||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | // Copyright (C) 2013 The Android Open Source Project | ||||||
|  | // | ||||||
|  | // Licensed 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 com.google.gerrit.pgm.init; | ||||||
|  |  | ||||||
|  | import static com.google.gerrit.pgm.init.InitUtil.username; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | public class OracleInitializer implements DatabaseConfigInitializer { | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public void initConfig(Section databaseSection) { | ||||||
|  |     final String defPort = "1521"; | ||||||
|  |     databaseSection.string("Server hostname", "hostname", "localhost"); | ||||||
|  |     databaseSection.string("Server port", "port", defPort, false); | ||||||
|  |     databaseSection.string("Instance name", "instance", "xe"); | ||||||
|  |     databaseSection.string("Database username", "username", username()); | ||||||
|  |     databaseSection.password("username", "password"); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -25,3 +25,9 @@ | |||||||
|   url = http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar |   url = http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar | ||||||
|   sha1 = 7abbd19fc2e2d5b92c0895af8520f7fa30266be9 |   sha1 = 7abbd19fc2e2d5b92c0895af8520f7fa30266be9 | ||||||
|   remove = mysql-connector-java-.*[.]jar |   remove = mysql-connector-java-.*[.]jar | ||||||
|  |  | ||||||
|  | [library "oracleDriver"] | ||||||
|  |   name = Oracle JDBC driver 11g Release 2 (11.2.0) | ||||||
|  |   url = file:///u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar | ||||||
|  |   sha1 = 2f89cd9176772c3a6c261ce6a8e3d0d4425f5679 | ||||||
|  |   remove = ojdbc6.jar | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ public class DataSourceModule extends AbstractModule { | |||||||
|     bind(DataSourceType.class).annotatedWith(Names.named("h2")).to(H2.class); |     bind(DataSourceType.class).annotatedWith(Names.named("h2")).to(H2.class); | ||||||
|     bind(DataSourceType.class).annotatedWith(Names.named("jdbc")).to(JDBC.class); |     bind(DataSourceType.class).annotatedWith(Names.named("jdbc")).to(JDBC.class); | ||||||
|     bind(DataSourceType.class).annotatedWith(Names.named("mysql")).to(MySql.class); |     bind(DataSourceType.class).annotatedWith(Names.named("mysql")).to(MySql.class); | ||||||
|  |     bind(DataSourceType.class).annotatedWith(Names.named("oracle")).to(Oracle.class); | ||||||
|     bind(DataSourceType.class).annotatedWith(Names.named("postgresql")).to(PostgreSQL.class); |     bind(DataSourceType.class).annotatedWith(Names.named("postgresql")).to(PostgreSQL.class); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | // Copyright (C) 2013 The Android Open Source Project | ||||||
|  | // | ||||||
|  | // Licensed 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 com.google.gerrit.server.schema; | ||||||
|  |  | ||||||
|  | import static com.google.gerrit.server.schema.JdbcUtil.hostname; | ||||||
|  | import static com.google.gerrit.server.schema.JdbcUtil.port; | ||||||
|  |  | ||||||
|  | import com.google.gerrit.server.config.ConfigSection; | ||||||
|  | import com.google.gerrit.server.config.GerritServerConfig; | ||||||
|  | import com.google.inject.Inject; | ||||||
|  |  | ||||||
|  | import org.eclipse.jgit.lib.Config; | ||||||
|  |  | ||||||
|  | public class Oracle extends BaseDataSourceType { | ||||||
|  |   private Config cfg; | ||||||
|  |  | ||||||
|  |   @Inject | ||||||
|  |   public Oracle(@GerritServerConfig final Config cfg) { | ||||||
|  |     super("oracle.jdbc.driver.OracleDriver"); | ||||||
|  |     this.cfg = cfg; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public String getUrl() { | ||||||
|  |     final StringBuilder b = new StringBuilder(); | ||||||
|  |     final ConfigSection dbc = new ConfigSection(cfg, "database"); | ||||||
|  |     b.append("jdbc:oracle:thin:@"); | ||||||
|  |     b.append(hostname(dbc.optional("hostname"))); | ||||||
|  |     b.append(port(dbc.optional("port"))); | ||||||
|  |     b.append(":"); | ||||||
|  |     b.append(dbc.required("instance")); | ||||||
|  |     return b.toString(); | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 David Ostrovsky
					David Ostrovsky