Google Compute
In diesem Thema werden die erforderlichen Schritte zum Herstellen einer Verbindung zu Oracle Exadata Database Service on Dedicated Infrastructure in Oracle AI Database@Google Cloud über eine Java-Anwendung erläutert, die auf einer Compute Engine - Linux Virtual Machine - ausgeführt wird.
Voraussetzungen
In diesem Abschnitt werden die Anforderungen für das Deployment, Kompilieren und Packen einer Java-Anwendung und das Deployment in einer Anwendung beschrieben, um eine Verbindung zu Oracle Exadata Database mit der Tabelle Produkte für das Erstellen, Lesen, Aktualisieren und Löschen (CRUD) herzustellen.
Oracle Exadata-Datenbank
- Oracle Exadata Database Service on Dedicated Infrastructure - Verbindungsdetails
- Ein Oracle Database-Benutzer, der Datenbanksessions erstellt und SQL-Befehle ausführt.
- Konnektivität vom Anwendungsserver zur Oracle Exadata-Datenbank.
- Eine Produkttabelle in Oracle Database.
-- Create the Product table
CREATE TABLE Product (
id NUMBER PRIMARY KEY,
name VARCHAR2(100) NOT NULL,
price NUMBER(10, 2) NOT NULL
);
-- Insert a quick test record (optional, so your UI isn't empty on first load)
INSERT INTO Product (id, name, price)
VALUES (1, 'Test Migration Item', 99.99);
-- Commit the transaction
COMMIT;Entwicklungsmaschine
- Java Development Kit (JDK): Laden Sie JDK 25 herunter, und installieren Sie es.
- Oracle JDBC-Treiber: Laden Sie den Standalone-Treiber
ojdbc17.jarherunter.
Application Server (Compute Engine - Oracle Linux-VM-Instanz 9+)
Auf diesem Rechner können Sie das Java-Package bereitstellen und die Anwendung ausführen, die eine Verbindung zur Oracle Exadata-Datenbank herstellt. Installieren Sie die folgende Software, um die Anwendung auszuführen.
- Java Runtime Environment (JRE/JDK): Installieren Sie OpenJDK 25.
sudo dnf install java-25-openjdk - Oracle JDBC-Treiber: Laden Sie dieselbe
ojdbc17.jar-Datei neben Ihrer Anwendung hoch. - Stellen Sie sicher, dass Port
8080in den VPC-Firewallregeln geöffnet ist, die mit der VM-Instanz verknüpft sind.
- Führen Sie den folgenden Befehl aus, um den Linux-Firewallport 8080 zu aktivieren.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-ports
Implementierung
- Auf Entwicklungsmaschine erstellen und verpacken
- Platzieren Sie
SimpleProductApp.javaundojdbc17.jarin demselben Verzeichnis.import java.io.*; import java.net.InetSocketAddress; import java.sql.*; import com.sun.net.httpserver.*; public class SimpleProductApp { // Read sensitive info from environment variables private static final String DB_URL = System.getenv("DB_URL"); private static final String DB_USER = System.getenv("DB_USER"); private static final String DB_PASS = System.getenv("DB_PASS"); public static void main(String[] args) throws Exception { if (DB_URL == null || DB_USER == null || DB_PASS == null) { System.err.println("ERROR: Missing DB_URL, DB_USER, or DB_PASS environment variables."); System.exit(1); } // Create a built-in Java HTTP Server on port 8080 HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); server.createContext("/", new ProductHandler()); server.setExecutor(null); server.start(); System.out.println("Server started on port 8080."); System.out.println("Connecting to Exadata at: " + DB_URL); } static class ProductHandler implements HttpHandler { @Override public void handle(HttpExchange exchange) throws IOException { String method = exchange.getRequestMethod(); StringBuilder responseHTML = new StringBuilder(); try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS)) { // Handle POST requests (Create, Update, Delete) if ("POST".equalsIgnoreCase(method)) { InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(), "utf-8"); BufferedReader br = new BufferedReader(isr); String formData = br.readLine(); // Simple URL-encoded parsing (action=add&id=1&name=Apples&price=10) String[] params = formData.split("&"); String action = getValue(params, 0); String id = getValue(params, 1); String name = getValue(params, 2); String price = getValue(params, 3); try (Statement stmt = conn.createStatement()) { if ("add".equals(action)) { stmt.executeUpdate("INSERT INTO Product (id, name, price) VALUES (" + id + ", '" + name + "', " + price + ")"); } else if ("update".equals(action)) { stmt.executeUpdate("UPDATE Product SET name='" + name + "', price=" + price + " WHERE id=" + id); } else if ("delete".equals(action)) { stmt.executeUpdate("DELETE FROM Product WHERE id=" + id); } } } // Handle GET requests (Read/View UI) responseHTML.append("<html><body style='font-family: sans-serif; padding: 20px;'>"); responseHTML.append("<h2>Exadata Product Manager</h2>"); // Input Form responseHTML.append("<form method='POST' style='background: #f4f4f4; padding: 15px; width: 300px;'>") .append("Action: <select name='action'><option value='add'>Add</option><option value='update'>Update</option><option value='delete'>Delete</option></select><br/><br/>") .append("ID: <input type='number' name='id' required><br/><br/>") .append("Name: <input type='text' name='name'><br/><br/>") .append("Price: <input type='number' step='0.01' name='price'><br/><br/>") .append("<input type='submit' value='Execute'>") .append("</form><br/>"); // Data Table responseHTML.append("<table border='1' cellpadding='8' style='border-collapse: collapse;'>") .append("<tr style='background: #ddd;'><th>ID</th><th>Name</th><th>Price</th></tr>"); try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT id, name, price FROM Product ORDER BY id")) { while (rs.next()) { responseHTML.append("<tr><td>").append(rs.getInt("id")).append("</td>") .append("<td>").append(rs.getString("name")).append("</td>") .append("<td>").append(rs.getDouble("price")).append("</td></tr>"); } } responseHTML.append("</table></body></html>"); } catch (SQLException e) { responseHTML.append("<h3>Database Error: ").append(e.getMessage()).append("</h3>"); } // Send Response byte[] responseBytes = responseHTML.toString().getBytes("UTF-8"); exchange.sendResponseHeaders(200, responseBytes.length); OutputStream os = exchange.getResponseBody(); os.write(responseBytes); os.close(); } private String getValue(String[] params, int index) { if (index < params.length && params[index].contains("=")) { return params[index].split("=").length > 1 ? params[index].split("=")[1] : ""; } return ""; } } } - Öffnen Sie die Eingabeaufforderung oder das Terminal, und führen Sie Folgendes aus.
- Führen Sie den folgenden Befehl aus, um die Java-Datei zu kompilieren.
javac -cp ojdbc17.jar SimpleProductApp.java - In JAR packen verpackt die kompilierte
.class-Datei in einer ausführbaren JAR-Datei. Sie müssen den Oracle JDBC-Treiber nicht in der JAR bündeln. Geben Sie den Treiber zur Laufzeit mithilfe des Klassenpfads an.jar cfe app.jar SimpleProductApp *.classHinweis
Wenn der Befehl
jarunter Windows nicht erkannt wird, aktualisieren Sie das SystemPATH. - Nach einer erfolgreichen Kompilierung und einem erfolgreichen Package werden im Ausgabeverzeichnis zusätzliche Dateien als
app.jarerstellt.
- Platzieren Sie
- Auf Compute Engine bereitstellen und ausführen - Oracle Linux-VM-Instanz 9+
- Übertragen Sie
app.jarundojdbc17.jarmit SCP oder SFTP auf Ihre Oracle Linux-VM. - Um Umgebungsvariablen festzulegen, exportieren Sie die Verbindungszeichenfolgen und Zugangsdaten der Exadata-Datenbank direkt im Linux-Terminal. Ersetzen Sie die Platzhalter durch Ihre Exadata-Datenbankwerte.
export DB_URL="jdbc:oracle:thin:@//<exadata-ip-or-scan>:1521/<service_name>" export DB_USER="your_db_username" export DB_PASS="your_db_password" - Führen Sie den folgenden Befehl aus, um die Anwendung zu starten, indem Sie sicherstellen, dass sich die Anwendung und der Oracle JDBC-Treiber im Classpath befinden.
nohup java -cp app.jar:ojdbc17.jar SimpleProductApp > app.log 2>&1 & # check logs cat app.log - Um auf die UI zuzugreifen, öffnen Sie einen Webbrowser, und navigieren Sie zu
http://<google-vm-public-ip>:8080. - Nachdem die Anwendung erfolgreich gestartet wurde, zeigt die UI Optionen zur Verwaltung von Produkten an.

- Übertragen Sie
- Bereinigen
- Führen Sie den folgenden Befehl aus, um die Java-Anwendung zu beenden und den aktivierten HTTP-Service aus
app.jarzu stoppen.pkill -f SimpleProductApp
- Führen Sie den folgenden Befehl aus, um die Java-Anwendung zu beenden und den aktivierten HTTP-Service aus