/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* A session object. Sessions are obtained via the SessionManager,
* see there for details. Most code will only ever need one method in
* this class, the id() method to obtain the session id.
*
* @author Andreas Sterbenz
* @since 1.5
*/
// time after which to close idle sessions, in milliseconds (3 minutes)
// token instance
// session id
private final long id;
// number of objects created within this session
// time this session was last used
// not synchronized/volatile for performance, so may be unreliable
// this could lead to idle sessions being closed early, but that is harmless
private long lastAccess;
createdObjects = new AtomicInteger();
id();
}
return 0;
} else {
}
}
}
long idInternal() {
return id;
}
long id() {
throw new ProviderException("Token has been removed");
}
return id;
}
void addObject() {
int n = createdObjects.incrementAndGet();
// XXX update statistics in session manager if n == 1
}
void removeObject() {
int n = createdObjects.decrementAndGet();
if (n == 0) {
} else if (n < 0) {
throw new ProviderException("Internal error: objects created " + n);
}
}
boolean hasObjects() {
}
void close() {
if (hasObjects()) {
throw new ProviderException(
"Internal error: close session with active objects");
}
}
}
/*
* NOTE: Use PhantomReference here and not WeakReference
* otherwise the sessions maybe closed before other objects
* which are still being finalized.
*/
implements Comparable<SessionRef> {
new ReferenceQueue<Session>();
return refQueue;
}
static int totalCount() {
}
private static void drainRefQueueBounded() {
while (true) {
}
}
// handle to the native session
private long id;
// TBD: run at some interval and not every time?
}
void dispose() {
try {
}
} catch (PKCS11Exception e1) {
// ignore
} catch (ProviderException e2) {
// ignore
} finally {
this.clear();
}
}
return 0;
} else {
}
}
}