/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/ package org.apache.tomcat.dbcp.dbcp2;
/** A list of objects created by children of this object. */ privatefinal List<WeakReference<AbandonedTrace>> traceList = new ArrayList<>();
/** Last time this connection was used. */ privatevolatile Instant lastUsedInstant = Instant.EPOCH;
/** * Creates a new AbandonedTrace without config and without doing abandoned tracing.
*/ public AbandonedTrace() {
init(null);
}
/** * Constructs a new AbandonedTrace with a parent object. * * @param parent * AbandonedTrace parent object.
*/ public AbandonedTrace(final AbandonedTrace parent) {
init(parent);
}
/** * Adds an object to the list of objects being traced. * * @param trace * AbandonedTrace object to add.
*/ protectedvoid addTrace(final AbandonedTrace trace) { synchronized (this.traceList) { this.traceList.add(new WeakReference<>(trace));
}
setLastUsed();
}
/** * Clears the list of objects being traced by this object.
*/ protectedvoid clearTrace() { synchronized (this.traceList) { this.traceList.clear();
}
}
/** * Subclasses can implement this nop. * * @throws SQLException Ignored here, for subclasses. * @since 2.10.0
*/
@Override publicvoid close() throws SQLException { // nop
}
/** * Closes this resource and if an exception is caught, then calls {@code exceptionHandler}. * * @param exceptionHandler Consumes exception thrown closing this resource. * @since 2.10.0
*/ protectedvoid close(final Consumer<Exception> exceptionHandler) {
Utils.close(this, exceptionHandler);
}
/** * Gets the last time this object was used in milliseconds. * * @return long time in milliseconds.
*/
@Override
@Deprecated publiclong getLastUsed() { return lastUsedInstant.toEpochMilli();
}
@Override public Instant getLastUsedInstant() { return lastUsedInstant;
}
/** * Gets a list of objects being traced by this object. * * @return List of objects.
*/ protected List<AbandonedTrace> getTrace() { finalint size = traceList.size(); if (size == 0) { return Collections.emptyList();
} final ArrayList<AbandonedTrace> result = new ArrayList<>(size); synchronized (this.traceList) { final Iterator<WeakReference<AbandonedTrace>> iter = traceList.iterator(); while (iter.hasNext()) { final AbandonedTrace trace = iter.next().get(); if (trace == null) { // Clean-up since we are here anyway
iter.remove();
} else {
result.add(trace);
}
}
} return result;
}
/** * Removes this object the source object is tracing. * * @param source The object tracing * @since 2.7.0
*/ protectedvoid removeThisTrace(final Object source) { if (source instanceof AbandonedTrace) {
AbandonedTrace.class.cast(source).removeTrace(this);
}
}
/** * Removes a child object this object is tracing. * * @param trace * AbandonedTrace object to remove.
*/ protectedvoid removeTrace(final AbandonedTrace trace) { synchronized (this.traceList) { final Iterator<WeakReference<AbandonedTrace>> iter = traceList.iterator(); while (iter.hasNext()) { final AbandonedTrace traceInList = iter.next().get(); if (trace != null && trace.equals(traceInList)) {
iter.remove(); break;
} if (traceInList == null) { // Clean-up since we are here anyway
iter.remove();
}
}
}
}
/** * Sets the time this object was last used to the current time in milliseconds.
*/ protectedvoid setLastUsed() {
lastUsedInstant = Instant.now();
}
/** * Sets the instant this object was last used. * * @param lastUsedInstant * instant. * @since 2.10.0
*/ protectedvoid setLastUsed(final Instant lastUsedInstant) { this.lastUsedInstant = lastUsedInstant;
}
/** * Sets the time in milliseconds this object was last used. * * @param lastUsedMillis * time in milliseconds. * @deprecated Use {@link #setLastUsed(Instant)}
*/
@Deprecated protectedvoid setLastUsed(finallong lastUsedMillis) { this.lastUsedInstant = Instant.ofEpochMilli(lastUsedMillis);
}
}
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.