私はJavaウォレット生成コードを書きました。私は暗号化ウォレットを生成するためにこのコードを使用します。コードは、私がnullの取得、POST要求はMySQLで維持されましたが、nullを返します
public synchronized WalletInfo generateAddress(GenerateWallet generateWallet) {
final WalletInfo walletInfo = new WalletInfo();
String walletName = generateWallet.getWalletName();
String currencyName = generateWallet.getCurrencyName();
WalletInfo walletInfoDb = iWalletInfoDao.getWalletInfoWithWalletNameAndCurrency(walletName, currencyName);
if (walletInfoDb == null && genWalletMap.get(walletName) == null) {
String currency = currencyName.toUpperCase();
if (currency.equals("BITCOIN")) {
final WalletManager walletManager = WalletManager.setupWallet(walletName);
walletManager.addWalletSetupCompletedListener((wallet) -> {
Address address = wallet.currentReceiveAddress();
WalletInfo newWallet = createWalletInfo(walletName, currencyName, address.toString());
// set the properties of the walletInfo
walletInfo.setId(newWallet.getId());
walletInfo.setName(newWallet.getName());
walletInfo.setAddress(newWallet.getAddress());
walletInfo.setCurrency(newWallet.getCurrency());
walletMangersMap.put(newWallet.getId(), walletManager);
genWalletMap.remove(walletName);
});
genWalletMap.put(walletName, walletManager);
return walletInfo;
} else if (currency.equals("ETHEREUM")) {
return walletInfo;
} else {
return walletInfo;
}
}
return walletInfo;
}
私はカールを使用してPOSTリクエストを行い、
curl -H "Content-Type: application/json" -X POST -d '{"walletName": "Florence8","currencyName":"Bitcoin"}' http://localhost:8080/rest/wallet/generateAddress
を提供している組織がまだ発生している間に、戻り、
{
"id" : null,
"name" : null,
"address" : null,
"currency" : null
}
ですMySQLで永続化されました。私はデバッグを続け、これは有線です。デバッグは、コードの上から下へのシーケンスに従いません。デバッグのシーケンスは同様で、
コードが来る場合、私はしたいと思いポイントですこの行へ walletManager.addWalletSetupCompletedListener((wallet)
の場合、内部で操作を実行する必要があります。
どのような提案データベースに正しく保存された後、エンティティを元に戻すにはどうすればよいですか?その答えで示唆したように
更新
を必要に応じて、私はより多くの情報を提供することができ、私は、CountDownLatch
を使用して、問題
public synchronized WalletInfo generateAddress(GenerateWallet generateWallet) {
CountDownLatch finshedSetup = new CountDownLatch(1);
// some code
}
の端子で出力を解決
私はマルチスレッドの知識が限られています。あなたはそれを解決するために私を助けてくれますか?私は必要なコードの他の部分を提供することができます。 – Arefe
@Artinがカウントダウンラッチの例で更新されました。ラッチの仕組みの詳細は、https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html –
答えとアップデートをありがとう。コード内の 'finishedSetup'メソッドは何ですか?あなたは例を挙げることができますか?私は何が起こっているのかを理解するとすぐにそれを受け入れるでしょう – Arefe