Configurazione

Questo argomento fornisce dettagli sulla compatibilità, sulle configurazioni avanzate e sui componenti aggiuntivi per Oracle Cloud Infrastructure SDK for Java.

Questo argomento fornisce dettagli sulla compatibilità, sulle configurazioni avanzate e sui componenti aggiuntivi per Oracle Cloud Infrastructure SDK for Java.

Autorizzazioni Security Manager

Se l'applicazione deve essere eseguita all'interno di Java Security Manager, è necessario concedere autorizzazioni aggiuntive aggiornando un file di criteri o specificando un file di criteri aggiuntivo o diverso in fase di esecuzione.

L'SDK richiede le seguenti autorizzazioni:

  • Richiesto da 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";
  • Richiesto dall'SDK per sovrascrivere le intestazioni riservate:

    permission java.util.PropertyPermission "sun.net.http.allowRestrictedHeaders", "write";
  • Richiesto dall'SDK per aprire le connessioni socket:

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

Per includere un altro file di criteri, oltre al file di criteri predefinito di Java Runtime Environment, avviare Java Virtual Machine con:

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

Per sostituire il file dei criteri predefinito, avviare Java Virtual Machine con:

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

Utilizzare un segno di uguale singolo (=) quando si fornisce un file di criteri aggiuntivo. Utilizzare un segno di uguale doppio (==) solo se si desidera sostituire il file dei criteri predefinito.

TTL Java Virtual Machine per le ricerche dei nomi DNS

Java Virtual Machine (JVM) memorizza nella cache le risposte DNS dalle ricerche per un determinato periodo di tempo, denominato time-to-live (TTL). Ciò garantisce tempi di risposta più rapidi nel codice che richiede una frequente risoluzione del nome.

JVM utilizza la proprietà networkaddress.cache.ttl per specificare il criterio di inserimento nella cache per le ricerche dei nomi DNS. Il valore è un numero intero che rappresenta il numero di secondi per memorizzare nella cache la ricerca riuscita. Il valore predefinito per molte JVM, -1, indica che la ricerca deve essere inserita nella cache per sempre.

Poiché le risorse in Oracle Cloud Infrastructure utilizzano nomi DNS che possono cambiare, si consiglia di modificare il valore TTL in 60 secondi. Ciò garantisce che il nuovo indirizzo IP per la risorsa venga restituito nella query DNS successiva. È possibile modificare questo valore a livello globale o specifico per l'applicazione:

  • Per impostare TTL a livello globale per tutte le applicazioni che utilizzano JVM, aggiungere quanto segue nel file $JAVA_HOME/jre/lib/security/java.security:

    networkaddress.cache.ttl=60
  • Per impostare il TTL solo per l'applicazione, impostare quanto segue nel codice di inizializzazione dell'applicazione:

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

Utilizzo del valore predefinito Jersey HttpUrlConnectorProvider

A partire dalla versione 2.0.0, l'SDK per Java supporta l'utilizzo di Jersey ApacheConnectorProvider anziché dell'impostazione predefinita HttpUrlConnectorProvider di Jersey per consentire a Apache HttpClient di effettuare chiamate ai servizi OCI.

Per passare al connettore predefinito di Jersey a livello di client

A livello di client, l'SDK fornisce il seguente modo per tornare al vecchio connettore predefinito di Jersey:

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

L'override della proprietà clientConfigurator del client ripristinerà i valori predefiniti di Jersey. Per configurare clientConfigurator con l'uso di Apache Connector, utilizzare additionalClientConfigurator o additionalClientConfigurators.

Per passare al connettore predefinito di Jersey a livello globale

È possibile escludere le dipendenze HttpClient di Apache o utilizzare una variabile di ambiente. Esclusione delle dipendenze HttpClient

Se si gestiscono le dipendenze:

  • Rimuovere i file JAR org.apache.httpcomponents.httpclient e org.glassfish.jersey.connectors.jersey-apache-connector dal classpath

Se si utilizza Maven per gestire le dipendenze:

  • Aggiungere le esclusioni per le dipendenze org.apache.httpcomponents.httpclient e org.glassfish.jersey.connectors.jersey-apache-connector.
    • Per aggiungere un'esclusione se si utilizza 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> 
    • Per aggiungere un'esclusione se si utilizza 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>
Ripristino utilizzando una variabile di ambiente

SDK per Java fornisce una variabile di ambiente per tornare al vecchio connettore predefinito di Jersey a livello globale. Impostare il valore della variabile d'ambiente OCI_JAVASDK_JERSEY_CLIENT_DEFAULT_CONNECTOR_ENABLED su true. Per impostazione predefinita, questo valore viene impostato su false.

Disattivazione della chiusura automatica dei flussi

Per le chiamate API che restituiscono una risposta binaria/stream, l'SDK chiuderà automaticamente il flusso una volta che il flusso è stato letto completamente. Questo perché l'SDK per Java supporta il connettore Apache per l'invio di richieste e la gestione delle connessioni al servizio. Per impostazione predefinita, il connettore Apache supporta il connection pooling. Nei casi in cui il flusso dalla risposta non viene chiuso, le connessioni non vengono rilasciate dal connection pool.

Per disabilitare il funzionamento della chiusura automatica, chiamare ResponseHelper.shouldAutoCloseResponseInputStream(false).

Scelta delle strategie di chiusura delle connessioni con Apache Connector per ottimizzare le prestazioni

Il connettore Apache supporta due strategie di chiusura delle connessioni: ApacheConnectionClosingStrategy.GracefulClosingStrategy e ApacheConnectionClosingStrategy.ImmediateClosingStrategy.

Quando si utilizza ApacheConnectionClosingStrategy.GracefulClosingStrategy, i flussi restituiti da una risposta vengono letti fino alla fine del flusso quando si chiude il flusso. Questo può introdurre ulteriore tempo quando si chiude il flusso con una lettura parziale, a seconda della dimensione del flusso rimanente. Per evitare questo ritardo, si consiglia di utilizzare ApacheConnectionClosingStrategy.ImmediateClosingStrategy per file di grandi dimensioni con letture parziali. Si noti che ApacheConnectionClosingStrategy.ImmediateClosingStrategy richiede più tempo quando si utilizza la lettura parziale per dimensioni di flusso inferiori (flussi inferiori a 1 MB).

Nota

Se queste strategie di chiusura di Apache Connection non forniscono risultati ottimali per i casi d'uso, è possibile tornare a Jersey Default HttpUrlConnectorProvider utilizzando il metodo indicato in precedenza.

Per ulteriori informazioni, vedere https://github.com/oracle/oci-java-sdk/blob/master/ApacheConnector-README.md.

Utilizzo di BC-FIPS al posto di Bouncy Castle

Per ottenere la conformità agli standard FIPS, è necessario scaricare e utilizzare una versione certificata FIPS. L'SDK supporta bc-fips 1.0.2 e bcpkix-fips 1.0.3. È possibile scaricarli all'indirizzo: https://www.bouncycastle.org/fips-java/

Per informazioni sull'installazione e la configurazione di Bouncy Castle FIPS, vedere "Documentazione su BC FIPS" nelle guide per l'utente e nei criteri di sicurezza della documentazione di Bouncy Castle.

Dipendenze autogestite

Se si gestiscono le dipendenze:

  1. Rimuovere i file jar Bouncy Castle non FIPS dal percorso della classe:
    1. bcprov-jdk15on-1.60.jar
    2. bcpkix-jdk15on-1.60.jar
  2. Aggiungere invece i file jar di FIPS Bouncy Castle al classpath:
    1. bc-fips-1.0.2.jar
    2. bcpkix-fips-1.0.3.jar

Dipendenze gestite da Maven

Se si utilizza Maven per gestire le dipendenze:

  1. Aggiungere le versioni corrette di bc-fips e bcpkix-fips alle dipendenze:
    <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. Poiché si dipende da un pacchetto oci-java-sdk*, è necessario rimuovere le dipendenze non FIPS Bouncy Castle:
    <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>

Utilizzo dell'implementazione JAX-RS personale

L'SDK per Java è fornito in bundle con Jersey, ma puoi anche utilizzare la tua implementazione JAX-RS.

Componente aggiuntivo di configurazione client RESTEasy

Viene fornito il comando oci-java-sdk-addons-resteasy-client-configurator per dimostrare come configurare un'implementazione JAX-RS alternativa. Il componente aggiuntivo è disponibile nella directory bmc-addons dell'SDK.

Per informazioni dettagliate sull'installazione e la configurazione, vedere il Readme per il componente aggiuntivo.

Per esempi di codice che dimostrano come configurare il client, vedere:

Uso di SLF4J per il log

Il login all'SDK viene eseguito tramite SLF4J. SLF4J è un'astrazione di log che consente l'uso di una libreria di log fornita dall'utente (ad esempio, log4j). Per ulteriori informazioni, vedere il manuale SLF4J.

Di seguito è riportato un esempio che consente di eseguire lo standard del log di base. È possibile configurare opzioni di log più avanzate utilizzando l'associazione log4j.

  1. Scaricare il file jar di associazione semplice SLF4J: SLF4J Simple Binding
  2. Aggiungere il file jar al classpath (ad esempio, aggiungerlo alla directory /third-party/lib del download dell'SDK)
  3. Aggiungere l'argomento VM seguente per abilitare il log del livello di debug (per impostazione predefinita, viene utilizzato il livello di informazioni): -Dorg.slf4j.simpleLogger.defaultLogLevel=debug