2013-01-18 25 views

回答

0

首先,您需要一個綁定上下文的句柄。從上面你可以聽包引用,得到一個Bundle實例並使用它的類加載器來做你想做的事。使用一個Servlet掛接到包上下文和ServiceTracker

實例監聽出現

public class AnotherHelloWorldServlet extends HttpServlet { 

    private MessageService service = null; 
    private BundleContext context; 

    @Override 
    public void init(final ServletConfig config) throws ServletException { 
    super.init(config); 

    context = (BundleContext) config.getServletContext().getAttribute("osgi-bundlecontext"); 

    final AnotherHelloWorldServlet servlet = this; 

    ServiceTracker tracker = new ServiceTracker(context, 
     MessageService.class.getName(), null) { 

     @Override 
     public Object addingService(final ServiceReference sref) { 
     log.infof("Adding service: %s to %s", sref, servlet); 
     service = (MessageService) super.addingService(sref); 
     return service; 
     } 

     @Override 
     public void removedService(final ServiceReference sref, final Object sinst) { 
     super.removedService(sref, service); 
     log.infof("Removing service: %s from %s", sref, servlet); 
     service = null; 
     } 
    }; 
    tracker.open(); 
    } 
} 

與服務引用,你可以調用getBundle()獲得包實例OSGi包,併爲,getResource()得到什麼你問了。

如果您不能使用servlet或類似(如果您在Java EE/servlet容器之外),則沒有多少標準方法掛接到我所知的bundle上下文中。在這種情況下,您可能需要使用BundleContextProvider hack才能得到它。

相關問題