Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MultiLevelLock2 |
|
| 1.0;1 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one or more | |
3 | * contributor license agreements. See the NOTICE file distributed with | |
4 | * this work for additional information regarding copyright ownership. | |
5 | * The ASF licenses this file to You under the Apache License, Version 2.0 | |
6 | * (the "License"); you may not use this file except in compliance with | |
7 | * the License. You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | package org.apache.commons.transaction.locking; | |
18 | ||
19 | /** | |
20 | * | |
21 | * Extended multi level lock. Compared to basic {@link MultiLevelLock} allows for more flexible | |
22 | * locking including preference and more compatibility modes. | |
23 | * | |
24 | * @version $Id: MultiLevelLock2.java 493628 2007-01-07 01:42:48Z joerg $ | |
25 | * @see LockManager2 | |
26 | * @see MultiLevelLock | |
27 | * @see GenericLock | |
28 | * @since 1.1 | |
29 | */ | |
30 | public interface MultiLevelLock2 extends MultiLevelLock { | |
31 | ||
32 | /** | |
33 | * Compatibility mode: none reentrant. Lock level by the same owner <em>shall</em> | |
34 | * affect compatibility. | |
35 | */ | |
36 | public static final int COMPATIBILITY_NONE = 0; | |
37 | ||
38 | /** | |
39 | * Compatibility mode: reentrant. Lock level by the same owner <em>shall not</em> | |
40 | * affect compatibility. | |
41 | */ | |
42 | public static final int COMPATIBILITY_REENTRANT = 1; | |
43 | ||
44 | /** | |
45 | * Compatibility mode: supporting. Lock levels that are the same as the | |
46 | * desired <em>shall not</em> affect compatibility, but lock level held by the same | |
47 | * owner <em>shall</em>. | |
48 | */ | |
49 | public static final int COMPATIBILITY_SUPPORT = 2; | |
50 | ||
51 | /** | |
52 | * Compatibility mode: reentrant and supporting. Lock levels that are the same as the | |
53 | * desired and lock levels held by the same | |
54 | * owner <em>shall not</em> affect compatibility. | |
55 | */ | |
56 | public static final int COMPATIBILITY_REENTRANT_AND_SUPPORT = 3; | |
57 | ||
58 | /** | |
59 | * Tests if a certain lock level is owned by an owner. | |
60 | * | |
61 | * @param ownerId | |
62 | * a unique id identifying the entity that wants to check a | |
63 | * certain lock level on this lock | |
64 | * @param lockLevel | |
65 | * the lock level to test | |
66 | * @return <code>true</code> if the lock could be acquired at the time | |
67 | * this method was called | |
68 | */ | |
69 | public boolean has(Object ownerId, int lockLevel); | |
70 | ||
71 | /** | |
72 | * Tests if a certain lock level <em>could</em> be acquired. This method | |
73 | * tests only and does <em>not actually acquire</em> the lock. | |
74 | * | |
75 | * @param ownerId | |
76 | * a unique id identifying the entity that wants to test a | |
77 | * certain lock level on this lock | |
78 | * @param targetLockLevel | |
79 | * the lock level to acquire | |
80 | * @param compatibility | |
81 | * {@link #COMPATIBILITY_NONE}if no additional compatibility is | |
82 | * desired (same as reentrant set to false) , | |
83 | * {@link #COMPATIBILITY_REENTRANT}if lock level by the same | |
84 | * owner shall not affect compatibility (same as reentrant set to | |
85 | * true), or {@link #COMPATIBILITY_SUPPORT}if lock levels that | |
86 | * are the same as the desired shall not affect compatibility, or | |
87 | * finally {@link #COMPATIBILITY_REENTRANT_AND_SUPPORT}which is | |
88 | * a combination of reentrant and support | |
89 | * @return <code>true</code> if the lock could be acquired at the time | |
90 | * this method was called | |
91 | */ | |
92 | public boolean test(Object ownerId, int targetLockLevel, int compatibility); | |
93 | ||
94 | /** | |
95 | * Tries to acquire a certain lock level on this lock. Does the same as | |
96 | * {@link org.apache.commons.transaction.locking.MultiLevelLock#acquire(java.lang.Object, int, boolean, boolean, long)} | |
97 | * except that it allows for different compatibility settings. There is an | |
98 | * additional compatibility mode {@link #COMPATIBILITY_SUPPORT}that allows | |
99 | * equal lock levels not to interfere with each other. This is like an | |
100 | * additional shared compatibility and useful when you only want to make | |
101 | * sure not to interfer with lowe levels, but are fine with the same. | |
102 | * | |
103 | * @param ownerId a unique id identifying the entity that wants to acquire a certain lock level on this lock | |
104 | * @param targetLockLevel the lock level to acquire | |
105 | * @param wait <code>true</code> if this method shall block when the desired lock level can not be acquired | |
106 | * @param compatibility | |
107 | * {@link #COMPATIBILITY_NONE}if no additional compatibility is | |
108 | * desired (same as reentrant set to false) , | |
109 | * {@link #COMPATIBILITY_REENTRANT}if lock level by the same | |
110 | * owner shall not affect compatibility (same as reentrant set to | |
111 | * true), or {@link #COMPATIBILITY_SUPPORT}if lock levels that | |
112 | * are the same as the desired shall not affect compatibility, or | |
113 | * finally {@link #COMPATIBILITY_REENTRANT_AND_SUPPORT}which is | |
114 | * a combination of reentrant and support | |
115 | * | |
116 | * @param preferred | |
117 | * in case this lock request is incompatible with existing ones | |
118 | * and we wait, it shall be granted before other waiting requests | |
119 | * that are not preferred | |
120 | * @param timeoutMSecs if blocking is enabled by the <code>wait</code> parameter this specifies the maximum wait time in milliseconds | |
121 | * @return <code>true</code> if the lock actually was acquired | |
122 | * @throws InterruptedException when the thread waiting on this method is interrupted | |
123 | * | |
124 | */ | |
125 | public boolean acquire(Object ownerId, int targetLockLevel, boolean wait, int compatibility, | |
126 | boolean preferred, long timeoutMSecs) throws InterruptedException; | |
127 | ||
128 | } |