@Startup @Singleton @DependsOn("adminServiceBean") public class InstallServicesBean { private static Logger logger = LoggerFactory.getLogger(InstallServicesBean.class); @Inject private MyServiceListener listener; @Inject private MyServiceBean adminService; @PostConstruct public void installService() { BundleContext m_context = ServiceActivator.m_context; String filter = "(" + Constants.OBJECTCLASS + "=" + BaseService.class.getName() + ")"; ServiceReference[] refs = null; try { m_context.addServiceListener(listener, filter); logger.debug("Added a service listener to install services"); refs = m_context.getServiceReferences(null, filter); } catch (InvalidSyntaxException e) { logger.error("InvalidSyntaxException: ", e); } if (refs != null) { for (ServiceReference r : refs) { //send pseudo events for existing services listener.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, r)); } } } private class MyServiceListener implements ServiceListener { public synchronized void serviceChanged(ServiceEvent event) { switch (event.getType()) { case ServiceEvent.REGISTERED: //try {//lookup EJB every time, otherwise we get exception "Attempt to invoke when container is in Undeployed" // adminService = (MyServiceBean) new InitialContext().lookup("java:global/com.ex.test-war/adminServiceBean"); //} catch (NamingException e) { // logger.error("MyServiceListener - exception: ",e); //} //do something adminService.installService(serviceName); break; } } } }