Search in sources :

Example 1 with ITrx

use of org.adempiere.ad.trx.api.ITrx in project metasfresh-webui-api by metasfresh.

the class WebsocketSender method getQueue.

private WebsocketEventsQueue getQueue() {
    final ITrxManager trxManager = Services.get(ITrxManager.class);
    final ITrx trx = trxManager.getThreadInheritedTrx(OnTrxMissingPolicy.ReturnTrxNone);
    if (!trxManager.isActive(trx)) {
        return autoflushQueue;
    } else if (!trx.getTrxListenerManager().canRegisterOnTiming(TrxEventTiming.AFTER_COMMIT)) {
        return autoflushQueue;
    } else {
        return trx.getProperty(WebsocketEventsQueue.class.getName(), () -> createAndBindTrxQueue(trx));
    }
}
Also used : ITrx(org.adempiere.ad.trx.api.ITrx) ITrxManager(org.adempiere.ad.trx.api.ITrxManager)

Example 2 with ITrx

use of org.adempiere.ad.trx.api.ITrx in project metasfresh-webui-api by metasfresh.

the class ViewChangesCollector method getCurrentOrNull.

public static final ViewChangesCollector getCurrentOrNull() {
    // 
    // Try get/create transaction level collector
    final ITrxManager trxManager = Services.get(ITrxManager.class);
    final ITrx currentTrx = trxManager.getThreadInheritedTrx(OnTrxMissingPolicy.ReturnTrxNone);
    if (!trxManager.isNull(currentTrx)) {
        return currentTrx.getProperty(TRXPROPERTY_Name, trx -> {
            final ViewChangesCollector collector = new ViewChangesCollector();
            trx.getTrxListenerManager().newEventListener(TrxEventTiming.AFTER_COMMIT).registerHandlingMethod(innerTrx -> collector.close());
            return collector;
        });
    }
    // 
    // Try getting thread level collector
    final ViewChangesCollector threadLocalCollector = THREADLOCAL.get();
    if (threadLocalCollector != null) {
        return threadLocalCollector;
    }
    // Fallback: return null
    return null;
}
Also used : ITrx(org.adempiere.ad.trx.api.ITrx) ITrxManager(org.adempiere.ad.trx.api.ITrxManager)

Example 3 with ITrx

use of org.adempiere.ad.trx.api.ITrx in project metasfresh-webui-api by metasfresh.

the class DocumentWebsocketPublisher method forCollector.

private void forCollector(final Consumer<JSONDocumentChangedWebSocketEventCollector> consumer) {
    // 
    // Get the collector to use
    final JSONDocumentChangedWebSocketEventCollector collector;
    final boolean autoflush;
    final ITrxManager trxManager = Services.get(ITrxManager.class);
    final ITrx trx = trxManager.getThreadInheritedTrx(OnTrxMissingPolicy.ReturnTrxNone);
    final JSONDocumentChangedWebSocketEventCollector threadLocalCollector = THREAD_LOCAL_COLLECTOR.get();
    if (threadLocalCollector != null) {
        collector = threadLocalCollector;
        autoflush = false;
    } else if (trxManager.isActive(trx)) {
        collector = trx.getProperty(JSONDocumentChangedWebSocketEventCollector.class.getName(), () -> createCollectorAndBind(trx, websocketSender));
        autoflush = false;
    } else {
        collector = JSONDocumentChangedWebSocketEventCollector.newInstance();
        autoflush = true;
    }
    // 
    // Call the consumer
    consumer.accept(collector);
    // Autoflush if needed
    if (autoflush) {
        sendAllAndClear(collector, websocketSender);
    }
}
Also used : ITrx(org.adempiere.ad.trx.api.ITrx) ITrxManager(org.adempiere.ad.trx.api.ITrxManager)

Example 4 with ITrx

use of org.adempiere.ad.trx.api.ITrx in project metasfresh-webui-api by metasfresh.

the class DocumentCacheInvalidationDispatcher method reset.

@Override
public int reset(@NonNull final CacheInvalidateMultiRequest request) {
    final ITrxManager trxManager = Services.get(ITrxManager.class);
    final ITrx currentTrx = trxManager.getThreadInheritedTrx(OnTrxMissingPolicy.ReturnTrxNone);
    if (trxManager.isNull(currentTrx)) {
        async.execute(() -> resetNow(request));
    } else {
        final CacheInvalidateMultiRequestsCollector collector = currentTrx.getProperty(TRXPROP_Requests, trx -> {
            final CacheInvalidateMultiRequestsCollector c = new CacheInvalidateMultiRequestsCollector();
            trx.getTrxListenerManager().newEventListener(TrxEventTiming.AFTER_COMMIT).registerHandlingMethod(innerTrx -> {
                final CacheInvalidateMultiRequest aggregatedRequest = c.aggregateOrNull();
                if (aggregatedRequest == null) {
                    return;
                }
                async.execute(() -> resetNow(aggregatedRequest));
            });
            return c;
        });
        collector.add(request);
    }
    // not relevant
    return 1;
}
Also used : ITrx(org.adempiere.ad.trx.api.ITrx) CacheInvalidateMultiRequest(org.adempiere.ad.dao.cache.CacheInvalidateMultiRequest) ITrxManager(org.adempiere.ad.trx.api.ITrxManager)

Aggregations

ITrx (org.adempiere.ad.trx.api.ITrx)4 ITrxManager (org.adempiere.ad.trx.api.ITrxManager)4 CacheInvalidateMultiRequest (org.adempiere.ad.dao.cache.CacheInvalidateMultiRequest)1