Azure Compute VM
このトピックでは、Azure Linux Virtual Machineで実行されているJavaアプリケーションからOracle AI Database@AzureのOracle Exadata Database Service on Dedicated Infrastructureに接続するために必要なステップについて説明します。
前提条件
この項では、作成、読取り、更新および削除(CRUD)操作を実行するための「製品」表を使用してOracle Exadata Database Service on Dedicated Infrastructureに接続するために、Javaアプリケーションをデプロイ、コンパイルおよびパッケージ化してから、アプリケーションにデプロイするための要件について説明します。
Oracle Exadata Database
このデータベースは、Javaアプリケーションを使用してアプリケーション・サーバーから接続されます。
- Oracle Exadata Database Service on Dedicated Infrastructure接続の詳細
- データベース・セッションを作成し、SQLコマンドを実行するOracle Databaseユーザー。
- アプリケーション・サーバーからOracle Exadata Databaseへの接続。
- Oracle Databaseの製品表。
次のコマンドを実行してProduct表を作成し、テスト・レコードを挿入します:
-- 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;開発マシン
このマシンを使用して、Javaソースをコンパイルし、パッケージを作成します。次のソフトウェアをインストールして、アプリケーションを実行します。
- Java Development Kit (JDK): JDK 25をダウンロードしてインストールします。
- Oracle JDBCドライバ:スタンドアロンの
ojdbc17.jarをダウンロードします。
アプリケーション・サーバー(Azure Oracle Linux VM 9+)
このマシンを使用して、Javaパッケージをデプロイし、Exadata Databaseに接続するアプリケーションを実行します。次のソフトウェアをインストールして、アプリケーションを実行します。
- Java Runtime Environment (JRE/JDK): OpenJDK 25をインストールします。
sudo dnf install java-25-openjdk - Oracle JDBCドライバ: 同じ
ojdbc17.jarファイルをアプリケーションと一緒にアップロードします。 - Azure Network Security Groupの設定で、ポート
8080が開いていることを確認します。
- 次のコマンドを実行して、Linuxファイアウォール・ポート8080を有効にします。
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-ports
実装
- 開発マシンでのビルドおよびパッケージ化
SimpleProductApp.javaとojdbc17.jarを同じディレクトリに配置します。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 ""; } } }- コマンド・プロンプトまたはターミナルを開き、次を実行します。
- 次のコマンドを実行して、Javaファイルをコンパイルします。
javac -cp ojdbc17.jar SimpleProductApp.java - JARへのパッケージ化は、コンパイルされた
.classファイルを実行可能JARにパッケージ化します。Oracle JDBCドライバをJARにバンドルする必要はありません。クラス・パスを使用して、実行時にドライバを指定します。jar cfe app.jar SimpleProductApp *.classノート
Windowsで
jarコマンドが認識されない場合は、システムPATHを更新します。 - コンパイルおよびパッケージが正常に完了すると、出力ディレクトリには
app.jarとして追加のファイルが作成されます。
- Azure Oracle Linux VMでのデプロイと実行
- SCPまたはSFTPを使用して、
app.jarおよびojdbc17.jarをOracle Linux VMに転送します。 - 環境変数を設定するには、Linux端末でExadata Database接続文字列および資格証明を直接エクスポートします。プレースホルダをExadata Database値に置き換えます。
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" - 次のコマンドを実行して、アプリケーションとOracle JDBCドライバの両方がクラスパスにあることを確認し、アプリケーションを起動します。
nohup java -cp app.jar:ojdbc17.jar SimpleProductApp > app.log 2>&1 & # check logs cat app.log - UIにアクセスするには、Webブラウザを開き、
http://<azure-vm-public-ip>:8080にナビゲートします。 - アプリケーションが正常に起動すると、UIに製品を管理するためのオプションが表示されます。

- SCPまたはSFTPを使用して、
- 消去
- 次のコマンドを実行してJavaアプリケーションを終了し、
app.jarから有効になっているHTTPサービスを停止します。pkill -f SimpleProductApp
- 次のコマンドを実行してJavaアプリケーションを終了し、