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));
}
}
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;
}
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);
}
}
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;
}
Aggregations