1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.async;
18
19 import java.util.concurrent.BlockingQueue;
20
21 import com.conversantmedia.util.concurrent.DisruptorBlockingQueue;
22 import com.conversantmedia.util.concurrent.SpinPolicy;
23 import org.apache.logging.log4j.core.config.Node;
24 import org.apache.logging.log4j.core.config.plugins.Plugin;
25 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
26 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
27
28
29
30
31
32
33 @Plugin(name = "DisruptorBlockingQueue", category = Node.CATEGORY, elementType = BlockingQueueFactory.ELEMENT_TYPE)
34 public class DisruptorBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
35
36 private final SpinPolicy spinPolicy;
37
38 private DisruptorBlockingQueueFactory(final SpinPolicy spinPolicy) {
39 this.spinPolicy = spinPolicy;
40 }
41
42 @Override
43 public BlockingQueue<E> create(final int capacity) {
44 return new DisruptorBlockingQueue<>(capacity, spinPolicy);
45 }
46
47 @PluginFactory
48 public static <E> DisruptorBlockingQueueFactory<E> createFactory(
49 @PluginAttribute(value = "SpinPolicy", defaultString = "WAITING") final SpinPolicy spinPolicy
50 ) {
51 return new DisruptorBlockingQueueFactory<>(spinPolicy);
52 }
53 }