freshidea - Fotolia

Tutorial: Wie Sie mit Java in Microsoft Azure entwickeln

Entwickler können die von ihnen bevorzugte Java-Distribution und -Version verwenden, um auf Azure-Dienste zuzugreifen. Eine Bereitstellung der Java-Instanz ist ebenfalls möglich.

Java-Entwickler, die Anwendungen in Azure bereitstellen oder zugehörige Dienste nutzen möchten, können auf ein breites Portfolio zugreifen. Es ist unter anderem möglich, aus einer Java-App heraus, die über Azure zur Verfügung gestellt wird, auf Azure SQL-Datenbanken zuzugreifen. 

Wie die Entwicklung mit Java in Azure im Detail funktioniert, wird im Microsoft-Artikel Erste Schritte bei der Cloudentwicklung mit Java in Azure erläutert. Hier werden unter anderem Beispiele genannt, wie sich Java-Apps mit Azure SQL-Datenbanken verknüpfen lassen. Azure unterstützt verschiedene Java-Distributionen, darunter Microsoft Build of OpenJDK und Eclipse Temurin für JDK 8, und alle Java-Versionen.

Java in Microsoft Azure einsetzen

Viele Cloud-Dienste, aber auch Azure Arc als Schnittstelle zum lokalen Rechenzentrum, sowie Azure Stack HCI, unterstützen Java. Microsoft stellt für verschiedene Azure-Dienste die Java-Runtime bereit. Dazu gehören:

  • Azure App Service unter Windows
  • Azure App Service unter Linux
  • Azure Functions
  • Azure Spring Apps
  • Azure Service Fabric
  • Azure HDInsight
  • Azure Cognitive Search
  • Azure Cloud Shell
  • Azure DevOps

In der Dokumentation der einzelnen Dienste findet man mehr Informationen darüber, auf was man bei der Java-Entwicklung achten muss. Um etwa Azure Cognitive Services in die eigene Anwendung zu integrieren, kann man folgenden Beispielcode verwenden:

import com.microsoft.azure.cognitiveservices.search.imagesearch.*;

import com.microsoft.azure.cognitiveservices.search.imagesearch.models.*;

 

public class AzureCognitiveServicesExample {

   public static void main(String[] args) {

      try {

         // Verbindung zum Azure Cognitive Services-Endpunkt herstellen

         String endpoint = "https://<service-name>.cognitiveservices.azure.com/";

         String key = "<subscription-key>";

         ImagesearchClient client = new ImagesearchClientBuilder()

            .endpoint(endpoint)

            .credential(new CognitiveServicesCredentials(key))

            .buildClient();

         

         // Eine Bildsuche durchführen

         Images imageResults = client.images().search("<query>");

         

         // Ergebnisse verarbeiten

         for(ImageObject imageObject : imageResults.value()) {

            System.out.println("Name: " + imageObject.name());

            System.out.println("URL: " + imageObject.contentUrl());

            System.out.println("Thumbnail-URL: " + imageObject.thumbnailUrl());

         }

      } catch (Exception e) {

         // Fehlerbehandlung

         System.err.println("Fehler: ");

}

Java-Programme können – wenn nötig – auf Azure Cloud Storage zugreifen und eigene Blobs erstellen. Der Code dazu lautet beispielsweise:

import com.microsoft.azure.storage.CloudStorageAccount;

import com.microsoft.azure.storage.blob.CloudBlobClient;

import com.microsoft.azure.storage.blob.CloudBlobContainer;

 

public class AzureBlobExample {

   public static void main(String[] args) {

      try {

         // Verbindung zum Azure-Blobspeicher herstellen

         String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>";

         CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);

         CloudBlobClient blobClient = storageAccount.createCloudBlobClient();

         

         // Einen neuen Container erstellen

         CloudBlobContainer container = blobClient.getContainerReference("<container-name>");

         container.createIfNotExists();

         System.out.println("Container " + container.getName() + " wurde erfolgreich erstellt.");

      } catch (Exception e) {

         // Fehlerbehandlung

         System.err.println("Fehler: " + e.getMessage());

      }

   }

}

Generell unterstützt Microsoft Lösungen von Drittherstellern. Es ist aber empfehlenswert, bei der Entwicklung mit Java in Azure entweder auf Eclipse Adoptium Temurin oder Microsoft Build of OpenJDK zu setzen. Hier sind Kompatibilität und maximale Unterstützung garantiert.

Einstieg in die Java-Entwicklung in Azure

Um mit Java zu entwickeln, sollte der lokale Rechner und das jeweilige Azure-Abonnement vorbereitet werden. Zunächst ist die Einrichtung der Azure Cloud Shell oder der Einsatz Azure CLI notwendig. Kommt Azure CLI zum Einsatz, ist außerdem die Einrichtung von Apache Maven erforderlich. In der Azure Cloud Shell sind Java und Maven bereits integriert.

Java in der Azure Cloud Shell
Abbildung 1: Java ist in der Azure Cloud Shell automatisch verfügbar.

Wenn Java-Anwendungen Rechte zum Lesen und Schreiben benötigen, macht es Sinn, einen Dienstprinzipal einzurichten, den die Java-Anwendung für die Kommunikation mit dem Azure-Abonnement nutzt. Mit einem Dienstprinzipal lassen sich Konten für Apps erstellen. Der Beispielcode in Azure CLI lautet:

az ad sp create-for-rbac --name AzureJavaTesT --role Contributor --scopes /subscriptions/86733e9ec8-c6309-4535-8a17-0b599341158d

Die ID für das Azure-Abonnement lässt sich durch das Suchen des Begriffs Abonnement im Suchfeld des Azure-Portals am schnellsten finden. Diese Daten sind für die Authentifizierung der Java-Apps notwendig. Wie sich diese nutzen lassen, wird bei GitHub genauer erklärt. 

Einrichten eines Dienstprinzipals für Java-Anwendungen auf Azure
Abbildung 2: Einrichten eines Dienstprinzipals für Java-Anwendungen auf Azure.

Java kann außerdem mit Azure DevOps verwendet werden. Dazu wird beim Erstellen eines neuen Azure DevOps-Projektes Java als Sprache ausgewählt. Java-Anwendungen können in Azure DevOps in neue oder bestehende Build-Pipelines integriert werden. Continuous Integration und Continuous Deployment (CI/CD) wird über die Verknüpfung der Build- und Release-Pipelines ermöglicht. Das stellt sicher, dass Anwendungen automatisch getestet und bereitgestellt werden, sobald Updates enthalten sind.

Java-Beispielanwendung bereitstellen

Microsoft bietet ein Beispielprojekt, das sich direkt aus GitHub über die Azure Cloud Shell bereitgestellen lässt. Dazu wird das Projekt aus GitHub zu Azure geklont und das notwendige Maven-Plug-In konfiguriert:

git clone https://github.com/spring-guides/gs-spring-boot

cd gs-spring-boot/complete

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.5.0:config

Beispiel-Java-App auf Azure erstellen
Abbildung 3: Eine Beispiel-Java-App auf Azure erstellen.

Danach startet die Einrichtung über einen textbasierten Assistenten in der Azure CLI oder Azure Cloud Shell. Der Assistent erstellt die Datei pom.xml, die zum Beispiel für Azure App Service verwendet werden kann. Um die Anwendung in Azure bereitzustellen, kommt Maven zum Einsatz:

mvn package azure-webapp:deploy

Neben dieser Beispielanwendung lässt sich mit Java eine Verbindung zu einer Azure SQL-Datenbank herstellen. Der Beispielcode lautet:

import java.sql.*;

public class AzureSQLExample {

   // Verbindungsinformationen zur Azure SQL-Datenbank

   static final String DATABASE_URL = "jdbc:sqlserver://<server-name>.database.windows.net:1433;database=<database-name>";

   static final String DATABASE_USER = "<username>@<server-name>";

   static final String DATABASE_PASSWORD = "<password>";

   public static void main(String[] args) {

      try {

 

         // Treiber registrieren

         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

         

// Verbindung zur Datenbank herstellen

         Connection conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);

         System.out.println("Datenbankverbindung erfolgreich hergestellt.");

 

                  // Eine SQL-Abfrage ausführen

         Statement statement = conn.createStatement();

         String sql = "SELECT * FROM <table-name>";

         ResultSet result = statement.executeQuery(sql);

 

                  // Ergebnisse verarbeiten

         while(result.next()) {

           

 // Ergebnisdaten auslesen

            int id = result.getInt("id");

            String name = result.getString("name");

            double balance = result.getDouble("balance");

 

            // Ergebnisdaten ausgeben

            System.out.println("ID: " + id + ", Name: " + name + ", Balance: " + balance);

         }

       

  // Ressourcen freigeben

 

         result.close();

         statement.close();

         conn.close();

      } catch (Exception e) {

 

         // Fehlerbehandlung

         System.err.println("Fehler: " + e.getMessage());

      }

   }

}

Erfahren Sie mehr über Cloud-Software