Skip to content

Commit cff7958

Browse files
committed
intial commit
0 parents  commit cff7958

File tree

95 files changed

+24467
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+24467
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target/

.tool-versions

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
java temurin-17.0.9+9
2+
maven 3.9.9

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"java.configuration.updateBuildConfiguration": "automatic"
3+
}

API-DOCUMENTATION.md

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
# 📚 IBM MQ Integration API Documentation
2+
3+
Diese Anwendung bietet sowohl **synchrone REST APIs** als auch **asynchrone Message-Flows** für die IBM MQ Integration. Beide API-Typen sind vollständig spezifiziert und dokumentiert.
4+
5+
## 🚀 Schnellstart
6+
7+
Nach dem Start der Anwendung sind die API-Dokumentationen verfügbar unter:
8+
9+
### 📊 REST API Dokumentation (OpenAPI 3.0)
10+
- **📱 Swagger UI**: [http://localhost:8080/api/docs/swagger-ui](http://localhost:8080/api/docs/swagger-ui)
11+
- **📄 OpenAPI YAML**: [http://localhost:8080/api/docs/openapi.yaml](http://localhost:8080/api/docs/openapi.yaml)
12+
- **📋 OpenAPI JSON Info**: [http://localhost:8080/api/docs/openapi.json](http://localhost:8080/api/docs/openapi.json)
13+
14+
### ⚡ Message Flows Dokumentation (AsyncAPI 3.0)
15+
- **🎨 AsyncAPI Studio**: [http://localhost:8080/api/docs/asyncapi-studio](http://localhost:8080/api/docs/asyncapi-studio)
16+
- **📄 AsyncAPI YAML**: [http://localhost:8080/api/docs/asyncapi.yaml](http://localhost:8080/api/docs/asyncapi.yaml)
17+
- **📋 AsyncAPI JSON Info**: [http://localhost:8080/api/docs/asyncapi.json](http://localhost:8080/api/docs/asyncapi.json)
18+
19+
### 🏠 Dokumentations-Übersicht
20+
- **📖 Alle Dokumentationen**: [http://localhost:8080/api/docs/](http://localhost:8080/api/docs/)
21+
22+
## 📖 API-Übersicht
23+
24+
### REST APIs (OpenAPI)
25+
26+
Die REST APIs bieten synchrone HTTP-Endpunkte für:
27+
28+
#### 🔄 Message Operations (`/api/mq`)
29+
- `POST /api/mq/send` - Nachricht an Standard-Queue senden
30+
- `POST /api/mq/send/{queue}` - Nachricht an spezifische Queue senden
31+
- `GET /api/mq/receive` - Nachricht von Standard-Queue empfangen
32+
- `GET /api/mq/receive/{queue}` - Nachricht von spezifischer Queue empfangen
33+
- `POST /api/mq/sendreceive` - Request-Response Pattern (Nachricht senden und auf Antwort warten)
34+
- `GET /api/mq/health` - IBM MQ Service Health Check
35+
36+
#### 📋 Message Repository (`/api/messages`)
37+
- `GET /api/messages` - Alle Nachrichten abrufen
38+
- `GET /api/messages/{id}` - Spezifische Nachricht abrufen
39+
- `DELETE /api/messages/{id}` - Nachricht löschen
40+
- `GET /api/messages/by-status/{status}` - Nachrichten nach Status filtern
41+
- `GET /api/messages/by-queue/{queueName}` - Nachrichten nach Queue filtern
42+
- `GET /api/messages/count/by-status/{status}` - Nachrichten zählen nach Status
43+
- `POST /api/messages/cleanup` - Alte Nachrichten aufräumen
44+
- `GET /api/messages/health` - Repository Health Check
45+
46+
#### ⚙️ Batch Jobs (`/api/batch`)
47+
- Batch-Job Management und Monitoring
48+
49+
#### 📊 Metrics (`/api/metrics`)
50+
- Performance- und Monitoring-Daten
51+
52+
### Message Flows (AsyncAPI)
53+
54+
Die AsyncAPI-Spezifikation dokumentiert asynchrone Message-Patterns:
55+
56+
#### 📨 Queue Channels
57+
- **Request Queue** (`DEV.QUEUE.1`) - Eingehende Nachrichten
58+
- **Response Queue** (`DEV.QUEUE.2`) - Ausgehende Antworten
59+
- **Batch Processing Queue** (`DEV.BATCH.QUEUE`) - Batch-Verarbeitung
60+
- **Dead Letter Queue** (`DEV.QUEUE.DLQ`) - Fehlgeschlagene Nachrichten
61+
- **Backout Queue** (`DEV.QUEUE.1.BACKOUT`) - Backout-Nachrichten
62+
- **Health Check Queue** (`DEV.HEALTH.QUEUE`) - Health Monitoring
63+
64+
#### ⚡ Operations
65+
- **Send Message** - Nachricht senden
66+
- **Receive Message** - Nachricht empfangen
67+
- **Send Response** - Antwort senden
68+
- **Process Batch Messages** - Batch-Verarbeitung
69+
- **Handle Failed Messages** - Fehlerbehandlung
70+
- **Handle Backout Messages** - Backout-Handling
71+
- **Health Check** - Gesundheitsprüfung
72+
73+
#### 📋 Message Types
74+
- **Incoming Messages** - Eingehende Textnachrichten
75+
- **Outgoing Messages** - Verarbeitete Nachrichten
76+
- **Response Messages** - Antwort-Nachrichten mit Correlation ID
77+
- **Batch Messages** - Batch-Verarbeitungs-Nachrichten
78+
- **Failed Messages** - Fehlgeschlagene Nachrichten mit Fehlerinformationen
79+
- **Backout Messages** - Backout-Nachrichten
80+
- **Health Messages** - Health-Check-Nachrichten
81+
82+
## 🔧 Verwendung der Spezifikationen
83+
84+
### OpenAPI/Swagger UI verwenden
85+
86+
1. Öffnen Sie [http://localhost:8080/api/docs/swagger-ui](http://localhost:8080/api/docs/swagger-ui)
87+
2. Erkunden Sie die verfügbaren Endpunkte
88+
3. Testen Sie APIs direkt in der Benutzeroberfläche
89+
4. Exportieren Sie Client-Code für verschiedene Sprachen
90+
91+
### AsyncAPI Studio verwenden
92+
93+
1. Öffnen Sie [http://localhost:8080/api/docs/asyncapi-studio](http://localhost:8080/api/docs/asyncapi-studio)
94+
2. Klicken Sie auf "Open AsyncAPI Studio"
95+
3. Fügen Sie die URL ein: `http://localhost:8080/api/docs/asyncapi.yaml`
96+
4. Erkunden Sie die Message-Flows und Queue-Strukturen
97+
98+
### Spezifikationen herunterladen
99+
100+
```bash
101+
# OpenAPI YAML herunterladen
102+
curl -o openapi.yaml http://localhost:8080/api/docs/openapi.yaml
103+
104+
# AsyncAPI YAML herunterladen
105+
curl -o asyncapi.yaml http://localhost:8080/api/docs/asyncapi.yaml
106+
```
107+
108+
## 🛠️ Code-Generierung
109+
110+
### Client-Code aus OpenAPI generieren
111+
112+
```bash
113+
# JavaScript/TypeScript Client
114+
npx @openapitools/openapi-generator-cli generate \
115+
-i http://localhost:8080/api/docs/openapi.yaml \
116+
-g typescript-fetch \
117+
-o ./generated-client
118+
119+
# Java Client
120+
openapi-generator generate \
121+
-i http://localhost:8080/api/docs/openapi.yaml \
122+
-g java \
123+
-o ./java-client
124+
125+
# Python Client
126+
openapi-generator generate \
127+
-i http://localhost:8080/api/docs/openapi.yaml \
128+
-g python \
129+
-o ./python-client
130+
```
131+
132+
### Message Schemas aus AsyncAPI generieren
133+
134+
```bash
135+
# JSON Schema für Messages generieren
136+
asyncapi generate models typescript ./asyncapi.yaml
137+
138+
# Java POJOs für Messages generieren
139+
asyncapi generate models java ./asyncapi.yaml
140+
```
141+
142+
## 📊 Beispiele
143+
144+
### REST API Beispiele
145+
146+
```bash
147+
# Nachricht senden
148+
curl -X POST http://localhost:8080/api/mq/send \
149+
-H "Content-Type: text/plain" \
150+
-d "Hello World"
151+
152+
# Nachricht empfangen
153+
curl http://localhost:8080/api/mq/receive
154+
155+
# Request-Response Pattern
156+
curl -X POST http://localhost:8080/api/mq/sendreceive \
157+
-H "Content-Type: text/plain" \
158+
-d "Request message"
159+
160+
# Nachrichten nach Status abrufen
161+
curl http://localhost:8080/api/messages/by-status/PROCESSED
162+
163+
# Health Check
164+
curl http://localhost:8080/api/mq/health
165+
```
166+
167+
### Message Flow Patterns
168+
169+
Die AsyncAPI-Spezifikation dokumentiert folgende Patterns:
170+
171+
1. **Fire-and-Forget**: Nachricht senden ohne Antwort zu erwarten
172+
2. **Request-Response**: Nachricht senden und auf korrelierende Antwort warten
173+
3. **Batch Processing**: Nachrichten in Chunks verarbeiten
174+
4. **Error Handling**: Fehlgeschlagene Nachrichten in Dead Letter Queue
175+
5. **Health Monitoring**: Regelmäßige Health Checks über Message Queue
176+
177+
## 🔍 Entwicklung und Erweiterung
178+
179+
### Neue REST Endpoints hinzufügen
180+
181+
1. Annotieren Sie Ihre REST-Klassen mit OpenAPI-Annotationen:
182+
```java
183+
@Operation(summary = "Neue Operation", description = "Beschreibung")
184+
@ApiResponse(responseCode = "200", description = "Erfolg")
185+
public Response newEndpoint() { ... }
186+
```
187+
188+
2. Die OpenAPI-Spezifikation wird automatisch aktualisiert
189+
190+
### Neue Message Flows dokumentieren
191+
192+
1. Erweitern Sie die `asyncapi.yaml` Datei um neue Channels und Operations
193+
2. Definieren Sie neue Message-Schemas in der `components.schemas` Sektion
194+
3. Aktualisieren Sie die Dokumentation
195+
196+
### Automatische Generierung
197+
198+
Die Spezifikationen werden automatisch aus folgenden Quellen generiert:
199+
200+
- **OpenAPI**: Jakarta REST Annotationen + MicroProfile OpenAPI Annotationen
201+
- **AsyncAPI**: Manuelle YAML-Datei (kann durch Code-Scanner erweitert werden)
202+
203+
## 🔒 Sicherheit
204+
205+
### OpenAPI Security
206+
207+
Die REST APIs unterstützen:
208+
- **Bearer Token Authentication** (JWT)
209+
- Konfigurierbar über `@SecurityRequirement` Annotationen
210+
211+
### AsyncAPI Security
212+
213+
IBM MQ unterstützt:
214+
- **Basic Authentication** (Username/Password)
215+
- **SSL/TLS** mit Zertifikaten
216+
- **Channel-basierte Zugriffskontrolle**
217+
218+
## 📱 Integration in IDEs
219+
220+
### VS Code
221+
- Installieren Sie die "OpenAPI (Swagger) Editor" Extension
222+
- Öffnen Sie die `openapi.yaml` Datei für Syntax-Highlighting und Validierung
223+
224+
### IntelliJ IDEA
225+
- Installieren Sie das "OpenAPI Specifications" Plugin
226+
- Importieren Sie die Spezifikation für Auto-Completion
227+
228+
### Postman
229+
- Importieren Sie die OpenAPI-Spezifikation direkt in Postman
230+
- Automatische Collection-Generierung mit allen Endpunkten
231+
232+
## 🤝 Best Practices
233+
234+
### OpenAPI
235+
- Verwenden Sie aussagekräftige `summary` und `description` Felder
236+
- Definieren Sie Beispiele für Request/Response Bodies
237+
- Gruppieren Sie verwandte Endpunkte mit `tags`
238+
- Dokumentieren Sie alle Error Codes
239+
240+
### AsyncAPI
241+
- Definieren Sie klare Channel-Namen und Beschreibungen
242+
- Nutzen Sie Message Traits für wiederverwendbare Patterns
243+
- Dokumentieren Sie Message-Formate und Schemas
244+
- Beschreiben Sie Operation-Binding-Details
245+
246+
## 🎯 Weiterführende Ressourcen
247+
248+
- **OpenAPI Specification**: https://spec.openapis.org/oas/v3.0.3
249+
- **AsyncAPI Specification**: https://www.asyncapi.com/docs/specifications/v3.0.0
250+
- **MicroProfile OpenAPI**: https://github.com/eclipse/microprofile-open-api
251+
- **Swagger UI**: https://swagger.io/tools/swagger-ui/
252+
- **AsyncAPI Studio**: https://studio.asyncapi.com/
253+
254+
## ⚡ Troubleshooting
255+
256+
### OpenAPI UI lädt nicht
257+
- Prüfen Sie, ob die Anwendung läuft: http://localhost:8080/api/docs/openapi.yaml
258+
- Überprüfen Sie Browser-Konsole auf JavaScript-Fehler
259+
260+
### AsyncAPI YAML nicht verfügbar
261+
- Überprüfen Sie, ob die Datei im Classpath liegt: `src/main/resources/asyncapi.yaml`
262+
- Prüfen Sie Anwendungslogs auf Fehler beim Laden der Ressource
263+
264+
### Message-Flow Dokumentation unvollständig
265+
- Erweitern Sie die AsyncAPI-Spezifikation um fehlende Channels
266+
- Fügen Sie neue Message-Schemas in der `components` Sektion hinzu

Dockerfile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
FROM payara/server-full:6.2024.7-jdk17
2+
3+
# Copy application configuration
4+
COPY src/main/resources/META-INF/microprofile-config.properties /opt/payara/appserver/domains/domain1/config/
5+
6+
# Copy the built application to a temporary location (not autodeploy yet)
7+
COPY target/payara6-ibmmq.war /opt/payara/payara6-ibmmq.war
8+
9+
# Copy startup script
10+
COPY startup.sh /opt/payara/startup.sh
11+
12+
# Expose ports
13+
EXPOSE 8080 4848 9009
14+
15+
# Set environment variables for IBM MQ connection
16+
ENV IBM_MQ_HOSTNAME=ibmmq \
17+
IBM_MQ_PORT=1414 \
18+
IBM_MQ_QUEUE_MANAGER=QM1 \
19+
IBM_MQ_CHANNEL=DEV.APP.SVRCONN \
20+
IBM_MQ_USERNAME=app \
21+
IBM_MQ_PASSWORD=passw0rd
22+
23+
# Start Payara Server using startup script
24+
CMD ["bash", "/opt/payara/startup.sh"]

0 commit comments

Comments
 (0)