You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2004/04/22 19:02:16 UTC
cvs commit: incubator-geronimo/modules/connector/src/java/org/apache/geronimo/connector/outbound ThreadLocalCachingConnectionInterceptor.java
djencks 2004/04/22 10:02:16
Added: modules/connector/src/java/org/apache/geronimo/connector/outbound
ThreadLocalCachingConnectionInterceptor.java
Log:
an experiment to see how slow the pool is
Revision Changes Path
1.1 incubator-geronimo/modules/connector/src/java/org/apache/geronimo/connector/outbound/ThreadLocalCachingConnectionInterceptor.java
Index: ThreadLocalCachingConnectionInterceptor.java
===================================================================
/**
*
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.geronimo.connector.outbound;
import java.util.Collections;
import javax.resource.ResourceException;
/**
*
*
* @version $Revision: 1.1 $ $Date: 2004/04/22 17:02:16 $
*
* */
public class ThreadLocalCachingConnectionInterceptor implements ConnectionInterceptor {
private final ConnectionInterceptor next;
private final ThreadLocal connections = new ThreadLocal();
private final boolean matchConnections;
public ThreadLocalCachingConnectionInterceptor(final ConnectionInterceptor next, final boolean matchConnections) {
this.next = next;
this.matchConnections = matchConnections;
}
public void getConnection(ConnectionInfo connectionInfo) throws ResourceException {
ManagedConnectionInfo managedConnectionInfo = (ManagedConnectionInfo) connections.get();
if (managedConnectionInfo != null) {
if (matchConnections) {
ManagedConnectionInfo mciRequest = connectionInfo.getManagedConnectionInfo();
if (null != managedConnectionInfo.getManagedConnectionFactory().matchManagedConnections(
Collections.singleton(managedConnectionInfo.getManagedConnection()),
mciRequest.getSubject(),
mciRequest.getConnectionRequestInfo()
)) {
connectionInfo.setManagedConnectionInfo(managedConnectionInfo);
return;
} else {
//match failed, get a new cx after returning this one
connections.set(null);
next.returnConnection(connectionInfo, ConnectionReturnAction.RETURN_HANDLE);
}
} else {
connectionInfo.setManagedConnectionInfo(managedConnectionInfo);
return;
}
}
//nothing for this thread or match failed
next.getConnection(connectionInfo);
connections.set(connectionInfo.getManagedConnectionInfo());
}
public void returnConnection(ConnectionInfo connectionInfo, ConnectionReturnAction connectionReturnAction) {
if (connectionReturnAction == ConnectionReturnAction.DESTROY) {
next.returnConnection(connectionInfo, connectionReturnAction);
}
}
}