1 /*
2 * Copyright 2012 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package org.jboss.netty.channel.socket.nio;
17
18 import org.jboss.netty.channel.socket.Worker;
19 import org.jboss.netty.util.ExternalResourceReleasable;
20
21 /**
22 * This implementation of a {@link WorkerPool} should be used if you plan to share a
23 * {@link WorkerPool} between different Factories. You will need to call {@link #destroy()} by your
24 * own once you want to release any resources of it.
25 *
26 *
27 */
28 public final class ShareableWorkerPool<E extends Worker> implements WorkerPool<E> {
29
30 private final WorkerPool<E> wrapped;
31
32 public ShareableWorkerPool(WorkerPool<E> wrapped) {
33 this.wrapped = wrapped;
34 }
35
36 public E nextWorker() {
37 return wrapped.nextWorker();
38 }
39
40 public void rebuildSelectors() {
41 wrapped.rebuildSelectors();
42 }
43
44 /**
45 * Destroy the {@link ShareableWorkerPool} and release all resources. After this is called its not usable anymore
46 */
47 public void destroy() {
48 wrapped.shutdown();
49 if (wrapped instanceof ExternalResourceReleasable) {
50 ((ExternalResourceReleasable) wrapped).releaseExternalResources();
51 }
52 }
53
54 public void shutdown() {
55 // do nothing
56 }
57 }