Как запустить определенную команду с помощью Jongo?

#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 спасибо за вашу помощь.