EC2
In diesem Thema werden die erforderlichen Schritte zum Herstellen einer Verbindung zu Oracle Exadata Database Service on Dedicated Infrastructure in Oracle AI Database@AWS über eine Java-Anwendung erläutert, die auf einer Amazon-Instanz EC2 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 Service on Dedicated Infrastructure mit der Tabelle Produkt 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.
Anwendungsserver (Amazon EC2 Red Hat Enterprise Linux 10)
Auf diesem Rechner können Sie das Java-Package bereitstellen und die Anwendung ausführen, die eine Verbindung zur 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 eingehenden Regeln der Amazon-Sicherheitsgruppe EC2 geöffnet ist.
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
- Bereitstellung und Ausführung auf Amazon EC2 Red Hat Enterprise Linux 10
- Übertragen Sie
app.jarundojdbc17.jarmit SCP oder SFTP in die Red Hat Enterprise Linux-Instanz. - 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://<EC2-instance-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