- Docker und Docker Compose installiert
- Java 21+
- Maven
# In das Projektverzeichnis wechseln
cd quarkus-demo
# Oracle Database Container starten (dauert ~1-2 Minuten)
docker-compose up -d oracle-db
# Warten bis DB bereit ist
docker-compose logs -f oracle-db
# Warten auf: "DATABASE IS READY TO USE!"
# (CTRL+C zum Beenden)Hinweis: Beim ersten Start werden Sie eine Warnung über ORA-65012: Pluggable database FREEPDB1 already exists sehen können. Diese kann ignoriert werden - sie tritt auf, wenn die Datenbank bereits aus einem früheren Start persistiert wurde.
# Benutzer erstellen (nur beim ersten Start nötig)
docker exec oracle-xml-db bash -c "echo -e 'CREATE USER xmluser IDENTIFIED BY oracle123;\nGRANT CONNECT, RESOURCE TO xmluser;\nGRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO xmluser;\nGRANT UNLIMITED TABLESPACE TO xmluser;\nEXIT;' | sqlplus system/oracle123@FREEPDB1"
# Schema und Testdaten laden
docker exec oracle-xml-db bash -c "sqlplus xmluser/oracle123@FREEPDB1 < /container-entrypoint-initdb.d/01-schema.sql"# Prüfen ob Tabellen erstellt wurden
docker exec oracle-xml-db bash -c "echo 'SELECT table_name FROM user_tables ORDER BY table_name;' | sqlplus -s xmluser/oracle123@FREEPDB1"
# Sollte ausgeben: EMPLOYEES, PRODUCTS, XML_DOCUMENTS./mvnw quarkus:devDie Anwendung läuft auf: http://localhost:8080
curl http://localhost:8080/xdk/employees# XMLElement() Konvertierung
curl http://localhost:8080/xsu/employees
# ROWSET Format
curl http://localhost:8080/xsu/employees/rows
# SQL Aggregation
curl http://localhost:8080/xsu/summary# XMLType erstellen
curl -X POST 'http://localhost:8080/xmltype/create?name=test' \
-H 'Content-Type: application/xml' \
-d '<employee><name>Test User</name><salary>50000</salary></employee>'
# Wert extrahieren (docId von create verwenden)
curl 'http://localhost:8080/xmltype/extract/1?xpath=/employee/name'
# Wert aktualisieren
curl -X PUT 'http://localhost:8080/xmltype/update/1?xpath=/employee/salary&value=60000'
# Mitarbeiter nach Skill suchen
curl http://localhost:8080/xmltype/search/skill/Javahttp://localhost:8080/q/swagger-ui
# SQL*Plus
docker exec -it oracle-xml-db sqlplus xmluser/oracle123@FREEPDB1
# SQLcl (moderner)
docker exec -it oracle-xml-db sql xmluser/oracle123@FREEPDB1Nützliche SQL-Befehle:
-- Alle Tabellen anzeigen
SELECT table_name FROM user_tables;
-- Employees ansehen
SELECT * FROM employees;
-- XMLType Spalte ansehen
SELECT id, name, skills_xml.getClobVal() FROM employees;
-- XPath auf XMLType
SELECT id, name,
extractValue(skills_xml, '/skills/skill[1]') as first_skill
FROM employees;Der Benutzer xmluser wurde nicht erstellt:
# Lösung: Benutzer manuell erstellen
docker exec oracle-xml-db bash -c "echo -e 'CREATE USER xmluser IDENTIFIED BY oracle123;\nGRANT CONNECT, RESOURCE TO xmluser;\nGRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE TO xmluser;\nGRANT UNLIMITED TABLESPACE TO xmluser;\nEXIT;' | sqlplus system/oracle123@FREEPDB1"Dies ist keine Fehlermeldung, sondern nur eine Warnung beim Neustart. Die Datenbank wurde bereits beim ersten Start initialisiert und die Daten sind persistent. Sie können dies ignorieren.
Für einen kompletten Neustart:
# Alles löschen (inklusive Daten!)
docker-compose down -v
# Neu starten
docker-compose up -d oracle-db
# Dann Schritt 2 (Datenbank initialisieren) erneut ausführendocker-compose logs oracle-db
docker-compose restart oracle-db# Prüfen ob DB läuft
docker ps | grep oracle
# Port prüfen
ss -tuln | grep 1521
# Health-Status prüfen
docker inspect oracle-xml-db | grep -A5 HealthDie XMLIndex-Erstellung schlägt fehl, da Oracle Free Edition spezielle Konfigurationen benötigt. Dies ist kein Problem - die Tabellen funktionieren trotzdem. Die Indizes sind nur Performance-Optimierungen.
- Dateibasiert mit
OracleXdkParser - Endpoints:
/xdk/*
- Oracle-DB mit
XsuService - Native Funktionen:
XMLElement(),XMLAgg(),getClobVal() - Endpoints:
/xsu/*
- Oracle-DB mit
XmlTypeRepository - Native Funktionen:
XMLType(),extract(),existsNode(),updateXML() - XMLType Spalten in
employees.skills_xmlundxml_documents.xml_data - Endpoints:
/xmltype/*