1 /*
2 * JBoss, Home of Professional Open Source.
3 * Copyright 2014 Red Hat, Inc., and individual contributors
4 * as indicated by the @author tags.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package io.undertow.util;
20
21 import java.util.function.Consumer;
22 import java.util.function.Supplier;
23
24 import io.undertow.UndertowMessages;
25
26 /**
27 * @author ckozak
28 * @author Stuart Douglas
29 */
30 public class NewInstanceObjectPool<T> implements ObjectPool {
31
32 private final Supplier<T> supplier;
33 private final Consumer<T> consumer;
34
35 public NewInstanceObjectPool(Supplier<T> supplier, Consumer<T> consumer) {
36 this.supplier = supplier;
37 this.consumer = consumer;
38 }
39
40
41 @Override
42 public PooledObject allocate() {
43 final T obj = supplier.get();
44 return new PooledObject() {
45
46 private volatile boolean closed = false;
47
48 @Override
49 public T getObject() {
50 if(closed) {
51 throw UndertowMessages.MESSAGES.objectIsClosed();
52 }
53 return obj;
54 }
55
56 @Override
57 public void close() {
58 closed = true;
59 consumer.accept(obj);
60 }
61 };
62 }
63 }
64