in service/src/main/java/org/apache/fineract/cn/portfolio/service/internal/util/AccountingAdapter.java [233:269]
public String createLedger(
final String customerIdentifier,
final String groupName,
final String parentLedger) throws InterruptedException {
final Ledger ledger = ledgerManager.findLedger(parentLedger);
final List<Ledger> subLedgers = ledger.getSubLedgers() == null ? Collections.emptyList() : ledger.getSubLedgers();
final Ledger generatedLedger = new Ledger();
generatedLedger.setShowAccountsInChart(true);
generatedLedger.setParentLedgerIdentifier(parentLedger);
generatedLedger.setType(ledger.getType());
final IdentiferWithIndex ledgerIdentifer = createLedgerIdentifier(customerIdentifier, groupName, subLedgers);
generatedLedger.setIdentifier(ledgerIdentifer.getIdentifier());
generatedLedger.setDescription("Individual loan case specific ledger");
generatedLedger.setName(ledgerIdentifer.getIdentifier());
final EventExpectation expectation = accountingListener.expectLedgerCreation(generatedLedger.getIdentifier());
boolean created = false;
while (!created) {
try {
logger.info("Attempting to create ledger with identifier '{}'", ledgerIdentifer.getIdentifier());
ledgerManager.addSubLedger(parentLedger, generatedLedger);
created = true;
} catch (final LedgerAlreadyExistsException e) {
ledgerIdentifer.incrementIndex();
generatedLedger.setIdentifier(ledgerIdentifer.getIdentifier());
generatedLedger.setName(ledgerIdentifer.getIdentifier());
}
}
final boolean ledgerCreationDetected = expectation.waitForOccurrence(10, TimeUnit.SECONDS);
if (!ledgerCreationDetected)
logger.warn("Waited 5 seconds for creation of ledger '{}', but it was not detected. This could cause subsequent " +
"account creations to fail. Is there something wrong with the accounting service? Is ActiveMQ setup properly?",
generatedLedger.getIdentifier());
return ledgerIdentifer.getIdentifier();
}