package org.tests.transaction; import io.ebean.xtest.BaseTestCase; import io.ebean.DB; import io.ebean.annotation.Transactional; import io.ebean.meta.MetaTimedMetric; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; public class TestTransactionalReadOnly extends BaseTestCase { @Test public void test_readonly_datasource() { resetAllMetrics(); executeTransactionalUsingReadOnlyDataSource(); final List timedMetrics = collectMetrics().timedMetrics(); final Optional txnReadOnly = metric(timedMetrics, "txn.readonly"); assertThat(txnReadOnly.get().count()).isEqualTo(1); assertThat(metric(timedMetrics, "txn")).isEmpty(); } @Test public void test_main_datasource() { resetAllMetrics(); executeTransactionalUsingMainDataSource(); final List timedMetrics = collectMetrics().timedMetrics(); final Optional txnMain = metric(timedMetrics, "txn.main"); assertThat(txnMain.get().count()).isEqualTo(1); assertThat(metric(timedMetrics, "txn.readonly")).isEmpty(); } private Optional metric(List timedMetrics, String name) { return timedMetrics.stream() .filter(metaTimedMetric -> metaTimedMetric.name().equals(name)) .findFirst(); } @Transactional(readOnly = true) private void executeTransactionalUsingReadOnlyDataSource() { DB.find(Customer.class).findCount(); } @Transactional private void executeTransactionalUsingMainDataSource() { DB.find(Customer.class).findCount(); } }