001: /*
002: * Copyright 2003 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package velosurf.sql;
018:
019: import java.sql.SQLException;
020:
021: /** This abstract class represents a pooled object.<p>
022: * It has two booleans : inUse and useOver (understand : usageOver).<p>
023: * The cycle of those two booleans is the following :<p>
024: * states (inUse - useOver) : (false-false) -> (true-false) -> (true-true) -> [delay] (false-false)
025: *
026: * @author <a href=mailto:claude.brisson@gmail.com>Claude Brisson</a>
027: *
028: */
029: public abstract class PooledStatement implements RowHandler {
030:
031: /** build a new pooled object.
032: */
033: public PooledStatement() {
034: tagTime = System.currentTimeMillis();
035: }
036:
037: /** get the time tag of this pooled object.
038: *
039: * @return the time tag
040: */
041: public long getTagTime() {
042: return tagTime;
043: }
044:
045: /** reset the time tag.
046: */
047: public void resetTagTime() {
048: tagTime = System.currentTimeMillis();
049: }
050:
051: /** notify this object that it is in use.
052: */
053: public void notifyInUse() {
054: inUse = true;
055: resetTagTime();
056: }
057:
058: /** notify this object that it is no more in use.
059: */
060: public void notifyOver() {
061: inUse = false;
062: }
063:
064: /** check whether this pooled object is in use.
065: *
066: * @return whether this object is in use
067: */
068: public boolean isInUse() {
069: return inUse;
070: }
071:
072: /** check whether this pooled object is marked as valid or invalid.
073: * (used in the recovery process)
074: *
075: * @return whether this object is in use
076: */
077: public boolean isValid() {
078: return valid;
079: }
080:
081: /** definitely mark this statement as meant to be deleted.
082: */
083: public void setInvalid() {
084: valid = false;
085: }
086:
087: /** get the connection used by this statement.
088: *
089: * @return the connection used by this statement
090: */
091: public abstract ConnectionWrapper getConnection();
092:
093: /** close this pooled object.
094: *
095: * @exception SQLException when thrown by the database engine
096: */
097: public abstract void close() throws SQLException;
098:
099: /** time tag.
100: */
101: private long tagTime = 0;
102: // states (inUse - useOver) : (false-false) -> (true-false) -> (true-true) -> [delay] (false-false)
103:
104: /** valid statement?
105: */
106: private boolean valid = true;
107:
108: /** is this object in use?
109: */
110: private boolean inUse = false;
111: }
|