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.deploy.App;
22 import org.eclipse.jetty.deploy.bindings.StandardDeployer;
23 import org.eclipse.jetty.deploy.graph.Node;
24 import org.eclipse.jetty.osgi.boot.internal.serverfactory.ServerInstanceWrapper;
25 import org.eclipse.jetty.osgi.boot.utils.EventSender;
26
27
28
29
30
31
32
33
34
35 public class OSGiDeployer extends StandardDeployer
36 {
37
38 private ServerInstanceWrapper _server;
39
40
41 public OSGiDeployer (ServerInstanceWrapper server)
42 {
43 _server = server;
44 }
45
46
47
48 public void processBinding(Node node, App app) throws Exception
49 {
50
51
52 if (!(app instanceof AbstractOSGiApp))
53 {
54 doProcessBinding(node,app);
55 }
56 else
57 {
58 EventSender.getInstance().send(EventSender.DEPLOYING_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
59 try
60 {
61 doProcessBinding(node,app);
62 ((AbstractOSGiApp)app).registerAsOSGiService();
63 EventSender.getInstance().send(EventSender.DEPLOYED_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
64 }
65 catch (Exception e)
66 {
67 EventSender.getInstance().send(EventSender.FAILED_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
68 throw e;
69 }
70 }
71 }
72
73
74
75 protected void doProcessBinding (Node node, App app) throws Exception
76 {
77 ClassLoader old = Thread.currentThread().getContextClassLoader();
78 Thread.currentThread().setContextClassLoader(_server.getParentClassLoaderForWebapps());
79 try
80 {
81 super.processBinding(node,app);
82 }
83 finally
84 {
85 Thread.currentThread().setContextClassLoader(old);
86 }
87 }
88 }