Spezifikation / Framework-APIMessaging3.1

Jakarta Messaging

Jakarta Messaging standardisiert asynchrone Kommunikation über Queues und Topics.

Einordnung
Spezifikation / Framework-API
Enterprise-Rolle
Messaging entkoppelt Systeme zeitlich und technisch, ist aber kein Ersatz für saubere Fachereignisse und Idempotenz.
Diagramm zu Jakarta Messaging

Fachliches Verständnis

Messaging entkoppelt Systeme zeitlich und technisch, ist aber kein Ersatz für saubere Fachereignisse und Idempotenz. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.

Kernkonzepte

  • ConnectionFactory, JMSContext, Queue, Topic.
  • Point-to-Point und Publish/Subscribe.
  • Message Listener.
  • Transaktionale Nachrichtenverarbeitung.

Typische Einsatzfälle

  • Aufträge asynchron verarbeiten.
  • Legacy-Systeme über Queues integrieren.
  • Lastspitzen puffern.

Technisches Beispiel

java
@ApplicationScoped
public class OrderEventPublisher {
    @Inject JMSContext context;
    @Resource(lookup = "java:/jms/topic/order-events") Topic topic;

    public void publish(OrderPlaced event) {
        ObjectMessage message = context.createObjectMessage(event);
        message.setStringProperty("eventType", "OrderPlaced");
        context.createProducer().send(topic, message);
    }
}

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:/jms/topic/order-events")
})
public class BillingConsumer implements MessageListener {
    public void onMessage(Message message) { /* idempotent verarbeiten */ }
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.

Enterprise-Fallen

  • Nicht-idempotente Consumer.
  • Nachrichtenformat ohne Versionierung.
  • Synchrone Erwartungen über asynchrone Kanäle.

Legacy-Modernisierung

IBM MQ/JMS Legacy kann mit standardisierten Jakarta Messaging APIs gekapselt werden.

Vertiefung: Review-Fragen für Senior-Entwickler
  • Welche Spezifikation ist hier wirklich nötig?
  • Welche Runtime-Funktion wird genutzt und ist sie portabel?
  • Wo liegt die Transaktionsgrenze?
  • Sind API-Verträge, DTOs und Domain-Modelle getrennt?
  • Ist der Code ohne Application Server testbar?