VM de Computação do Azure
Este tópico explica as etapas necessárias para estabelecer conexão com o Oracle Exadata Database Service on Dedicated Infrastructure no Oracle AI Database@Azure de um aplicativo Java em execução em uma Máquina Virtual Linux do Azure.
Pré-requisitos
Esta seção descreve os requisitos para implantar, compilar e empacotar um aplicativo Java e, em seguida, implantá-lo no aplicativo para estabelecer conexão com o Oracle Exadata Database Service on Dedicated Infrastructure com a tabela Produtos para executar operações de criação, leitura, atualização e exclusão (CRUD).
Banco de Dados Oracle Exadata
- Detalhes da conexão do Oracle Exadata Database Service on Dedicated Infrastructure
- Um usuário do Oracle Database para criar sessões de banco de dados e executar comandos SQL.
- Conectividade do servidor de aplicativos com o Oracle Exadata Database.
- Uma tabela de produtos no 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;Máquina de Desenvolvimento
- JDK (Java Development Kit): Faça download do JDK 25 e instale-o.
- Driver Oracle JDBC: Faça download do
ojdbc17.jarstand-alone.
Servidor de Aplicativos (Azure Oracle Linux VM 9+)
Use esta máquina para implantar o pacote Java e executar o aplicativo que se conecta ao Exadata Database. Instale o software a seguir para executar o aplicativo.
- Java Runtime Environment (JRE/JDK): Instale o OpenJDK 25.
sudo dnf install java-25-openjdk - Driver JDBC da Oracle: Faça upload do mesmo arquivo
ojdbc17.jarjunto com seu aplicativo. - Certifique-se de que a porta
8080esteja aberta nas definições do Grupo de Segurança de Rede do Azure.
- Execute o comando a seguir para ativar a porta de firewall Linux 8080.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload sudo firewall-cmd --list-ports
Implementação
- Criar e Empacotar na Máquina de Desenvolvimento
- Coloque
SimpleProductApp.javaeojdbc17.jarno mesmo diretório.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 ""; } } } - Abra o prompt de comando ou terminal e execute o seguinte.
- Execute o comando a seguir para compilar o arquivo Java.
javac -cp ojdbc17.jar SimpleProductApp.java - Pacote em um JAR empacota o arquivo
.classcompilado em um JAR executável. Não é necessário agrupar o driver JDBC da Oracle no JAR. Forneça o driver no runtime usando o caminho da classe.jar cfe app.jar SimpleProductApp *.classObservação
Se o comando
jarnão for reconhecido no Windows, atualize o sistemaPATH. - Após uma compilação e um pacote bem-sucedidos, o diretório de saída terá arquivos adicionais criados como
app.jar.
- Coloque
- Implantar e Executar na VM do Oracle Linux do Azure
- Transfira
app.jareojdbc17.jarpara a sua Oracle Linux VM usando SCP ou SFTP. - Para definir variáveis de ambiente, exporte suas strings de conexão e credenciais do Exadata Database diretamente no terminal do Linux. Substitua os placeholders pelos valores do 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" - Execute o comando a seguir para iniciar o aplicativo, garantindo que o aplicativo e o driver JDBC da Oracle estejam no classpath.
nohup java -cp app.jar:ojdbc17.jar SimpleProductApp > app.log 2>&1 & # check logs cat app.log - Para acessar a interface do usuário, abra um Web browser e navegue até
http://<azure-vm-public-ip>:8080. - Depois que o aplicativo é iniciado com sucesso, a IU exibe opções para gerenciar Produtos.

- Transfira
- Limpar
- Execute o comando a seguir para encerrar o aplicativo Java para interromper o serviço HTTP ativado em
app.jar.pkill -f SimpleProductApp
- Execute o comando a seguir para encerrar o aplicativo Java para interromper o serviço HTTP ativado em