1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.osgi.boot;
20
21 import org.eclipse.jetty.osgi.boot.internal.serverfactory.DefaultJettyAtJettyHomeHelper;
22 import org.eclipse.jetty.osgi.boot.internal.serverfactory.JettyServerServiceTracker;
23 import org.eclipse.jetty.osgi.boot.internal.webapp.BundleWatcher;
24 import org.eclipse.jetty.osgi.boot.internal.webapp.ServiceWatcher;
25 import org.eclipse.jetty.osgi.boot.utils.internal.PackageAdminServiceTracker;
26 import org.eclipse.jetty.server.Server;
27 import org.eclipse.jetty.server.handler.ContextHandler;
28 import org.eclipse.jetty.util.log.Log;
29 import org.eclipse.jetty.util.log.Logger;
30 import org.osgi.framework.Bundle;
31 import org.osgi.framework.BundleActivator;
32 import org.osgi.framework.BundleContext;
33 import org.osgi.framework.ServiceRegistration;
34 import org.osgi.util.tracker.BundleTracker;
35 import org.osgi.util.tracker.ServiceTracker;
36
37
38
39
40
41
42
43
44
45
46 public class JettyBootstrapActivator implements BundleActivator
47 {
48 private static final Logger LOG = Log.getLogger(JettyBootstrapActivator.class);
49
50 private static JettyBootstrapActivator INSTANCE = null;
51
52 public static JettyBootstrapActivator getInstance()
53 {
54 return INSTANCE;
55 }
56
57 private ServiceRegistration _registeredServer;
58
59 private ServiceTracker _contextHandlerTracker;
60
61 private PackageAdminServiceTracker _packageAdminServiceTracker;
62
63 private BundleTracker _webBundleTracker;
64
65 private JettyServerServiceTracker _jettyServerServiceTracker;
66
67
68
69
70
71
72
73
74
75
76
77
78 public void start(final BundleContext context) throws Exception
79 {
80 try {
81 INSTANCE = this;
82
83
84
85 _packageAdminServiceTracker = new PackageAdminServiceTracker(context);
86
87
88 _jettyServerServiceTracker = new JettyServerServiceTracker();
89 context.addServiceListener(_jettyServerServiceTracker, "(objectclass=" + Server.class.getName() + ")");
90
91
92 Server defaultServer = DefaultJettyAtJettyHomeHelper.startJettyAtJettyHome(context);
93
94
95 _contextHandlerTracker = new ServiceTracker(context, context.createFilter("(objectclass=" + ContextHandler.class.getName() + ")"), new ServiceWatcher());
96 _contextHandlerTracker.open();
97
98
99 BundleWatcher bundleTrackerCustomizer = new BundleWatcher();
100 bundleTrackerCustomizer.setWaitForDefaultServer(defaultServer != null);
101 _webBundleTracker = new BundleTracker(context, Bundle.ACTIVE | Bundle.STOPPING, bundleTrackerCustomizer);
102 bundleTrackerCustomizer.setBundleTracker(_webBundleTracker);
103 bundleTrackerCustomizer.open();
104 } catch (Exception e) { e.printStackTrace();}
105 }
106
107
108
109
110
111
112
113
114
115
116 public void stop(BundleContext context) throws Exception
117 {
118 try
119 {
120 if (_webBundleTracker != null)
121 {
122 _webBundleTracker.close();
123 _webBundleTracker = null;
124 }
125 if (_contextHandlerTracker != null)
126 {
127 _contextHandlerTracker.close();
128 _contextHandlerTracker = null;
129 }
130 if (_jettyServerServiceTracker != null)
131 {
132 _jettyServerServiceTracker.stop();
133 context.removeServiceListener(_jettyServerServiceTracker);
134 _jettyServerServiceTracker = null;
135 }
136 if (_packageAdminServiceTracker != null)
137 {
138 _packageAdminServiceTracker.stop();
139 context.removeServiceListener(_packageAdminServiceTracker);
140 _packageAdminServiceTracker = null;
141 }
142 if (_registeredServer != null)
143 {
144 try
145 {
146 _registeredServer.unregister();
147 }
148 catch (IllegalArgumentException ill)
149 {
150
151 }
152 finally
153 {
154 _registeredServer = null;
155 }
156 }
157 }
158 finally
159 {
160 INSTANCE = null;
161 }
162 }
163 }