Skip to content

Commit 392878a

Browse files
authored
Merge pull request #44 from oracle/mark/adb
Support for Autonomous Database
2 parents 58b4dff + 1b923e8 commit 392878a

File tree

20 files changed

+704
-3
lines changed

20 files changed

+704
-3
lines changed

docs/src/main/asciidoc/adb.adoc

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright (c) 2023, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
[#autonomous-database]
5+
== Autonomous Database
6+
7+
https://docs.oracle.com/en/cloud/paas/atp-cloud/index.html[Autonomous Database] is a data management service built
8+
on self-driving Oracle Autonomous Database technology to deliver automated patching, upgrades, and tuning, including
9+
performing all routine database maintenance tasks while the system is running, without human intervention.
10+
11+
Maven coordinates, using <<getting-started.adoc#bill-of-materials, Spring Cloud OCI BOM>>:
12+
13+
[source,xml]
14+
----
15+
<dependency>
16+
<groupId>com.oracle.cloud.spring</groupId>
17+
<artifactId>spring-cloud-oci-starter-adb</artifactId>
18+
</dependency>
19+
----
20+
21+
Gradle coordinates:
22+
23+
[source,subs="normal"]
24+
----
25+
dependencies {
26+
implementation("com.oracle.cloud.spring:spring-cloud-oci-starter-adb")
27+
}
28+
----
29+
30+
=== Using Autonomous Database
31+
32+
The starter automatically configures and registers an `AutnomousDb` bean in the Spring application context.
33+
The `AutnomousDb` bean (link[Javadoc]) can be used to create an Autonomous Database, get details of an Autonomous Database,
34+
delete an Autonomous Database and generate a wallet for an Autonomous Database.
35+
36+
[source,java]
37+
----
38+
@Autowired
39+
private Queue queue;
40+
41+
public void createQueue() {
42+
43+
String queueId = queue.createQueue("my-queue", <<compartmentId>>, <<deadLetterQueueDeliveryCount>>, <<retentionInSeconds>>);
44+
}
45+
@Autowired
46+
AutonomousDb autonomousDatabase;
47+
48+
public void createAutonomousDatabase() {
49+
autonomousDatabase.createAutonomousDatabase(
50+
databaseName, compartmentId, adminPassword, dataStorageSizeInGBs, computeCount);
51+
}
52+
53+
public void getAutonomousDatabase() {
54+
AutonomousDbDetails response = autonomousDatabase.getAutonomousDatabase(databaseId);
55+
}
56+
57+
public void getAutonomousDatabaseWallet() {
58+
GenerateAutonomousDatabaseWalletResponse response = autonomousDatabase.generateAutonomousDatabaseWallet(databaseId, password);
59+
InputStream is = response.getInputStream();
60+
int ContentLength = response.getContentLength();
61+
// read the InputStream to get the wallet
62+
}
63+
64+
public void deleteAutonomousDatabase() {
65+
DeleteAutonomousDatabaseResponse response = autonomousDatabase.deleteAutonomousDatabase(databaseId);
66+
}
67+
----
68+
69+
70+
=== Configuration
71+
72+
The Spring Boot Starter for Oracle Autonomous Database provides the following configuration options:
73+
74+
|===
75+
^| Name ^| Description ^| Required ^| Default value
76+
| `spring.cloud.oci.adb.enabled` | Enables the OCI Autonomous Database APIs. | No | `true`
77+
|===
78+
79+
80+
=== Sample
81+
82+
A sample application provided https://github.com/oracle/spring-cloud-oci/tree/main/spring-cloud-oci-samples/spring-cloud-oci-adb-sample[here] contains the examples to demonstrates the usage of OCI Spring Cloud Autonomous Database module.

pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
5353
</scm>
5454

5555
<modules>
56+
<module>spring-cloud-oci-adb</module>
5657
<module>spring-cloud-oci-dependencies</module>
5758
<module>spring-cloud-oci-core</module>
5859
<module>spring-cloud-oci-autoconfigure</module>
@@ -73,7 +74,7 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
7374
<spring-cloud-oci-dependencies.version>${project.version}</spring-cloud-oci-dependencies.version>
7475
<spring-cloud-dependencies.version>2023.0.2</spring-cloud-dependencies.version>
7576
<spring-boot-dependencies.version>3.2.7</spring-boot-dependencies.version>
76-
<oci-sdk.version>3.44.0</oci-sdk.version>
77+
<oci-sdk.version>3.44.2</oci-sdk.version>
7778
<spring-boot-maven-plugin.version>3.2.5</spring-boot-maven-plugin.version>
7879
<maven.compiler.source>17</maven.compiler.source>
7980
<maven.compiler.target>17</maven.compiler.target>

spring-cloud-oci-adb/pom.xml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
Copyright (c) 2023, 2024, Oracle and/or its affiliates.
4+
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5+
-->
6+
7+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
9+
<modelVersion>4.0.0</modelVersion>
10+
<parent>
11+
<artifactId>spring-cloud-oci</artifactId>
12+
<groupId>com.oracle.cloud.spring</groupId>
13+
<version>1.1.0-SNAPSHOT</version>
14+
</parent>
15+
16+
<artifactId>spring-cloud-oci-adb</artifactId>
17+
<name>Spring Cloud OCI Autonomous Database Module</name>
18+
<description>Spring Cloud OCI Autonomous Database Module</description>
19+
<url>https://github.com/oracle/spring-cloud-oci/#spring-cloud-oci-documentation</url>
20+
21+
<licenses>
22+
<license>
23+
<name>The Universal Permissive License (UPL), Version 1.0</name>
24+
<url>https://oss.oracle.com/licenses/upl/</url>
25+
<distribution>repo</distribution>
26+
</license>
27+
</licenses>
28+
29+
<developers>
30+
<developer>
31+
<id>oracle</id>
32+
<name>Oracle</name>
33+
<organizationUrl>https://www.oracle.com</organizationUrl>
34+
</developer>
35+
</developers>
36+
37+
<scm>
38+
<url>https://github.com/oracle/spring-cloud-oci</url>
39+
<connection>scm:git:https://github.com/oracle/spring-cloud-oci.git</connection>
40+
<developerConnection>scm:git:git@github.com:oracle/spring-cloud-oci.git</developerConnection>
41+
</scm>
42+
43+
<properties>
44+
<maven.compiler.source>17</maven.compiler.source>
45+
<maven.compiler.target>17</maven.compiler.target>
46+
</properties>
47+
<dependencies>
48+
<dependency>
49+
<groupId>com.oracle.cloud.spring</groupId>
50+
<artifactId>spring-cloud-oci-core</artifactId>
51+
</dependency>
52+
<dependency>
53+
<groupId>com.oracle.oci.sdk</groupId>
54+
<artifactId>oci-java-sdk-database</artifactId>
55+
</dependency>
56+
</dependencies>
57+
</project>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.adb;
5+
6+
import com.oracle.bmc.database.DatabaseClient;
7+
import com.oracle.bmc.database.model.AutonomousDatabase;
8+
import com.oracle.bmc.database.responses.CreateAutonomousDatabaseResponse;
9+
import com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
10+
import com.oracle.bmc.database.responses.DeleteAutonomousDatabaseResponse;
11+
12+
/**
13+
* Interface for OCI Autonomous Database module.
14+
*/
15+
public interface AutonomousDb {
16+
17+
/**
18+
* Direct instance of OCI Java SDK DatabaseClient.
19+
* @return DatabaseClient
20+
*/
21+
DatabaseClient getDatatbaseClient();
22+
23+
/**
24+
* Create an Autonomous Database.
25+
*
26+
* @param databaseName Name of the Autonomous Database to be created
27+
* @param compartmentId Compartment OCID where the Autonomous Database needs to be created
28+
* @return CreateAutonomousDatabaseResponse
29+
*/
30+
CreateAutonomousDatabaseResponse createAutonomousDatabase(
31+
String databaseName,
32+
String compartmentId,
33+
String adminPassword,
34+
Integer dataStorageSizeInGBs,
35+
Float computeCount
36+
);
37+
38+
/**
39+
* Get details of an Autonomous Database.
40+
*
41+
* @param databaseId OCID of the Autonomous Database to get details of
42+
* @return GetAutonomousDatabaseResponse
43+
*/
44+
AutonomousDbDetails getAutonomousDatabase(String databaseId);
45+
46+
/**
47+
* Generate a wallet for an Autonomous Database.
48+
*
49+
* @param databaseId OCID of the Autonomous Database to get generate a wallet for
50+
* @param password Password for the wallet
51+
* @return GenerateAutonomousDatabaseWalletResponse
52+
*/
53+
GenerateAutonomousDatabaseWalletResponse generateAutonomousDatabaseWallet(String databaseId, String password);
54+
55+
/**
56+
* Delete an Autonomous Database.
57+
*
58+
* @param databaseId OCID of the Autonomous Database to be deleted
59+
* @return DeleteAutonomousDatabaseResponse
60+
*/
61+
DeleteAutonomousDatabaseResponse deleteAutonomousDatabase(String databaseId);
62+
63+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.adb;
5+
6+
public record AutonomousDbDetails (
7+
String compartmentId,
8+
String displayName,
9+
String id,
10+
String dbName,
11+
String lifecycleState,
12+
String timeCreated,
13+
Float computeCount,
14+
Integer dataStorageSizeInGBs,
15+
String licenseModel,
16+
String serviceConsoleUrl
17+
) { }
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.adb;
5+
6+
import com.oracle.bmc.database.DatabaseClient;
7+
import com.oracle.bmc.database.model.AutonomousDatabase;
8+
import com.oracle.bmc.database.model.CreateAutonomousDatabaseBase;
9+
import com.oracle.bmc.database.model.CreateAutonomousDatabaseDetails;
10+
import com.oracle.bmc.database.model.GenerateAutonomousDatabaseWalletDetails;
11+
import com.oracle.bmc.database.responses.CreateAutonomousDatabaseResponse;
12+
import com.oracle.bmc.database.responses.GetAutonomousDatabaseResponse;
13+
import com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
14+
import com.oracle.bmc.database.responses.DeleteAutonomousDatabaseResponse;
15+
import com.oracle.bmc.database.requests.GetAutonomousDatabaseRequest;
16+
import com.oracle.bmc.database.requests.GenerateAutonomousDatabaseWalletRequest;
17+
import com.oracle.bmc.database.requests.CreateAutonomousDatabaseRequest;
18+
import com.oracle.bmc.database.requests.DeleteAutonomousDatabaseRequest;
19+
20+
/**
21+
* Implementation for the OCI Autonomous Database module.
22+
*/
23+
public class AutonomousDbImpl implements AutonomousDb {
24+
25+
final DatabaseClient client;
26+
27+
public AutonomousDbImpl(DatabaseClient client) {
28+
this.client = client;
29+
}
30+
31+
/**
32+
* Direct instance of OCI Java SDK DatabaseClient.
33+
* @return DatabaseClient
34+
*/
35+
public DatabaseClient getDatatbaseClient() {
36+
return client;
37+
}
38+
39+
/**
40+
* Create an Autonomous Database.
41+
*
42+
* @param databaseName Name of the Autonomous Database to be created
43+
* @param compartmentId Compartment OCID where the Autonomous Database needs to be created
44+
* @return CreateAutonomousDatabaseResponse
45+
*/
46+
public CreateAutonomousDatabaseResponse createAutonomousDatabase(
47+
String databaseName,
48+
String compartmentId,
49+
String adminPassword,
50+
Integer dataStorageSizeInGBs,
51+
Float computeCount
52+
) {
53+
CreateAutonomousDatabaseRequest createAutonomousDatabaseRequest = CreateAutonomousDatabaseRequest.builder()
54+
.createAutonomousDatabaseDetails(CreateAutonomousDatabaseDetails.builder()
55+
.compartmentId(compartmentId)
56+
.dbName(databaseName)
57+
.adminPassword(adminPassword)
58+
.dataStorageSizeInGBs(dataStorageSizeInGBs)
59+
.computeModel(CreateAutonomousDatabaseBase.ComputeModel.Ecpu)
60+
.computeCount(computeCount)
61+
.build())
62+
.build();
63+
64+
CreateAutonomousDatabaseResponse response = client.createAutonomousDatabase(createAutonomousDatabaseRequest);
65+
66+
return response;
67+
}
68+
69+
/**
70+
* Get details of an Autonomous Database.
71+
*
72+
* @param databaseId OCID of the Autonomous Database to get details of
73+
* @return GetAutonomousDatabaseResponse
74+
*/
75+
public AutonomousDbDetails getAutonomousDatabase(String databaseId) {
76+
GetAutonomousDatabaseRequest getAutonomousDatabaseRequest = GetAutonomousDatabaseRequest.builder()
77+
.autonomousDatabaseId(databaseId)
78+
.build();
79+
80+
GetAutonomousDatabaseResponse response = client.getAutonomousDatabase(getAutonomousDatabaseRequest);
81+
AutonomousDatabase adb = response.getAutonomousDatabase();
82+
83+
// work around the jackson deserialization issue in oci-java-sdk 3.44.2 - cannot handle explicitlySet - no filter
84+
AutonomousDbDetails add = new AutonomousDbDetails(
85+
adb.getCompartmentId(),
86+
adb.getDisplayName(),
87+
adb.getId(),
88+
adb.getDbName(),
89+
adb.getLifecycleState().toString(),
90+
adb.getTimeCreated().toString(),
91+
adb.getComputeCount(),
92+
adb.getDataStorageSizeInGBs(),
93+
adb.getLicenseModel().toString(),
94+
adb.getServiceConsoleUrl()
95+
);
96+
97+
return add;
98+
}
99+
100+
/**
101+
* Generate a wallet for an Autonomous Database.
102+
*
103+
* @param databaseId OCID of the Autonomous Database to get generate a wallet for
104+
* @param password Password for the wallet
105+
* @return GenerateAutonomousDatabaseWalletResponse
106+
*/
107+
public GenerateAutonomousDatabaseWalletResponse generateAutonomousDatabaseWallet(String databaseId, String password) {
108+
GenerateAutonomousDatabaseWalletDetails generateAutonomousDatabaseWalletDetails = GenerateAutonomousDatabaseWalletDetails.builder()
109+
.generateType(GenerateAutonomousDatabaseWalletDetails.GenerateType.All)
110+
.password(password)
111+
.isRegional(true).build();
112+
113+
GenerateAutonomousDatabaseWalletRequest generateAutonomousDatabaseWalletRequest = GenerateAutonomousDatabaseWalletRequest.builder()
114+
.autonomousDatabaseId(databaseId)
115+
.generateAutonomousDatabaseWalletDetails(generateAutonomousDatabaseWalletDetails)
116+
.build();
117+
118+
GenerateAutonomousDatabaseWalletResponse response = client.generateAutonomousDatabaseWallet(generateAutonomousDatabaseWalletRequest);
119+
120+
return response;
121+
}
122+
123+
/**
124+
* Delete an Autonomous Database.
125+
*
126+
* @param databaseId OCID of the Autonomous Database to be deleted
127+
* @return DeleteAutonomousDatabaseResponse
128+
*/
129+
public DeleteAutonomousDatabaseResponse deleteAutonomousDatabase(String databaseId) {
130+
DeleteAutonomousDatabaseRequest deleteAutonomousDatabaseRequest = DeleteAutonomousDatabaseRequest.builder()
131+
.autonomousDatabaseId(databaseId)
132+
.build();
133+
134+
DeleteAutonomousDatabaseResponse response = client.deleteAutonomousDatabase(deleteAutonomousDatabaseRequest);
135+
136+
return response;
137+
}
138+
139+
}

0 commit comments

Comments
 (0)