我有简单的应用程序,模拟从一个帐户到另一个帐户的汇款.我想写一个测试,表明它不是线程安全的.
线程有可能以这样的方式进行,即传输将进行两次.两个线程场景:
转600美元
目前我的应用程序不支持多线程,它应该失败,现在对我来说没问题.我能够使用调试器模拟错误.但是,当我进行线程测试时,它总是成功的.我试过不同数量的线程,睡眠,callabletasks
@Test
public void testTransfer() throws AccountNotFoundException, NotEnoughMoneyException, InterruptedException {
Callable<Boolean> callableTask = () -> {
try {
moneyTransferService.transferMoney(ACCOUNT_NO_1, ACCOUNT_NO_2, TRANSFER_AMOUNT);
return true;
} catch (AccountNotFoundException | NotEnoughMoneyException e) {
e.printStackTrace();
return false;
}
};
List<Callable<Boolean>> callableTasks = new ArrayList<>();
int transferTries = 2;
for(int i = 0; i <= transferTries; i++) {
callableTasks.add(callableTask);
}
ExecutorService executorService = Executors.newFixedThreadPool(2); …Run Code Online (Sandbox Code Playgroud) 我得到了奇怪的错误,不知道为什么.
Type names passed to Assembly.GetType() must not specify an assembly.
Run Code Online (Sandbox Code Playgroud)
奇怪的是我自己不使用方法GetType().它是由以下行引起的:
var domainCommunicator = (DomainCommunicator)dmn.CreateInstanceAndUnwrap(typeof(DomainCommunicator).FullName, "DomainCommunicator");
Run Code Online (Sandbox Code Playgroud)
domainCommunicator继承自MarshalByRefObject.它是公开的,但是当我将其更改为私有时,我得到了无法加载程序集的例外情况.当我在我的解决方案中创建其他项目并完全外部.dll没有任何变化.可能是因为我必须在我的新AppDomain中引用主项目.
对我来说最好的事情是在反射中跳过DomainCommunicator类.它应该是私人的,就是这样.究竟是什么导致了例外?
如何在 JSF 中调用带有可变参数的方法?
我尝试过这样的事情:
<h:commandButton value="Send" action="#{myBean.checkPIN(someOtherBean.PIN)}" />
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。
我在我的 tableView 中实现了布尔表示作为复选框。它通常工作正常,但非常令人恼火的事实是它需要关注行(编辑)以应用复选框值的更改。这意味着我首先必须双击该字段,然后单击复选框。
如何使复选框更改立即执行 onEditCommit?
public class BooleanCell<T> extends TableCell<T, Boolean> {
private CheckBox checkBox;
public BooleanCell() {
checkBox = new CheckBox();
checkBox.selectedProperty().addListener(new ChangeListener<Boolean>() {
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (isEditing())
commitEdit(newValue == null ? false : newValue);
}
});
setAlignment(Pos.CENTER);
this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
this.setEditable(true);
}
@Override
public void updateItem(Boolean item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
checkBox.setSelected(item);
setGraphic(checkBox);
}
}
Run Code Online (Sandbox Code Playgroud)
}