【发布时间】:2018-05-07 00:34:22
【问题描述】:
我在下面的代码中收到“更改此条件,使其不会总是评估为假”的声纳问题
UserTransaction tx = null;
try {
tx = (UserTransaction) new InitialContext()
.lookup("java:comp/UserTransaction");
tx.begin();
// ...
} catch (NamingException | NotSupportedException | SystemException | CommandException e) {
Logger.logError(getClass(), e);
try {
if(null != tx) {
tx.rollback(); // gives Change this condition so that it does not always evaluate to "false"
}
} catch (NullPointerException | IllegalStateException | SecurityException | SystemException rollbackt) {
logError("Rollback exception", rollbackt);
}
throw new UserDefinedException("failed save incomplete order due to a command exception", e);
}
有什么好主意我们可以处理吗?
【问题讨论】:
-
所以你每次都回滚这个事务,是吗?
-
该代码不会编译,因为
tx是在try块内声明的,并且不在catch块内的范围内。如果代码确实编译,它实际上可能会解释消息,因为这意味着您有一个名为tx的 另一个 变量,您已将其初始化为null,并且永远不会分配 那个 变量另一个值,所以它总是null,而if语句总是false。 -
嗨 Andreas,实际上你是对的,tx 没有在 try 块下定义。它是在 try 块之外定义的。
-
然后编辑问题并显示实际代码。
-
您使用什么版本的 SonarQube 和 SonarJava 插件?您能否尝试更新到最新版本并验证问题是否仍然存在?