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    }