Я пишу приложение Java EE с использованием JBoss AS 6, и у меня есть ресурс, который требует эксклюзивного доступа (некоторый интерфейс к стороннему программному обеспечению) к методу для данного параметра. В настоящее время я капризничаю (поскольку спецификация запрещает это ) и использую java.util.concurrent.ReentrantLock
для обработки блокировки.
Теперь я объединяю несколько серверов приложений JBoss вместе, поэтому мне нужно решение, которое работает на разных узлах кластера. Я думаю, что у меня есть по крайней мере следующие варианты.
- Общий кэш (Infinispan)
- JGroups
- Блокировка на основе файловой системы (вероятно, плохая, но мы все равно полагаемся на общую файловую систему)
- База данных
- Синглтон EJB ?
В идеале, я ищу API высокого уровня, чтобы я мог писать EJB-методы, подобные этому
public class MyEJBBean {
private SharedLock lock;
public void doSomethingWithSharedResource(String s) {
lock.lock(); // blocks until shared resource is not used by anyone else
try {
// Use shared resource
}
finally {
lock.unlock();
}
}
Я что-то пропустил? У кого-нибудь есть опыт работы с этим механизмом блокировки, которым они могут поделиться?