Add support for Oracle database

Change-Id: I2695c6df6e9eafeeae8cd68a84ef74f5e2c361ac
This commit is contained in:
David Ostrovsky
2013-07-14 14:37:17 +02:00
parent 2b061ea088
commit 399793f4a8
8 changed files with 135 additions and 1 deletions

View File

@@ -63,3 +63,48 @@ rights on it:
Visit MySQL's link:http://dev.mysql.com/doc/[documentation] for further
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
----

View File

@@ -35,6 +35,8 @@ public class DatabaseConfigModule extends AbstractModule {
Names.named("jdbc")).to(JDBCInitializer.class);
bind(DatabaseConfigInitializer.class).annotatedWith(
Names.named("mysql")).to(MySqlInitializer.class);
bind(DatabaseConfigInitializer.class).annotatedWith(
Names.named("oracle")).to(OracleInitializer.class);
bind(DatabaseConfigInitializer.class).annotatedWith(
Names.named("postgresql")).to(PostgreSQLInitializer.class);
}

View File

@@ -78,7 +78,9 @@ class InitDatabase implements InitStep {
Names.named(dbType.toLowerCase())));
if (dci instanceof MySqlInitializer) {
libraries.mysqlDriver.downloadRequired();
libraries.mysqlDriver.downloadRequired();
} else if (dci instanceof OracleInitializer) {
libraries.oracleDriver.downloadRequired();
}
dci.initConfig(database);

View File

@@ -39,6 +39,7 @@ class Libraries {
/* final */LibraryDownloader bouncyCastle;
/* final */LibraryDownloader mysqlDriver;
/* final */LibraryDownloader oracleDriver;
@Inject
Libraries(final Provider<LibraryDownloader> downloadProvider) {

View File

@@ -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");
}
}

View File

@@ -25,3 +25,9 @@
url = http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar
sha1 = 7abbd19fc2e2d5b92c0895af8520f7fa30266be9
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

View File

@@ -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("jdbc")).to(JDBC.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);
}
}

View File

@@ -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();
}
}