【发布时间】:2016-12-08 10:29:57
【问题描述】:
我找到了几个资源来帮助我解决这个问题,但我似乎无法混合所有成分以满足我的需求。
我想“锁定”一个Cat(或什至几个)不被其他用户抚摸,如果它(或他们)的抚摸已经在进行中。我还想向调用者提供反馈,告诉他是谁在他之前调用了 API。
@Local
@Singleton // or @Stateful?
public class CatPetterBean_Local implements CatBean_Facade
{
/**
* Key - The ID of the Cat
*/
final private ConcurrentHashMap<Integer, User> pettingState = new ConcurrentHashMap<>();
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Override
public GzipROWithMsg<Object> pet(final ImmutableSet<Integer> catIds)
{
checkIfTheyAreBeingPetted_AndThrowRuntimeExec(catIds);
<...>
// After petting, they will be saved by the caller bean (e.g. CatPetterBeanImpl)
}
<...>
}
- 抚摸需要一段时间
-
Cats 在 DB 中保留一个状态:ALREADY_PETTED和NOT_PETTED。一旦它被拍过,它就不能再被抚摸了。我什至想过从数据库中加载Cat并即时检查其状态,但我认为这样会增加网络流量。 - 如何利用
synchronized关键字、@Lock注释等概念 - 不,我没有使用 Spring
- 不,这不是网络应用
- 是的,我确实缺乏 EE 知识。我在快速学习的过程中提出这个问题。
【问题讨论】:
标签: java jakarta-ee ejb ejb-3.1 java-ee-7