1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 package org.spf4j.recyclable.impl;
33
34 import org.spf4j.recyclable.RecyclingSupplier;
35 import java.io.IOException;
36 import java.nio.channels.ClosedChannelException;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39
40
41
42
43 public final class ExpensiveTestObjectFactory implements RecyclingSupplier.Factory<ExpensiveTestObject> {
44
45 private static final Logger LOG = LoggerFactory.getLogger(ExpensiveTestObjectFactory.class);
46
47 private final long maxIdleMillis;
48 private final int nrUsesToFailAfter;
49 private final long minOperationMillis;
50 private final long maxOperationMillis;
51
52 public ExpensiveTestObjectFactory(final long maxIdleMillis, final int nrUsesToFailAfter,
53 final long minOperationMillis, final long maxOperationMillis) {
54 this.maxIdleMillis = maxIdleMillis;
55 this.nrUsesToFailAfter = nrUsesToFailAfter;
56 this.minOperationMillis = minOperationMillis;
57 this.maxOperationMillis = maxOperationMillis;
58 }
59
60 public ExpensiveTestObjectFactory() {
61 this(100, 10, 1, 20);
62 }
63
64
65
66 @Override
67 public ExpensiveTestObject create() {
68 return new ExpensiveTestObject(maxIdleMillis, nrUsesToFailAfter, minOperationMillis, maxOperationMillis);
69 }
70
71 @Override
72 public void dispose(final ExpensiveTestObject object) {
73 try {
74 object.close();
75 } catch (ClosedChannelException ex) {
76
77 } catch (IOException ex) {
78 LOG.warn("Cannot dispose object {}", this, ex);
79 }
80 }
81
82 @Override
83 public boolean validate(final ExpensiveTestObject object, final Exception e) throws IOException {
84 if (e instanceof IOException) {
85 return false;
86 } else {
87 object.testObject();
88 return true;
89 }
90 }
91
92 @Override
93 public String toString() {
94 return "ExpensiveTestObjectFactory{" + "maxIdleMillis=" + maxIdleMillis
95 + ", nrUsesToFailAfter=" + nrUsesToFailAfter + ", minOperationMillis="
96 + minOperationMillis + ", maxOperationMillis=" + maxOperationMillis + '}';
97 }
98
99
100
101 }