Configuración

En este tema se proporcionan detalles sobre la compatibilidad, las configuraciones avanzadas y los complementos del SDK para Java de Oracle Cloud Infrastructure.

En este tema se proporcionan detalles sobre la compatibilidad, las configuraciones avanzadas y los complementos del SDK para Java de Oracle Cloud Infrastructure.

Permisos del gestor de seguridad

Si la aplicación debe ejecutarse en el gestor de seguridad de Java, debe otorgar permisos adicionales actualizando un archivo de política o especificando un archivo de política adicional o diferente en tiempo de ejecución.

El SDK necesita los siguientes permisos:

  • Requerido por Jersey:

    
    permission java.lang.RuntimePermission "getClassLoader";
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
    permission java.lang.RuntimePermission "accessDeclaredMembers";
    permission java.util.PropertyPermission "*", "read,write";
    permission java.lang.RuntimePermission "setFactory";
  • Requerido por el SDK para sobrescribir las cabeceras reservadas:

    permission java.util.PropertyPermission "sun.net.http.allowRestrictedHeaders", "write";
  • Requerido por el SDK para abrir conexiones de socket:

    permission java.net.SocketPermission "*", "connect";

Para incluir otro archivo de política, además del archivo de política por defecto de Java Runtime Environment, inicie Java Virtual Machine con:

java -Djava.security.manager -Djava.security.policy=</path/to/other_policy>

Para sustituir el archivo de política por defecto, inicie Java Virtual Machine con:

java -Djava.security.manager -Djava.security.policy==</path/to/other_policy>
Nota

Utilice un signo igual único (=) al proporcionar un archivo de política adicional. Utilice un signo igual doble (==) solo si desea sustituir el archivo de política por defecto.

TTL de Java Virtual Machine para consultas de nombre de DNS

Java Virtual Machine (JVM) almacena en caché las respuestas de DNS de las consultas durante una cantidad de tiempo definida, denominada tiempo de actividad (TTL). Esto garantiza un tiempo de respuesta más rápido en el código que requiere una resolución de nombres frecuente.

JVM utiliza la propiedad networkaddress.cache.ttl para especificar la política de almacenamiento en caché para las consultas de nombres de DNS. El valor es un entero que representa el número de segundos que se va a almacenar en caché la consulta correcta. El valor por defecto de muchas JVM, -1, indica que la consulta se deben almacenar en caché para siempre.

Como los recursos de Oracle Cloud Infrastructure utilizan nombres de DNS que pueden cambiar, se recomienda cambiar el valor TTL a 60 segundos. Esto garantiza que la nueva dirección IP para el recurso se devuelva en la siguiente consulta DNS. Puede cambiar este valor de forma global o específica para la aplicación:

  • Para definir TTL de forma global para todas las aplicaciones mediante JVM, agregue lo siguiente en el archivo $JAVA_HOME/jre/lib/security/java.security:

    networkaddress.cache.ttl=60
  • Para definir TTL solo para la aplicación, defina lo siguiente en el código de inicialización de la aplicación:

    java.security.Security.setProperty("networkaddress.cache.ttl" , "60");

Uso de HttpUrlConnectorProvider por defecto de Jersey

A partir de la versión 2.0.0, el SDK para Java soporta el uso de ApacheConnectorProvider de Jersey en lugar del valor por defecto HttpUrlConnectorProvider de Jersey para permitir que HttpClient de Apache realice llamadas de servicio de OCI.

Para cambiar al conector por defecto de Jersey en el nivel de cliente

En el nivel de cliente, el SDK proporciona la siguiente forma de volver al conector predeterminado anterior de Jersey:

ObjectStorageClient nonBufferingObjectStorageClient = ObjectStorageClient
        .builder()
        .clientConfigurator(builder -> {
            builder.property(JerseyClientProperties.USE_APACHE_CONNECTOR, false);
        })
        // ...
        .build(provider);
Nota

La sustitución de la propiedad clientConfigurator del cliente volverá a los valores por defecto de Jersey. Para configurar clientConfigurator con el uso de Apache Connector, utilice additionalClientConfigurator o additionalClientConfigurators.

Para cambiar al conector por defecto de Jersey en el nivel global

Puede excluir las dependencias HttpClient de Apache o utilizar una variable de entorno. Exclusión de dependencias HttpClient

Si usted mismo gestiona dependencias:

  • Elimine los JAR org.apache.httpcomponents.httpclient y org.glassfish.jersey.connectors.jersey-apache-connector de classpath

Si utiliza Maven para gestionar sus dependencias:

  • Agregue exclusiones para las dependencias org.apache.httpcomponents.httpclient y org.glassfish.jersey.connectors.jersey-apache-connector.
    • Para añadir una exclusión si utiliza Jersey 2:

      <dependencies>
          ...
          <dependency>
              <groupId>com.oracle.oci.sdk</groupId>
              <artifactId>oci-java-sdk-common-httpclient-jersey</artifactId>
              <version>...</version>
              <exclusions>
                  <exclusion>
                      <groupId>org.glassfish.jersey.connectors</groupId>
                      <artifactId>jersey-apache-connector</artifactId>
                  </exclusion>
                  <exclusion>
                      <groupId>org.apache.httpcomponents</groupId>
                      <artifactId>httpclient</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
          ...
      <dependencies> 
    • Para añadir una exclusión si utiliza Jersey 3:

      <dependencies>
          ...
          <dependency>
              <groupId>com.oracle.oci.sdk</groupId>
              <artifactId>oci-java-sdk-common-httpclient-jersey3</artifactId>
              <version>...</version>
              <exclusions>
                  <exclusion>
                      <groupId>org.glassfish.jersey.connectors</groupId>
                      <artifactId>jersey-apache-connector</artifactId>
                  </exclusion>
                  <exclusion>
                      <groupId>org.apache.httpcomponents</groupId>
                      <artifactId>httpclient</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>
          ...
      <dependencies>
Reversión mediante una variable de entorno

El SDK para Java proporciona una variable de entorno para volver al conector predeterminado anterior de Jersey en el nivel global. Defina el valor de la variable de entorno OCI_JAVASDK_JERSEY_CLIENT_DEFAULT_CONNECTOR_ENABLED en true. Por defecto, este valor está definido en false.

Desactivación del cierre automático de flujos

En el caso de las llamadas a la API que devuelven una respuesta binaria/de flujo, el SDK cerrará automáticamente el flujo una vez que se haya leído por completo. Esto se debe a que el SDK para Java soporta el conector Apache para enviar solicitudes y gestionar conexiones al servicio. Por defecto, el conector Apache soporta el pool de conexiones. En los casos en los que el flujo de la respuesta no está cerrado, las conexiones no se liberan del pool de conexiones.

Para desactivar el comportamiento de cierre automático, llame a ResponseHelper.shouldAutoCloseResponseInputStream(false).

Selección de estrategias de cierre de conexión con el conector Apache para optimizar el rendimiento

El conector Apache soporta dos estrategias de cierre de conexión: ApacheConnectionClosingStrategy.GracefulClosingStrategy y ApacheConnectionClosingStrategy.ImmediateClosingStrategy.

Al utilizar ApacheConnectionClosingStrategy.GracefulClosingStrategy, los flujos devueltos de una respuesta se leen hasta el final del flujo cuando se cierra el flujo. Esto puede introducir tiempo adicional cuando se cierra el flujo con una lectura parcial, dependiendo del tamaño del flujo restante. Para evitar este retraso, considere utilizar ApacheConnectionClosingStrategy.ImmediateClosingStrategy para archivos grandes con lecturas parciales. Tenga en cuenta que ApacheConnectionClosingStrategy.ImmediateClosingStrategy tarda más tiempo cuando se utiliza la lectura parcial para un tamaño de flujo más pequeño (flujos menores que 1 MB).

Nota

Si estas estrategias de cierre de conexión de Apache no proporcionan resultados óptimos para sus casos de uso, puede volver al valor por defecto de Jersey HttpUrlConnectorProvider utilizando el método indicado anteriormente.

Para obtener más información, consulte: https://github.com/oracle/oci-java-sdk/blob/master/ApacheConnector-README.md.

Uso de BC-FIPS en lugar de Bouncy Castle

Si necesita conformidad de FIPS, debe descargar y utilizar una versión certificada por FIPS. El SDK soporta bc-fips 1.0.2 y bcpkix-fips 1.0.3. Puede descargarlos en: https://www.bouncycastle.org/fips-java/

Para obtener ayuda sobre la instalación y configuración de Bouncy Castle FIPS, consulte "BC FIPS Documentation" en las guías de usuario y la política de seguridad de la documentación de Bouncy Castle.

Dependencias autogestionadas

Si usted mismo gestiona dependencias:

  1. Elimine los archivos jar de Bouncy Castle que no sean FIPS de la classpath:
    1. bcprov-jdk15on-1.60.jar
    2. bcpkix-jdk15on-1.60.jar
  2. Agregue los archivos jar de Bouncy Castle FIPS a la classpath:
    1. bc-fips-1.0.2.jar
    2. bcpkix-fips-1.0.3.jar

Dependencias gestionadas por Maven

Si utiliza Maven para gestionar sus dependencias:

  1. Agregue las versiones correctas de bc-fips y bcpkix-fips a las dependencias:
    <dependencies>
      . . .
      <dependency>
        <groupId>bc-fips</groupId>
        <artifactId>bc-fips</artifactId>
        <version>1.0.2</version>
      </dependency>
      <dependency>
        <groupId>bcpkix-fips</groupId>
        <artifactId>bcpkix-fips</artifactId>
        <version>1.0.3</version>
      </dependency>
      . . .
    </dependencies>
  2. Como depende de un paquete oci-java-sdk*, debe eliminar las dependencias de Bouncy Castle que no sean FIPS:
    <dependencies>
      . . .
      <dependency>
        <groupId>com.oracle.oci.sdk</groupId>
        <artifactId>oci-java-sdk-common</artifactId>
        <version> . . . </version>
        <exclusions>
          <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      . . .
    </dependencies>

Uso de su propia implantación de JAX-RS

El SDK para Java se agrupa con Jersey, pero también puede utilizar su propia implantación de JAX-RS.

Complemento de configurador del cliente RESTEasy

Se proporciona oci-java-sdk-addons-resteasy-client-configurator para demostrar cómo configurar una implantación de JAX-RS alternativa. Puede encontrar el complemento en el directorio bmc-addons del SDK.

Para obtener información detallada sobre la instalación y la configuración, consulte el archivo Léame del complemento.

Para ver ejemplos de código que demuestran cómo configurar el cliente, consulte:

Uso de SLF4J para el registro

El registro en el SDK se realiza mediante SLF4J. SLF4J es una abstracción del registro que permite el uso de una biblioteca de registro proporcionado por el usuario (p. ej., log4j). Para obtener más información, consulte el manual de SLF4J.

A continuación se muestra un ejemplo que permite el registro básico en la salida estándar. Se pueden configurar opciones de registro más avanzadas mediante el enlace de log4j.

  1. Descargue el archivo jar de enlace simple de SLF4J: SLF4J Simple Binding
  2. Agregue el archivo jar a la classpath (p. ej., agréguelo al directorio /third-party/lib de la descarga de SDK)
  3. Agregue el siguiente argumento de VM para activar el registro de nivel de depuración (por defecto, se utiliza el nivel de información): -Dorg.slf4j.simpleLogger.defaultLogLevel=debug