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-16 23:35:17 -0500 (Thu, 16 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 }