001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.connector.outbound.connectionmanagerconfig; 019 020 import org.apache.geronimo.connector.outbound.ConnectionInterceptor; 021 import org.apache.geronimo.connector.outbound.MultiPoolConnectionInterceptor; 022 import org.apache.geronimo.connector.outbound.PoolingAttributes; 023 024 /** 025 * @version $Rev: 476049 $ $Date: 2006-11-17 05:35:17 +0100 (Fri, 17 Nov 2006) $ 026 */ 027 public class PartitionedPool implements PoolingSupport { 028 029 private boolean partitionByConnectionRequestInfo; 030 private boolean partitionBySubject; 031 032 private final SinglePool singlePool; 033 034 private transient PoolingAttributes poolingAttributes; 035 036 public PartitionedPool(int maxSize, int minSize, int blockingTimeoutMilliseconds, int idleTimeoutMinutes, boolean matchOne, boolean matchAll, boolean selectOneAssumeMatch, boolean partitionByConnectionRequestInfo, boolean partitionBySubject) { 037 singlePool = new SinglePool(maxSize, minSize, blockingTimeoutMilliseconds, idleTimeoutMinutes, matchOne, matchAll, selectOneAssumeMatch); 038 this.partitionByConnectionRequestInfo = partitionByConnectionRequestInfo; 039 this.partitionBySubject = partitionBySubject; 040 } 041 042 public boolean isPartitionByConnectionRequestInfo() { 043 return partitionByConnectionRequestInfo; 044 } 045 046 public void setPartitionByConnectionRequestInfo(boolean partitionByConnectionRequestInfo) { 047 this.partitionByConnectionRequestInfo = partitionByConnectionRequestInfo; 048 } 049 050 public boolean isPartitionBySubject() { 051 return partitionBySubject; 052 } 053 054 public void setPartitionBySubject(boolean partitionBySubject) { 055 this.partitionBySubject = partitionBySubject; 056 } 057 058 public int getMaxSize() { 059 return singlePool.getMaxSize(); 060 } 061 062 public void setMaxSize(int maxSize) { 063 singlePool.setMaxSize(maxSize); 064 } 065 066 public int getBlockingTimeoutMilliseconds() { 067 return poolingAttributes.getBlockingTimeoutMilliseconds(); 068 } 069 070 public void setBlockingTimeoutMilliseconds(int blockingTimeoutMilliseconds) { 071 poolingAttributes.setBlockingTimeoutMilliseconds(blockingTimeoutMilliseconds); 072 } 073 074 public int getIdleTimeoutMinutes() { 075 return poolingAttributes.getIdleTimeoutMinutes(); 076 } 077 078 public void setIdleTimeoutMinutes(int idleTimeoutMinutes) { 079 poolingAttributes.setIdleTimeoutMinutes(idleTimeoutMinutes); 080 } 081 082 public boolean isMatchOne() { 083 return singlePool.isMatchOne(); 084 } 085 086 public void setMatchOne(boolean matchOne) { 087 singlePool.setMatchOne(matchOne); 088 } 089 090 public boolean isMatchAll() { 091 return singlePool.isMatchAll(); 092 } 093 094 public void setMatchAll(boolean matchAll) { 095 singlePool.setMatchAll(matchAll); 096 } 097 098 public boolean isSelectOneAssumeMatch() { 099 return singlePool.isSelectOneAssumeMatch(); 100 } 101 102 public void setSelectOneAssumeMatch(boolean selectOneAssumeMatch) { 103 singlePool.setSelectOneAssumeMatch(selectOneAssumeMatch); 104 } 105 106 public ConnectionInterceptor addPoolingInterceptors(ConnectionInterceptor tail) { 107 MultiPoolConnectionInterceptor pool = new MultiPoolConnectionInterceptor(tail, 108 singlePool, 109 isPartitionBySubject(), 110 isPartitionByConnectionRequestInfo()); 111 this.poolingAttributes = pool; 112 return pool; 113 } 114 115 public int getPartitionCount() { 116 return poolingAttributes.getPartitionCount(); 117 } 118 119 public int getPartitionMaxSize() { 120 return poolingAttributes.getPartitionMaxSize(); 121 } 122 123 public void setPartitionMaxSize(int maxSize) throws InterruptedException { 124 poolingAttributes.setPartitionMaxSize(maxSize); 125 } 126 127 public int getPartitionMinSize() { 128 return poolingAttributes.getPartitionMinSize(); 129 } 130 131 public void setPartitionMinSize(int minSize) { 132 poolingAttributes.setPartitionMinSize(minSize); 133 } 134 135 public int getIdleConnectionCount() { 136 return poolingAttributes.getIdleConnectionCount(); 137 } 138 139 public int getConnectionCount() { 140 return poolingAttributes.getConnectionCount(); 141 } 142 }