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