package org.ovirt.engine.core.utils.lock; import java.util.Map; import javax.naming.InitialContext; import javax.naming.NamingException; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.utils.ToStringBuilder; /** *The following class is represent a lock which is used in the system */ public class EngineLock implements AutoCloseable { private Map<String, Pair<String, String>> exclusiveLocks; private Map<String, Pair<String, String>> sharedLocks; public EngineLock() { } public EngineLock(Map<String, Pair<String, String>> exclusiveLocks) { this.exclusiveLocks = exclusiveLocks; } public EngineLock(Map<String, Pair<String, String>> exclusiveLocks, Map<String, Pair<String, String>> sharedLocks) { this(exclusiveLocks); this.sharedLocks = sharedLocks; } public Map<String, Pair<String, String>> getExclusiveLocks() { return exclusiveLocks; } public void setExclusiveLocks(Map<String, Pair<String, String>> exclusiveLocks) { this.exclusiveLocks = exclusiveLocks; } public Map<String, Pair<String, String>> getSharedLocks() { return sharedLocks; } public void setSharedLocks(Map<String, Pair<String, String>> sharedLocks) { this.sharedLocks = sharedLocks; } @Override public String toString() { return ToStringBuilder.forInstance(this) .append("exclusiveLocks", exclusiveLocks) .append("sharedLocks", sharedLocks) .build(); } @Override public void close() { getLockManager().releaseLock(this); } // FIXME: use CDI for LockManager resolution private LockManager getLockManager() { try { return (LockManager) new InitialContext().lookup("java:global/engine/bll/LockManager"); } catch (NamingException e) { throw new RuntimeException("Could not find LockManager via JNDI lookup", e); } } }