Ana içeriğe geç

4.5. Listener#

BPMN'de bulunan eventlerin dinlenmesini ve buna göre istenilen işlemlerin yapılmasını sağlayan yapıdır.

Yetenekleri#

  • BPMN event tipine göre bir veya birden fazla custom listener tanımlanabilmesi sağlanmıştır.
  • BPMN event tipine göre ön tanımlı default listenerların devreye alınıp kaldırılabilmesi sağlanmıştır.

Default Listener#

Farklı event tipine göre default loglama ve kategori alanı belirleme için aşağıdaki anotasyonlar kullanılabilir: * @HvlEnableBpmnEntityCreatedLogListener -> BPMN entity'si oluşturma işlemlerinin loglanmasını ve entity'e kategori bilgisi yazılmasını sağlayan anotasyondur. * @HvlEnableBpmnProcessCompletedLogListener -> BPMN süreç tamamlanma adımının loglanmasını sağlayan anotasyondur. * @HvlEnableBpmnProcessStartedLogListener -> BPMN süreç başlatma adımının loglanmasını sağlayan anotasyondur. * @HvlEnableBpmnTaskCompletedLogListener -> BPMN görev tamamlanma adımının loglanmasını sağlayan anotasyondur. * @HvlEnableBpmnTaskCreatedLogListener -> BPMN görev oluşturulma adımının loglanmasını ve göreve kategori bilgisi yazılmasını sağlayan anotasyondur.

"HvlEnableBpmnEntityCreatedLogListener" ve "HvlEnableBpmnTaskCreatedLogListener" listener'larında yazılacak olan kategori bilgisi, "BPMN_CATEGORY" çevre değişkeninden alınır.

Custom Listener#

Custom listener, default listener'dan farklı olarak kullanıcının tamamen kendi ihtiyaçlarına göre özelleştirebildiği listener tipini ifade eder. Bir event tipi için birden fazla tanımlanabilir.

Konfigurasyonların tanımlandığı yaml dosyası aşağıdaki gibidir.

    listener:
        custom-listener:
        process-started: ${BPMN_CUSTOM_PROCESS_STARTED_LISTENERS:}
        process-completed: ${BPMN_CUSTOM_PROCESS_COMPLETED_LISTENERS:}
        task-created: ${BPMN_CUSTOM_TASK_CREATED_LISTENERS:}
        task-completed: ${BPMN_CUSTOM_TASK_COMPLETED_LISTENERS:}
        entity-created: ${BPMN_CUSTOM_ENTITY_CREATED_LISTENERS:}
Bu konfigurasyonda görülen uygun ortam değişkenleri tanımlanarak custom listener, Flowable'ın RuntimeService'ine otomatik inject edilir.

Örnek olarak, TestListener class'ını, süreç başlangıç event'i için listener olarak tanımlamak istediğimizi varsayalım. Ortam değişkenlerine aşağıdaki değişken eklenmelidir.

BPMN_CUSTOM_PROCESS_STARTED_LISTENERS: testListener
Ek olarak, aynı event tipi için birden fazla farklı işler yapan listener sınıfları da aşağıdaki gibi tanımlanabilir.
BPMN_CUSTOM_PROCESS_STARTED_LISTENERS: testListener, testListener2
Listener sınıfının içeriği de aşağıdaki gibi olmalıdır. Tanımlanan event tipi için; onEvent metodunun içeriği çalışır.

@Component
@HvlTransactionalRollbackForCheckedException
public class TestListener extends AbstractFlowableEventListener {

    private final ProcessEngine processEngine;


    public TestListener(ProcessEngine processEngine) {
        this.processEngine = processEngine;
    }

    @Override
    public void onEvent(FlowableEvent flowableEvent) {
        // do your thing
    }

    @Override
    public boolean isFailOnException() {
        return false;
    }

}