List of usage examples for org.apache.commons.configuration.event ConfigurationListener ConfigurationListener
ConfigurationListener
From source file:com.twitter.distributedlog.service.stream.limiter.DynamicRequestLimiter.java
public DynamicRequestLimiter(DynamicDistributedLogConfiguration dynConf, StatsLogger statsLogger, Feature rateLimitDisabledFeature) { final StatsLogger limiterStatsLogger = statsLogger.scope("dynamic"); this.dynConf = dynConf; this.rateLimitDisabledFeature = rateLimitDisabledFeature; this.listener = new ConfigurationListener() { @Override/* w w w. j av a 2 s .c o m*/ public void configurationChanged(ConfigurationEvent event) { // Note that this method may be called several times if several config options // are changed. The effect is harmless except that we create and discard more // objects than we need to. LOG.debug("Config changed callback invoked with event {} {} {} {}", new Object[] { event.getPropertyName(), event.getPropertyValue(), event.getType(), event.isBeforeUpdate() }); if (!event.isBeforeUpdate()) { limiterStatsLogger.getCounter("config_changed").inc(); LOG.debug("Rebuilding limiter"); limiter = build(); } } }; LOG.debug("Registering config changed callback"); dynConf.addConfigurationListener(listener); }
From source file:com.kixeye.chassis.support.logging.LoggingConfiguration.java
@PostConstruct public void initialize() { AbstractConfiguration config = ConfigurationManager.getConfigInstance(); if (config.containsKey(LOGBACK_CONFIG_NAME)) { System.out.println("Loading logging config."); reloadLogging(config.getString(LOGBACK_CONFIG_NAME)); }/*from w ww . j a v a 2s . c om*/ config.addConfigurationListener(new ConfigurationListener() { @Override public synchronized void configurationChanged(ConfigurationEvent event) { if ((event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY || event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY) && StringUtils.equalsIgnoreCase(LOGBACK_CONFIG_NAME, event.getPropertyName()) && event.getPropertyValue() != null && !event.isBeforeUpdate()) { System.out.println("Reloading logging config."); reloadLogging((String) event.getPropertyValue()); } } }); ConfigurationListener flumeConfigListener = new ConfigurationListener() { private FlumeLoggerLoader loggerLoader = null; public synchronized void configurationChanged(ConfigurationEvent event) { if (!(event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY || event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY || event.getType() == AbstractConfiguration.EVENT_CLEAR_PROPERTY)) { return; } if (FlumeLoggerLoader.FLUME_LOGGER_ENABLED_PROPERTY.equals(event.getPropertyName())) { if ("true".equals(event.getPropertyValue())) { if (loggerLoader == null) { // construct the bean loggerLoader = (FlumeLoggerLoader) applicationContext .getBean(FlumeLoggerLoader.PROTOTYPE_BEAN_NAME, "chassis"); } // else we already have one so we're cool } else { if (loggerLoader != null) { // delete the bean ConfigurableBeanFactory beanFactory = (ConfigurableBeanFactory) applicationContext .getParentBeanFactory(); beanFactory.destroyBean(FlumeLoggerLoader.PROTOTYPE_BEAN_NAME, loggerLoader); loggerLoader = null; } // else we don't have any so we're cool } } else if (FlumeLoggerLoader.RELOAD_PROPERTIES.contains(event.getPropertyValue())) { // only reload if we're already running - otherwise ignore if (loggerLoader != null) { // delete the bean ConfigurableBeanFactory beanFactory = (ConfigurableBeanFactory) applicationContext .getParentBeanFactory(); beanFactory.destroyBean(FlumeLoggerLoader.PROTOTYPE_BEAN_NAME, loggerLoader); loggerLoader = null; // construct the bean loggerLoader = (FlumeLoggerLoader) applicationContext .getBean(FlumeLoggerLoader.PROTOTYPE_BEAN_NAME, "chassis"); } // else we don't have any so we're cool } } }; config.addConfigurationListener(flumeConfigListener); flumeConfigListener.configurationChanged(new ConfigurationEvent(this, AbstractConfiguration.EVENT_SET_PROPERTY, FlumeLoggerLoader.FLUME_LOGGER_ENABLED_PROPERTY, config.getProperty(FlumeLoggerLoader.FLUME_LOGGER_ENABLED_PROPERTY), false)); }
From source file:de.hybris.platform.servicelayer.config.ConfigServiceTest.java
/** * Test firing a {@link ConfigurationListener} *//*from w ww .j a v a 2 s.c o m*/ @Test public void testConfigListeners() { final Set<Boolean> wasInvoked = new HashSet<Boolean>(); final ConfigurationListener listener = new ConfigurationListener() { @Override public void configurationChanged(final ConfigurationEvent event) { wasInvoked.add(Boolean.TRUE); } }; ((AbstractConfiguration) this.configurationService.getConfiguration()).addConfigurationListener(listener); final String oldValue = configurationService.getConfiguration().getString("build.description"); this.configurationService.getConfiguration().setProperty("build.description", "new description"); Assert.assertTrue(wasInvoked.contains(Boolean.TRUE)); wasInvoked.remove(Boolean.TRUE); ((AbstractConfiguration) this.configurationService.getConfiguration()) .removeConfigurationListener(listener); this.configurationService.getConfiguration().setProperty("build.description", oldValue); Assert.assertTrue(wasInvoked.isEmpty()); }
From source file:com.kixeye.chassis.support.metrics.aws.MetricsCloudWatchConfiguration.java
private void addConfigurationListener() { final MetricsCloudWatchConfiguration springConfig = this; ConfigurationManager.getConfigInstance().addConfigurationListener(new ConfigurationListener() { @Override//from w w w. j a va 2 s . co m public synchronized void configurationChanged(ConfigurationEvent event) { if (!(event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY || event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY)) { return; } if (event.isBeforeUpdate()) { return; } String name = event.getPropertyName(); if (!(name.equals(METRICS_AWS_ENABLED) || name.equals(METRICS_AWS_FILTER) || name.equals(METRICS_AWS_PUBLISH_INTERVAL) || name.equals(METRICS_AWS_PUBLISH_INTERVAL_UNIT))) { return; } springConfig.enabled = name.equals(METRICS_AWS_ENABLED) ? Boolean.parseBoolean(event.getPropertyValue() + "") : springConfig.enabled; destroyReporter(); if (springConfig.enabled) { createReporter(); } } }); }
From source file:com.kixeye.chassis.support.metrics.codahale.MetricsGraphiteConfiguration.java
private void addConfigurationListener() { final MetricsGraphiteConfiguration springConfig = this; ConfigurationManager.getConfigInstance().addConfigurationListener(new ConfigurationListener() { @Override//from ww w . jav a 2s . co m public synchronized void configurationChanged(ConfigurationEvent event) { if (!(event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY || event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY)) { return; } if (event.isBeforeUpdate()) { return; } String name = event.getPropertyName(); if (!(name.equals(METRICS_GRAPHITE_ENABLED) || name.equals(METRICS_GRAPHITE_SERVER) || name.equals(METRICS_GRAPHITE_PORT) || name.equals(METRICS_GRAPHITE_FILTER) || name.equals(METRICS_GRAPHITE_PUBLISH_INTERVAL) || name.equals(METRICS_GRAPHITE_PUBLISH_INTERVAL_UNIT))) { return; } springConfig.enabled = name.equals(METRICS_GRAPHITE_ENABLED) ? Boolean.parseBoolean(event.getPropertyValue() + "") : springConfig.enabled; destroyReporterLoader(); if (springConfig.enabled) { createReporterLoader(); } } }); }
From source file:com.netflix.config.ConcurrentMapConfigurationTest.java
@Test public void testListeners() { ConcurrentMapConfiguration conf = new ConcurrentMapConfiguration(); final AtomicReference<ConfigurationEvent> eventRef = new AtomicReference<ConfigurationEvent>(); conf.addConfigurationListener(new ConfigurationListener() { @Override//from www. j a v a2s .c om public void configurationChanged(ConfigurationEvent arg0) { eventRef.set(arg0); } }); conf.addProperty("key", "1"); assertEquals(1, conf.getInt("key")); ConfigurationEvent event = eventRef.get(); assertEquals("key", event.getPropertyName()); assertEquals("1", event.getPropertyValue()); assertTrue(conf == event.getSource()); assertEquals(AbstractConfiguration.EVENT_ADD_PROPERTY, event.getType()); conf.setProperty("key", "2"); event = eventRef.get(); assertEquals("key", event.getPropertyName()); assertEquals("2", event.getPropertyValue()); assertTrue(conf == event.getSource()); assertEquals(AbstractConfiguration.EVENT_SET_PROPERTY, event.getType()); conf.clearProperty("key"); event = eventRef.get(); assertEquals("key", event.getPropertyName()); assertNull(event.getPropertyValue()); assertTrue(conf == event.getSource()); assertEquals(AbstractConfiguration.EVENT_CLEAR_PROPERTY, event.getType()); conf.clear(); assertFalse(conf.getKeys().hasNext()); event = eventRef.get(); assertTrue(conf == event.getSource()); assertEquals(AbstractConfiguration.EVENT_CLEAR, event.getType()); }
From source file:com.twitter.distributedlog.config.TestConfigurationSubscription.java
@Test(timeout = 60000) public void testExceptionInConfigLoad() throws Exception { PropertiesWriter writer = new PropertiesWriter(); writer.setProperty("prop1", "1"); writer.save();/*from w w w .ja v a2 s . com*/ DeterministicScheduler mockScheduler = new DeterministicScheduler(); FileConfigurationBuilder builder = new PropertiesConfigurationBuilder(writer.getFile().toURI().toURL()); ConcurrentConstConfiguration conf = new ConcurrentConstConfiguration(new DistributedLogConfiguration()); List<FileConfigurationBuilder> fileConfigBuilders = Lists.newArrayList(builder); ConfigurationSubscription confSub = new ConfigurationSubscription(conf, fileConfigBuilders, mockScheduler, 100, TimeUnit.MILLISECONDS); final AtomicInteger count = new AtomicInteger(1); conf.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { LOG.info("config changed {}", event); // Throw after so we actually see the update anyway. if (!event.isBeforeUpdate()) { count.getAndIncrement(); throw new RuntimeException("config listener threw and exception"); } } }); int i = 0; int initial = 0; while (count.get() == initial) { writer.setProperty("prop1", Integer.toString(i++)); writer.save(); mockScheduler.tick(100, TimeUnit.MILLISECONDS); } initial = count.get(); while (count.get() == initial) { writer.setProperty("prop1", Integer.toString(i++)); writer.save(); mockScheduler.tick(100, TimeUnit.MILLISECONDS); } }
From source file:net.pms.encoders.AviSynthMEncoder.java
@Override public JComponent config() { FormLayout layout = new FormLayout("left:pref, 0:grow", "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 12dlu, p, 3dlu, 0:grow"); PanelBuilder builder = new PanelBuilder(layout); builder.border(Borders.EMPTY);//w w w. j av a 2 s . c o m builder.opaque(false); CellConstraints cc = new CellConstraints(); JComponent cmp = builder.addSeparator(Messages.getString("NetworkTab.5"), cc.xyw(2, 1, 1)); cmp = (JComponent) cmp.getComponent(0); cmp.setFont(cmp.getFont().deriveFont(Font.BOLD)); multithreading = new JCheckBox(Messages.getString("MEncoderVideo.35"), configuration.getAvisynthMultiThreading()); multithreading.setContentAreaFilled(false); multithreading.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setAvisynthMultiThreading((e.getStateChange() == ItemEvent.SELECTED)); } }); builder.add(GuiUtil.getPreferredSizeComponent(multithreading), cc.xy(2, 3)); interframe = new JCheckBox(Messages.getString("AviSynthMEncoder.13"), configuration.getAvisynthInterFrame()); interframe.setContentAreaFilled(false); interframe.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { configuration.setAvisynthInterFrame(interframe.isSelected()); if (configuration.getAvisynthInterFrame()) { JOptionPane.showMessageDialog( SwingUtilities.getWindowAncestor((Component) PMS.get().getFrame()), Messages.getString("AviSynthMEncoder.16"), Messages.getString("Dialog.Information"), JOptionPane.INFORMATION_MESSAGE); } } }); builder.add(GuiUtil.getPreferredSizeComponent(interframe), cc.xy(2, 5)); interframegpu = new JCheckBox(Messages.getString("AviSynthMEncoder.15"), configuration.getAvisynthInterFrameGPU()); interframegpu.setContentAreaFilled(false); interframegpu.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setAvisynthInterFrameGPU((e.getStateChange() == ItemEvent.SELECTED)); } }); builder.add(GuiUtil.getPreferredSizeComponent(interframegpu), cc.xy(2, 7)); convertfps = new JCheckBox(Messages.getString("AviSynthMEncoder.3"), configuration.getAvisynthConvertFps()); convertfps.setContentAreaFilled(false); convertfps.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setAvisynthConvertFps((e.getStateChange() == ItemEvent.SELECTED)); } }); builder.add(GuiUtil.getPreferredSizeComponent(convertfps), cc.xy(2, 9)); String aviSynthScriptInstructions = Messages.getString("AviSynthMEncoder.4") + Messages.getString("AviSynthMEncoder.5") + Messages.getString("AviSynthMEncoder.6") + Messages.getString("AviSynthMEncoder.7") + Messages.getString("AviSynthMEncoder.8"); JTextArea aviSynthScriptInstructionsContainer = new JTextArea(aviSynthScriptInstructions); aviSynthScriptInstructionsContainer.setEditable(false); aviSynthScriptInstructionsContainer.setBorder(BorderFactory.createEtchedBorder()); aviSynthScriptInstructionsContainer.setBackground(new Color(255, 255, 192)); aviSynthScriptInstructionsContainer.setBorder( BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(130, 135, 144)), BorderFactory.createEmptyBorder(3, 5, 3, 5))); builder.add(aviSynthScriptInstructionsContainer, cc.xy(2, 11)); String clip = configuration.getAvisynthScript(); if (clip == null) { clip = ""; } StringBuilder sb = new StringBuilder(); StringTokenizer st = new StringTokenizer(clip, PMS.AVS_SEPARATOR); int i = 0; while (st.hasMoreTokens()) { if (i > 0) { sb.append("\n"); } sb.append(st.nextToken()); i++; } textArea = new JTextArea(sb.toString()); textArea.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { StringBuilder sb = new StringBuilder(); StringTokenizer st = new StringTokenizer(textArea.getText(), "\n"); int i = 0; while (st.hasMoreTokens()) { if (i > 0) { sb.append(PMS.AVS_SEPARATOR); } sb.append(st.nextToken()); i++; } configuration.setAvisynthScript(sb.toString()); } }); JScrollPane pane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); pane.setPreferredSize(new Dimension(500, 350)); builder.add(pane, cc.xy(2, 13)); configuration.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { if (event.getPropertyName() == null) { return; } if ((!event.isBeforeUpdate()) && event.getPropertyName().equals(PmsConfiguration.KEY_GPU_ACCELERATION)) { interframegpu.setEnabled(configuration.isGPUAcceleration()); } } }); return builder.getPanel(); }
From source file:net.pms.encoders.AviSynthFFmpeg.java
@Override protected JComponent config(String languageLabel) { FormLayout layout = new FormLayout("left:pref, 0:grow", "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu"); PanelBuilder builder = new PanelBuilder(layout); builder.border(Borders.EMPTY);/* ww w . j a va2 s . c om*/ builder.opaque(false); CellConstraints cc = new CellConstraints(); JComponent cmp = builder.addSeparator(Messages.getString(languageLabel), cc.xyw(2, 1, 1)); cmp = (JComponent) cmp.getComponent(0); cmp.setFont(cmp.getFont().deriveFont(Font.BOLD)); multithreading = new JCheckBox(Messages.getString("MEncoderVideo.35"), configuration.isFfmpegAviSynthMultithreading()); multithreading.setContentAreaFilled(false); multithreading.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setFfmpegAviSynthMultithreading(e.getStateChange() == ItemEvent.SELECTED); } }); builder.add(GuiUtil.getPreferredSizeComponent(multithreading), cc.xy(2, 3)); interframe = new JCheckBox(Messages.getString("AviSynthMEncoder.13"), configuration.getFfmpegAvisynthInterFrame()); interframe.setContentAreaFilled(false); interframe.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { configuration.setFfmpegAvisynthInterFrame(interframe.isSelected()); if (configuration.getFfmpegAvisynthInterFrame()) { JOptionPane.showMessageDialog( SwingUtilities.getWindowAncestor((Component) PMS.get().getFrame()), Messages.getString("AviSynthMEncoder.16"), Messages.getString("Dialog.Information"), JOptionPane.INFORMATION_MESSAGE); } } }); builder.add(GuiUtil.getPreferredSizeComponent(interframe), cc.xy(2, 5)); interframegpu = new JCheckBox(Messages.getString("AviSynthMEncoder.15"), configuration.getFfmpegAvisynthInterFrameGPU()); interframegpu.setContentAreaFilled(false); interframegpu.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setFfmpegAvisynthInterFrameGPU((e.getStateChange() == ItemEvent.SELECTED)); } }); builder.add(GuiUtil.getPreferredSizeComponent(interframegpu), cc.xy(2, 7)); convertfps = new JCheckBox(Messages.getString("AviSynthMEncoder.3"), configuration.getFfmpegAvisynthConvertFps()); convertfps.setContentAreaFilled(false); convertfps.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { configuration.setFfmpegAvisynthConvertFps((e.getStateChange() == ItemEvent.SELECTED)); } }); builder.add(GuiUtil.getPreferredSizeComponent(convertfps), cc.xy(2, 9)); configuration.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { if (event.getPropertyName() == null) { return; } if ((!event.isBeforeUpdate()) && event.getPropertyName().equals(PmsConfiguration.KEY_GPU_ACCELERATION)) { interframegpu.setEnabled(configuration.isGPUAcceleration()); } } }); return builder.getPanel(); }
From source file:net.pms.PMS.java
/** * Initialisation procedure for PMS./*from ww w . j a va2s. c o m*/ * @return true if the server has been initialized correctly. false if the server could * not be set to listen on the UPnP port. * @throws Exception */ private boolean init() throws Exception { // The public VERSION field is deprecated. // This is a temporary fix for backwards compatibility VERSION = getVersion(); // call this as early as possible displayBanner(); AutoUpdater autoUpdater = null; if (Build.isUpdatable()) { String serverURL = Build.getUpdateServerURL(); autoUpdater = new AutoUpdater(serverURL, getVersion()); } registry = createSystemUtils(); if (!isHeadless()) { frame = new LooksFrame(autoUpdater, configuration); } else { logger.info("GUI environment not available"); logger.info("Switching to console mode"); frame = new DummyFrame(); } /* * we're here: * * main() -> createInstance() -> init() * * which means we haven't created the instance returned by get() * yet, so the frame appender can't access the frame in the * standard way i.e. PMS.get().getFrame(). we solve it by * inverting control ("don't call us; we'll call you") i.e. * we notify the appender when the frame is ready rather than * e.g. making getFrame() static and requiring the frame * appender to poll it. * * XXX an event bus (e.g. MBassador or Guava EventBus * (if they fix the memory-leak issue)) notification * would be cleaner and could support other lifecycle * notifications (see above). */ FrameAppender.setFrame(frame); configuration.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { if ((!event.isBeforeUpdate()) && PmsConfiguration.NEED_RELOAD_FLAGS.contains(event.getPropertyName())) { frame.setReloadable(true); } } }); frame.setStatusCode(0, Messages.getString("PMS.130"), "connect_no-220.png"); RendererConfiguration.loadRendererConfigurations(configuration); logger.info("Checking MPlayer font cache. It can take a minute or so."); checkProcessExistence("MPlayer", true, null, configuration.getMplayerPath(), "dummy"); if (Platform.isWindows()) { checkProcessExistence("MPlayer", true, configuration.getTempFolder(), configuration.getMplayerPath(), "dummy"); } logger.info("Done!"); // check the existence of Vsfilter.dll if (registry.isAvis() && registry.getAvsPluginsDir() != null) { logger.info("Found AviSynth plugins dir: " + registry.getAvsPluginsDir().getAbsolutePath()); File vsFilterdll = new File(registry.getAvsPluginsDir(), "VSFilter.dll"); if (!vsFilterdll.exists()) { logger.info( "VSFilter.dll is not in the AviSynth plugins directory. This can cause problems when trying to play subtitled videos with AviSynth"); } } // Check if VLC is found String vlcVersion = registry.getVlcVersion(); String vlcPath = registry.getVlcPath(); if (vlcVersion != null && vlcPath != null) { logger.info("Found VLC version " + vlcVersion + " at: " + vlcPath); Version vlc = new Version(vlcVersion); Version requiredVersion = new Version("2.0.2"); if (vlc.compareTo(requiredVersion) <= 0) { logger.error("Only VLC versions 2.0.2 and above are supported"); } } // check if Kerio is installed if (registry.isKerioFirewall()) { logger.info("Detected Kerio firewall"); } // force use of specific dvr ms muxer when it's installed in the right place File dvrsMsffmpegmuxer = new File("win32/dvrms/ffmpeg_MPGMUX.exe"); if (dvrsMsffmpegmuxer.exists()) { configuration.setFfmpegAlternativePath(dvrsMsffmpegmuxer.getAbsolutePath()); } // disable jaudiotagger logging LogManager.getLogManager() .readConfiguration(new ByteArrayInputStream("org.jaudiotagger.level=OFF".getBytes())); // wrap System.err System.setErr(new PrintStream(new SystemErrWrapper(), true)); server = new HTTPServer(configuration.getServerPort()); /* * XXX: keep this here (i.e. after registerExtensions and before registerPlayers) so that plugins * can register custom players correctly (e.g. in the GUI) and/or add/replace custom formats * * XXX: if a plugin requires initialization/notification even earlier than * this, then a new external listener implementing a new callback should be added * e.g. StartupListener.registeredExtensions() */ try { ExternalFactory.lookup(); } catch (Exception e) { logger.error("Error loading plugins", e); } // a static block in Player doesn't work (i.e. is called too late). // this must always be called *after* the plugins have loaded. // here's as good a place as any Player.initializeFinalizeTranscoderArgsListeners(); // Initialize a player factory to register all players PlayerFactory.initialize(configuration); // Instantiate listeners that require registered players. ExternalFactory.instantiateLateListeners(); // Any plugin-defined players are now registered, create the GUI view. frame.addEngines(); boolean binding = false; try { binding = server.start(); } catch (BindException b) { logger.info("FATAL ERROR: Unable to bind on port: " + configuration.getServerPort() + ", because: " + b.getMessage()); logger.info("Maybe another process is running or the hostname is wrong."); } new Thread("Connection Checker") { @Override public void run() { try { Thread.sleep(7000); } catch (InterruptedException e) { } if (foundRenderers.isEmpty()) { frame.setStatusCode(0, Messages.getString("PMS.0"), "messagebox_critical-220.png"); } else { frame.setStatusCode(0, Messages.getString("PMS.18"), "apply-220.png"); } } }.start(); if (!binding) { return false; } // initialize the cache if (configuration.getUseCache()) { initializeDatabase(); // XXX: this must be done *before* new MediaLibrary -> new MediaLibraryFolder mediaLibrary = new MediaLibrary(); logger.info("A tiny cache admin interface is available at: http://" + server.getHost() + ":" + server.getPort() + "/console/home"); } // XXX: this must be called: // a) *after* loading plugins i.e. plugins register root folders then RootFolder.discoverChildren adds them // b) *after* mediaLibrary is initialized, if enabled (above) getRootFolder(RendererConfiguration.getDefaultConf()); frame.serverReady(); // UPNPHelper.sendByeBye(); Runtime.getRuntime().addShutdownHook(new Thread("PMS Listeners Stopper") { @Override public void run() { try { for (ExternalListener l : ExternalFactory.getExternalListeners()) { l.shutdown(); } UPNPHelper.shutDownListener(); UPNPHelper.sendByeBye(); logger.debug("Forcing shutdown of all active processes"); for (Process p : currentProcesses) { try { p.exitValue(); } catch (IllegalThreadStateException ise) { logger.trace("Forcing shutdown of process: " + p); ProcessUtil.destroy(p); } } get().getServer().stop(); Thread.sleep(500); } catch (InterruptedException e) { logger.debug("Caught exception", e); } } }); UPNPHelper.sendAlive(); logger.trace("Waiting 250 milliseconds..."); Thread.sleep(250); UPNPHelper.listen(); return true; }