Actualizaciones en la versión 3 del SDK de OCI para Java

En este tema se explican algunos de los cambios clave introducidos en la versión 3 del SDK para Java de Oracle Cloud Infrastructure.

En este tema se explican algunos de los cambios clave introducidos en la versión 3 del SDK para Java de Oracle Cloud Infrastructure.

Nota

Consulte las notas de la versión para conocer todos los detalles y el tema Ejemplos para obtener más información.

Bibliotecas de cliente HTTP

De forma predeterminada, no hay configurada ninguna biblioteca de cliente HTTP. Debe seleccionar explícitamente una biblioteca de cliente HTTP. El SDK de OCI para Java ofrece las siguientes opciones para bibliotecas del cliente HTTP:

Especifique la biblioteca de cliente HTTP declarando una dependencia en oci-java-sdk-common-httpclient-jersey o oci-java-sdk-common-httpclient-jersey3. Por ejemplo:

<dependency>
    <!-- Since this is the "application" pom.xml, we do want to
         choose the httpclient to use. -->
    <groupId>com.oracle.oci.sdk</groupId>
    <artifactId>oci-java-sdk-common-httpclient-jersey</artifactId>
</dependency>

Devoluciones de llamada de invocación

En lugar de utilizar com.oracle.bmc.util.internal.Consumer<Invocation.Builder> para registrar las devoluciones de llamada de invocación, utilice com.oracle.bmc.http.client.RequestInterceptor. De esta manera, la implantación se separa de la elección del cliente HTTP.

Configuración de cliente simplificada

El método customizeClient(HttpClientBuilder builder) para com.oracle.bmc.http.ClientConfigurator ha sustituido a los métodos customizeBuilder, customizeClient y customizeRequest. Por ejemplo:

    IdentityClient.builder()
                  .clientConfigurator(
                          builder -> {
                      builder.property(
                              StandardClientProperties.BUFFER_REQUEST, false);
                  })
                  // ...
                  .build(authenticationDetailsProvider);

Las propiedades que se pueden definir dependen del cliente HTTP que utilice. También puede definir sus propias propiedades. Para obtener una lista completa de las propiedades configurables predefinidas, consulte lo siguiente:

Ejemplos de configuración del cliente
Configuración Ejemplo
Definición de si una solicitud debe almacenarse en buffer
builder.property(
                StandardClientProperties.BUFFER_REQUEST, shouldBuffer);
Definición de un administrador de conexiones Apache
builder.property(
                ApacheClientProperties.CONNECTION_MANAGER,
                connectionManager);
Definición de un almacén de confianza
// Server CA goes into the trust store
        KeyStore trustStore =
                keystoreGenerator.createTrustStoreWithServerCa(tlsConfig.getCaBundle());
        builder.property(StandardClientProperties.TRUST_STORE, trustStore);
Definición de un almacén de claves
builder.property(
                StandardClientProperties.KEY_STORE,
                new KeyStoreWithPassword(keyStore, keystorePassword));
Definición del contexto SSL
builder.property(
                StandardClientProperties.SSL_CONTEXT, sslContext);
Definición de un proxy
builder.property(
                StandardClientProperties.PROXY, proxyConfig);
Definición de un verificador de nombre de host
builder.property(
                StandardClientProperties.HOSTNAME_VERIFIER,
                NoopHostnameVerifier.INSTANCE);

También están disponibles los siguientes ejemplos de configuración del cliente:

Cambios en el conector Apache

Se han realizado varios cambios para separar la implantación del conector Apache de la elección del cliente HTTP.

com.oracle.bmc.http.ApacheConfigurator se ha sustituido por com.oracle.bmc.http.client.jersey.ApacheClientProperties o com.oracle.bmc.http.client.jersey3.ApacheClientProperties (para Jersey 3).

El siguiente ejemplo es para los clientes que no deben almacenar en buffer las solicitudes en la memoria:

ObjectStorageClient nonBufferingObjectStorageClient = ObjectStorageClient
    .builder()
    .clientConfigurator(builder -> {
        builder.property(StandardClientProperties.BUFFER_REQUEST, false);
        builder.property(ApacheClientProperties.RETRY_HANDLER, null);
        builder.property(ApacheClientProperties.REUSE_STRATEGY, null);
    })
    .region(Region.US_PHOENIX_1)
    .build(provider);

Para aquellos clientes que deben almacenar las solicitudes en buffer en la memoria, consulte el siguiente ejemplo:

IdentityClient bufferingIdentityClient = IdentityClient
    .builder()
    .clientConfigurator(builder -> {
        builder.property(StandardClientProperties.BUFFER_REQUEST, true);
        builder.property(ApacheClientProperties.RETRY_HANDLER, null);
        builder.property(ApacheClientProperties.REUSE_STRATEGY, null);
    })
    .region(Region.US_PHOENIX_1)
    .build(provider);

Consulte DisableNoConnectionReuseStrategyUsingApacheConfiguratorExample.java y DisableNoConnectionReuseStrategyUsingApacheConfiguratorExample.java (Jersey 3) para obtener más información.

Considere también utilizar com.oracle.bmc.http.client.jersey.apacheconfigurator.ApacheConfigurator del módulo de complemento oci-java-sdk-addons-apache-configurator-jersey o com.oracle.bmc.http.client.jersey3.apacheconfigurator.ApacheConfigurator del módulo de complemento oci-java-sdk-addons-apache-configurator-jersey3.

Consulte DisableNoConnectionReuseStrategyUsingApacheConfiguratorExample.java y DisableNoConnectionReuseStrategyUsingApacheConfiguratorExample.java (Jersey 3) para obtener más información.

Cambios en el disyuntor

El nombre de la interfaz del disyuntor se ha cambiado de com.oracle.bmc.circuitbreaker.JaxRsCircuitBreaker a com.oracle.bmc.circuitbreaker.OciCircuitBreaker.

En lugar de utilizar el constructor de com.oracle.bmc.circuitbreaker.CircuitBreakerConfiguration, utilice el creador. El constructor ya no es público.

La clase com.oracle.bmc.util.CircuitBreakerUtils ya no se ocupa de los disyuntores, solo de com.oracle.bmc.circuitbreaker.CircuitBreakerConfiguration. Por lo tanto, se ha eliminado el campo DEFAULT_CIRCUIT_BREAKER y el método getUserDefinedCircuitBreaker. Si es necesario, cree un disyuntor nuevo a partir de la configuración predeterminada, utilizando para ello los métodos de creación de com.oracle.bmc.circuitbreaker.CircuitBreakerFactory.