1
18
19 package io.undertow.servlet.core;
20
21 import java.util.EventListener;
22
23 import javax.servlet.ServletException;
24
25 import io.undertow.servlet.UndertowServletMessages;
26 import io.undertow.servlet.api.InstanceHandle;
27 import io.undertow.servlet.api.ListenerInfo;
28
29
32 public class ManagedListener implements Lifecycle {
33
34 private final ListenerInfo listenerInfo;
35 private final boolean programatic;
36
37 private volatile boolean started = false;
38 private volatile InstanceHandle<? extends EventListener> handle;
39
40 public ManagedListener(final ListenerInfo listenerInfo, final boolean programatic) {
41 this.listenerInfo = listenerInfo;
42 this.programatic = programatic;
43 }
44
45 public synchronized void start() throws ServletException {
46 if (!started) {
47 try {
48 handle = listenerInfo.getInstanceFactory().createInstance();
49 } catch (Exception e) {
50 throw UndertowServletMessages.MESSAGES.couldNotInstantiateComponent(listenerInfo.getListenerClass().getName(), e);
51 }
52 started = true;
53 }
54 }
55
56 public synchronized void stop() {
57 started = false;
58 if (handle != null) {
59 handle.release();
60 }
61 }
62
63 public ListenerInfo getListenerInfo() {
64 return listenerInfo;
65 }
66
67 @Override
68 public boolean isStarted() {
69 return started;
70 }
71
72 public EventListener instance() {
73 if (!started) {
74 throw UndertowServletMessages.MESSAGES.listenerIsNotStarted();
75 }
76 return handle.getInstance();
77 }
78
79 public boolean isProgramatic() {
80 return programatic;
81 }
82
83 @Override
84 public String toString() {
85 return "ManagedListener{" +
86 "listenerInfo=" + listenerInfo +
87 '}';
88 }
89 }
90