基于Maven构建OSGI(三)

注册web应用请参考如下实例程序:

package testweb.internal; 

import javax.servlet.Servlet; 
import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.ServiceEvent; 
import org.osgi.framework.ServiceListener; 
import org.osgi.framework.ServiceReference; 
import org.osgi.service.http.HttpService; 

/** 
* Extension of the default OSGi bundle activator 
*/ 
public final class ExampleActivator implements BundleActivator, ServiceListener { 
               private BundleContext bundleContext; 
               private ServiceReference ref; 
               private Servlet servlet; 
               public void start(BundleContext context) throws Exception { 
                              bundleContext = context; 
                              servlet = new QueryWebServlet(bundleContext); 
                              // 在HttpService中注册Servlet 
                              registerServlet(); 
} 
               public void stop(BundleContext context) throws Exception { 
                              try { 
                                             unregisterServlet(); 
                              } catch (Throwable t) { 
                                             t.printStackTrace(); 
                              } 
                              servlet = null; 
                              bundleContext = null; 
                              ref = null; 
               } 
  
               public void serviceChanged(ServiceEvent event) { 
                              switch (event.getType()) { 
                              case ServiceEvent.REGISTERED: 
                                            registerServlet(); 
                                             break; 
                              case ServiceEvent.UNREGISTERING: 
                                             unregisterServlet(); 
                                             break; 
                              } 
               } 

               /* 
               * 注册Web应用 
          */ 
              private void registerServlet() { 
                              if (ref == null) { 
                                            ref = bundleContext 
                                                                           .getServiceReference(HttpService.class.getName()); 
                              } 

                             if (ref != null) { 
                                             try { 
                                                            HttpService http = (HttpService) bundleContext.getService(ref); 
                                                            if (null != http) { 
                                                                           // 注册动态资源Servlet 
                                                                           http.registerServlet("/osgi/servlet", servlet, null, null); 
                                                                           // 注册静态资源HTML 
                                                                          http.registerResources("/osgi/file", "webapp", null); 

                                                 } 
                                             } catch (Exception e) { 
                                                            e.printStackTrace(); 
                                             } 
                              } 
               } 
 
               /* 
               * 卸载Web应用 
          */ 
               private void unregisterServlet() { 
                              if (ref != null) { 
                                             try { 
                                                            HttpService http = (HttpService) bundleContext.getService(ref); 
                                                            if (null != http) { 
                                                                           http.unregister("/osgi/servlet"); 
                                                                           http.unregister("/osgi/file"); 
                                                            } 
                                             } catch (Exception e) { 
                                                           e.printStackTrace(); 
                                             } 
                              } 
               } 
} 

  

更详尽的内容请参考其他相关OSGI资料。

猜你喜欢

转载自marsvaadin.iteye.com/blog/1240923