/** * Get the transaction isolation level according to given {@link TransactionConfiguration}. * @param transactionConfiguration transaction configuration * @return Optional isolation level */ private static Optional<Integer> getIsolationLevel(TransactionConfiguration transactionConfiguration) { if (transactionConfiguration == null) { return Optional.empty(); } return transactionConfiguration.getTransactionOptions().filter(o -> o instanceof JdbcTransactionOptions) .map(o -> (JdbcTransactionOptions) o).flatMap(o -> o.getTransactionIsolation()).map(i -> { switch (i) { case NONE: return TransactionDefinition.ISOLATION_DEFAULT; case READ_COMMITTED: return TransactionDefinition.ISOLATION_READ_COMMITTED; case READ_UNCOMMITTED: return TransactionDefinition.ISOLATION_READ_UNCOMMITTED; case REPEATABLE_READ: return TransactionDefinition.ISOLATION_REPEATABLE_READ; case SERIALIZABLE: return TransactionDefinition.ISOLATION_SERIALIZABLE; default: break; } return null; }); }
/** * Get the MongoDB {@link TransactionOptions} using current transaction configuration. * @return The transaction options */ protected TransactionOptions getTransactionOptions() { final Optional<MongoTransactionOptions> txOptions = getConfiguration().getTransactionOptions() .filter(o -> o instanceof MongoTransactionOptions).map(o -> (MongoTransactionOptions) o); final TransactionOptions.Builder transactionOptions = TransactionOptions.builder(); txOptions.flatMap(o -> o.getReadConcern()).ifPresent(rc -> transactionOptions.readConcern(rc.getReadConcern())); txOptions.flatMap(o -> o.getWriteConcern()).flatMap(wc -> wc.getWriteConcern()) .ifPresent(wc -> transactionOptions.writeConcern(wc)); txOptions.flatMap(o -> o.getReadPreference()).flatMap(rp -> rp.getReadPreference()) .ifPresent(rp -> transactionOptions.readPreference(rp)); return transactionOptions.build(); }