gpt4 book ai didi

java-8 - @Lock(LockType.READ) Java 8 中的单例 Ejb

转载 作者:行者123 更新时间:2023-12-05 06:42:07 26 4
gpt4 key购买 nike

将 Java 7 与 Jboss7 结合使用,以下代码可以正常工作。

@Singleton
public class OperacaoServiceImpl implements OperacaoService {

private Operacao operacaoEmAndamento;

@Override
@Lock(LockType.READ)
public Operacao getOperacaoEmAndamento() {
return operacaoEmAndamento;
}

@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void geraEIniciaOperacao() throws CoreException {
geraOperacao();
iniciaOperacao();

}
}

现在我已经迁移到 Java 8,Wildfly 停止工作了。如果 geraEIniciaOperacao 仍在运行,我将无法访问 getOperacaoEmAndamento。

" javax.ejb.ConcurrentAccessTimeoutException: WFLYEJB0241: EJB 3.1 PFD2 4.8.5.5.1 concurrent access timeout on OperacaoServiceImpl - could not obtain lock within 5000MILLISECONDS at org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(ContainerManagedConcurrencyInterceptor.java:106) ..."

最佳答案

我不明白为什么像这样的东西曾经奏效。但我发现的是:对于容器管理的并发,语义是“只要没有进行写入,就允许并发读取”。我需要的是“允许并发读取,也允许写入,但一次只有一个线程写入”。为此,我将类(class)更改为

@Lock(LockType.READ)

@Singleton

public class OperacaoServiceImpl implements OperacaoService {

和方法

public void geraEIniciaOperacao() throws CoreException {

syncronized public void geraEIniciaOperacao() throws CoreException {

引用:EJB 3.1 container managed concurrency vs. synchronized

关于java-8 - @Lock(LockType.READ) Java 8 中的单例 Ejb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38507216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com