Skip to content
This repository has been archived by the owner on Nov 19, 2024. It is now read-only.

Commit

Permalink
Merge pull request #138 from Apicurio/add-unified-storage-utilities
Browse files Browse the repository at this point in the history
Add the required utilities for the unified storage
  • Loading branch information
carlesarnal authored Jan 23, 2024
2 parents 854d2a9 + 11483b8 commit d865368
Show file tree
Hide file tree
Showing 11 changed files with 120 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package io.apicurio.common.apps.config.impl.storage;
package io.apicurio.common.apps.config;

/**
* @author [email protected]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@
package io.apicurio.common.apps.config.impl.storage;

import io.apicurio.common.apps.config.DynamicConfigPropertyDto;
import io.apicurio.common.apps.config.DynamicConfigSqlStorageStatements;
import io.apicurio.common.apps.config.DynamicConfigStorage;
import io.apicurio.common.apps.logging.LoggerProducer;
import io.apicurio.common.apps.storage.exceptions.NotFoundException;
import io.apicurio.common.apps.storage.sql.jdbi.HandleFactory;
import jakarta.enterprise.context.ApplicationScoped;
import org.slf4j.Logger;

import java.time.Instant;
Expand All @@ -29,7 +31,6 @@
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import jakarta.enterprise.context.ApplicationScoped;

import static io.apicurio.common.apps.storage.sql.jdbi.query.Sql.RESOURCE_CONTEXT_KEY;
import static io.apicurio.common.apps.storage.sql.jdbi.query.Sql.RESOURCE_IDENTIFIER_CONTEXT_KEY;
Expand Down Expand Up @@ -101,12 +102,7 @@ public DynamicConfigPropertyDto getConfigProperty(String propertyName) {
.map(new DynamicConfigPropertyDtoMapper())
.findOne();

return res.orElseThrow(() ->
new NotFoundException("Dynamic configuration property not found: " + propertyName, Map.of(
RESOURCE_CONTEXT_KEY, RESOURCE_CONTEXT_KEY_DCP,
RESOURCE_IDENTIFIER_CONTEXT_KEY, propertyName
))
);
return res.orElse(null);
});
}

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
<annotation-api.version>1.3.5</annotation-api.version>

<!-- Quarkus Version -->
<quarkus.version>3.2.6.Final</quarkus.version>
<quarkus.version>3.6.6</quarkus.version>

<!-- Libraries -->
<apicurio-common-rest-client.version>0.1.18.Final</apicurio-common-rest-client.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* @author [email protected]
* @author Jakub Senko <em>[email protected]</em>
*/
public interface BaseSqlStatements {
public interface SqlStatements {

/**
* Gets the database type associated with these statements.
Expand Down
12 changes: 12 additions & 0 deletions storage/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.apicurio</groupId>
<artifactId>apicurio-common-app-components-config-definitions</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-undertow</artifactId>
Expand All @@ -54,6 +60,12 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-agroal</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author [email protected]
* @author Jakub Senko <em>[email protected]</em>
*/
public abstract class AbstractH2BaseSqlStatements implements BaseSqlStatements {
public abstract class AbstractH2SqlStatements implements SqlStatements {

@Override
public boolean isPrimaryKeyViolation(SQLException error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* @author [email protected]
* @author Jakub Senko <em>[email protected]</em>
*/
public abstract class AbstractPostgresBaseSqlStatements implements BaseSqlStatements {
public abstract class AbstractPostgresSqlStatements implements SqlStatements {

@Override
public boolean isPrimaryKeyViolation(SQLException ex) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.apicurio.common.apps.storage.sql;

public enum DatabaseKind {

postgresql("org.postgresql.Driver"),
h2("org.h2.Driver"),
mssql("com.microsoft.sqlserver.jdbc.SQLServerDriver");

final String driverClassName;

DatabaseKind(String driverClassName) {
this.driverClassName = driverClassName;
}

public String getDriverClassName() {
return driverClassName;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package io.apicurio.common.apps.storage.sql;

import io.agroal.api.AgroalDataSource;
import io.agroal.api.configuration.supplier.AgroalPropertiesReader;
import io.apicurio.common.apps.config.Info;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.slf4j.Logger;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

public class DatasourceProducer {

@Inject
Logger log;

@ConfigProperty(name = "apicurio.storage.db-kind", defaultValue = "h2")
@Info(category = "storage", description = "Application datasource database type", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String databaseType;

@ConfigProperty(name = "apicurio.datasource.url", defaultValue = "jdbc:h2:mem:registry_db")
@Info(category = "storage", description = "Application datasource jdbc url", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String jdbcUrl;

@ConfigProperty(name = "apicurio.datasource.username", defaultValue = "sa")
@Info(category = "storage", description = "Application datasource username", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String username;

@ConfigProperty(name = "apicurio.datasource.password", defaultValue = "sa")
@Info(category = "storage", description = "Application datasource password", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String password;

@ConfigProperty(name = "apicurio.datasource.jdbc.initial-size", defaultValue = "20")
@Info(category = "storage", description = "Application datasource pool initial size", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String initialSize;

@ConfigProperty(name = "apicurio.datasource.jdbc.min-size", defaultValue = "20")
@Info(category = "storage", description = "Application datasource pool minimum size", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String minSize;

@ConfigProperty(name = "apicurio.datasource.jdbc.max-size", defaultValue = "100")
@Info(category = "storage", description = "Application datasource pool maximum size", availableSince = "0.2.5.Final", registryAvailableSince = "3.0.0.Final")
String maxSize;

@ApplicationScoped
@Named("apicurioDatasource")
public AgroalDataSource produceDatasource() throws SQLException {
log.debug("Creating an instance of ISqlStatements for DB: " + databaseType);

final DatabaseKind databaseKind = DatabaseKind.valueOf(databaseType);

Map<String, String> props = new HashMap<>();

props.put(AgroalPropertiesReader.MAX_SIZE, maxSize);
props.put(AgroalPropertiesReader.MIN_SIZE, minSize);
props.put(AgroalPropertiesReader.INITIAL_SIZE, initialSize);
props.put(AgroalPropertiesReader.JDBC_URL, jdbcUrl);
props.put(AgroalPropertiesReader.PRINCIPAL, username);
props.put(AgroalPropertiesReader.CREDENTIAL, password);
props.put(AgroalPropertiesReader.PROVIDER_CLASS_NAME, databaseKind.getDriverClassName());

AgroalDataSource datasource = AgroalDataSource.from(new AgroalPropertiesReader()
.readProperties(props)
.get());


log.info("Using {} SQL storage.", databaseType);

return datasource;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* @author Jakub Senko <em>[email protected]</em>
*/
@ApplicationScoped
public class BaseSqlStorageComponent {
public class SqlStorageComponent {

private static final String DB_PROPERTY_VERSION = "db_version";

Expand All @@ -42,7 +42,7 @@ public static class Configuration {

private Boolean supportsAtomicSequenceIncrement;

private BaseSqlStatements sqlStatements;
private SqlStatements sqlStatements;

private String ddlDirRootPath;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@
import io.apicurio.common.apps.storage.exceptions.AlreadyExistsException;
import io.apicurio.common.apps.storage.exceptions.StorageException;
import io.apicurio.common.apps.storage.exceptions.StorageExceptionMapper;
import io.apicurio.common.apps.storage.sql.BaseSqlStatements;
import io.apicurio.common.apps.storage.sql.SqlStatements;

import java.sql.Connection;
import java.sql.SQLException;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;

/**
* @author [email protected]
Expand All @@ -34,10 +35,12 @@
public class HandleFactoryImpl implements HandleFactory {

@Inject
@Named("apicurioDatasource")
AgroalDataSource dataSource;

@Inject
BaseSqlStatements sqlStatements;
@Named("apicurioSqlStatements")
SqlStatements sqlStatements;

@Inject
StorageExceptionMapper exceptionMapper;
Expand Down

0 comments on commit d865368

Please sign in to comment.