#jongo #tokumx
#jongo #tokumx
Вопрос:
Я использую TokuMx
для организации транзакции. Для этого есть специальные команды.
Я попытался запустить db.runCommand("beginTransaction")
Mongo shell
. Это сработало хорошо.
Однако, когда я сделал то же самое в Jongo
:
PlayJongo.jongo().runCommand("beginTransaction");
Это дало мне [error] play - Cannot invoke the action, eventually got an error: java.lang.IllegalArgumentException: Cannot parse query: beginTransaction
Что я сделал не так?
Редактировать
public static boolean buyProduct(User buyer, User seller, int accountIndex, float productPrice){
boolean isSuccess = false;
PlayJongo.jongo().runCommand("{beginTransaction : 1}");
try{
// Deposit money to seller
seller.getAccounts().get(0).deposit(productPrice);
UserRepository.update(seller);
// Withdraw money from buyer
buyer.getAccounts().get(accountIndex).withdraw(productPrice);
UserRepository.update(buyer);
throw new Exception();
//isSuccess = true;
}
catch (Exception e){
PlayJongo.jongo().runCommand("{rollbackTransaction : 1 }");
isSuccess = false;
}
return isSuccess;
}
Ответ №1:
Я не эксперт в jongo, но я работаю над tokumx, и я только что проверил документы jongo. Я думаю, вы хотите
PlayJongo.jongo().runCommand("{beginTransaction:1}");
Комментарии:
1. Ошибки нет. Но ACID вообще не работает. Пожалуйста, ознакомьтесь с моим обновленным вопросом.
2. Можете ли вы описать, в чем проблема сейчас? На данный момент я вижу только код, а не описание проблемы. Возможно, это было бы лучше как новый вопрос. Одна вещь, которую я вижу, это то, что вы никогда не совершаете транзакцию. Вероятно, вы должны сделать это до окончания блока try. Вы также безоговорочно выдаете исключение, поэтому я действительно не знаю, что это должно делать. В зависимости от того, что вы делаете, вам также может потребоваться сериализуемая транзакция, чтобы блокировать чтение (позволяет избежать потери обновлений, которые вы можете получить с помощью repeatable read, который используется по умолчанию). HTH
3. Спасибо за ваш ответ. Код в моем вопросе — это просто симуляция транзакции, в процессе обновления которой происходят некоторые ошибки
throw new Exception()
. Однако это не дало мне каких-либо ошибок, поэтому очень сложно определить, что было не так: (Все, что я мог отслеживать, это то, что документ в моей базе данных был обновлен и никогда не откатывался.4. Пожалуйста, выделите это в отдельный вопрос или отправьте сообщение в группу Google для пользователей tokumx. Убедитесь, что вы разместили код, то, что вы ожидаете от него, а также все журналы сервера и результаты на стороне клиента каждой команды. Однако я предполагаю, что ваш драйвер делает что-то странное с пулами соединений. Смотрите docs.tokutek.com/tokumx /… для получения подробной информации о пуле подключений.
5. Я так думаю. Проблема, возможно, в моем драйвере Java. Кстати, 1 спасибо за вашу помощь.