Search in sources :

Example 1 with InitDelayingTopologyEventListener

use of org.apache.sling.discovery.commons.InitDelayingTopologyEventListener in project sling by apache.

the class JobManagerConfiguration method activate.

/**
     * Activate this component.
     * @param props Configuration properties
     * @param config Configuration properties
     * @throws RuntimeException If the default paths can't be created
     */
@Activate
protected void activate(final Map<String, Object> props, final Config config) {
    this.update(props, config);
    this.jobsBasePathWithSlash = PropertiesUtil.toString(props.get(PROPERTY_REPOSITORY_PATH), DEFAULT_REPOSITORY_PATH) + '/';
    // create initial resources
    this.assignedJobsPath = this.jobsBasePathWithSlash + "assigned";
    this.unassignedJobsPath = this.jobsBasePathWithSlash + "unassigned";
    this.localJobsPath = this.assignedJobsPath.concat("/").concat(Environment.APPLICATION_ID);
    this.localJobsPathWithSlash = this.localJobsPath.concat("/");
    this.previousVersionAnonPath = this.jobsBasePathWithSlash + "anon";
    this.previousVersionIdentifiedPath = this.jobsBasePathWithSlash + "identified";
    this.storedCancelledJobsPath = this.jobsBasePathWithSlash + "cancelled";
    this.storedSuccessfulJobsPath = this.jobsBasePathWithSlash + "finished";
    this.scheduledJobsPath = PropertiesUtil.toString(props.get(PROPERTY_SCHEDULED_JOBS_PATH), DEFAULT_SCHEDULED_JOBS_PATH);
    this.scheduledJobsPathWithSlash = this.scheduledJobsPath + "/";
    // create initial resources
    final ResourceResolver resolver = this.createResourceResolver();
    try {
        ResourceHelper.getOrCreateBasePath(resolver, this.getLocalJobsPath());
        ResourceHelper.getOrCreateBasePath(resolver, this.getUnassignedJobsPath());
    } catch (final PersistenceException pe) {
        logger.error("Unable to create default paths: " + pe.getMessage(), pe);
        throw new RuntimeException(pe);
    } finally {
        resolver.close();
    }
    this.active.set(true);
    // SLING-5560 : use an InitDelayingTopologyEventListener
    if (this.startupDelay > 0) {
        logger.debug("activate: job manager will start in {} sec. ({})", this.startupDelay, config.startup_delay());
        this.startupDelayListener = new InitDelayingTopologyEventListener(startupDelay, new TopologyEventListener() {

            @Override
            public void handleTopologyEvent(TopologyEvent event) {
                doHandleTopologyEvent(event);
            }
        }, logger);
    } else {
        logger.debug("activate: job manager will start without delay. ({}:{})", config.startup_delay(), this.startupDelay);
    }
}
Also used : TopologyEvent(org.apache.sling.discovery.TopologyEvent) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) PersistenceException(org.apache.sling.api.resource.PersistenceException) InitDelayingTopologyEventListener(org.apache.sling.discovery.commons.InitDelayingTopologyEventListener) InitDelayingTopologyEventListener(org.apache.sling.discovery.commons.InitDelayingTopologyEventListener) TopologyEventListener(org.apache.sling.discovery.TopologyEventListener) Activate(org.osgi.service.component.annotations.Activate)

Example 2 with InitDelayingTopologyEventListener

use of org.apache.sling.discovery.commons.InitDelayingTopologyEventListener in project sling by apache.

the class JobManagerConfigurationTest method testTopologyChange.

@Test
public void testTopologyChange() throws Exception {
    // mock scheduler
    final ChangeListener ccl = new ChangeListener();
    // add change listener and verify
    ccl.init(1);
    final JobManagerConfiguration config = new JobManagerConfiguration();
    ((AtomicBoolean) TestUtil.getFieldValue(config, "active")).set(true);
    InitDelayingTopologyEventListener startupDelayListener = new InitDelayingTopologyEventListener(1, new TopologyEventListener() {

        @Override
        public void handleTopologyEvent(TopologyEvent event) {
            config.doHandleTopologyEvent(event);
        }
    });
    TestUtil.setFieldValue(config, "startupDelayListener", startupDelayListener);
    config.addListener(ccl);
    ccl.await();
    assertEquals(1, ccl.events.size());
    assertFalse(ccl.events.get(0));
    // create init view
    ccl.init(1);
    final TopologyView initView = createView();
    final TopologyEvent init = new TopologyEvent(TopologyEvent.Type.TOPOLOGY_INIT, null, initView);
    config.handleTopologyEvent(init);
    ccl.await();
    assertEquals(1, ccl.events.size());
    assertTrue(ccl.events.get(0));
    // change view, followed by change props
    ccl.init(2);
    final TopologyView view2 = createView();
    Mockito.when(initView.isCurrent()).thenReturn(false);
    final TopologyEvent change1 = new TopologyEvent(TopologyEvent.Type.TOPOLOGY_CHANGED, initView, view2);
    final TopologyView view3 = createView();
    final TopologyEvent change2 = new TopologyEvent(TopologyEvent.Type.PROPERTIES_CHANGED, view2, view3);
    config.handleTopologyEvent(change1);
    Mockito.when(view2.isCurrent()).thenReturn(false);
    config.handleTopologyEvent(change2);
    ccl.await();
    assertEquals(2, ccl.events.size());
    assertFalse(ccl.events.get(0));
    assertTrue(ccl.events.get(1));
    // we wait another 4 secs to see if there is no another event
    Thread.sleep(4000);
    assertEquals(2, ccl.events.size());
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) TopologyEvent(org.apache.sling.discovery.TopologyEvent) InitDelayingTopologyEventListener(org.apache.sling.discovery.commons.InitDelayingTopologyEventListener) TopologyView(org.apache.sling.discovery.TopologyView) InitDelayingTopologyEventListener(org.apache.sling.discovery.commons.InitDelayingTopologyEventListener) TopologyEventListener(org.apache.sling.discovery.TopologyEventListener) Test(org.junit.Test)

Aggregations

TopologyEvent (org.apache.sling.discovery.TopologyEvent)2 TopologyEventListener (org.apache.sling.discovery.TopologyEventListener)2 InitDelayingTopologyEventListener (org.apache.sling.discovery.commons.InitDelayingTopologyEventListener)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 PersistenceException (org.apache.sling.api.resource.PersistenceException)1 ResourceResolver (org.apache.sling.api.resource.ResourceResolver)1 TopologyView (org.apache.sling.discovery.TopologyView)1 Test (org.junit.Test)1 Activate (org.osgi.service.component.annotations.Activate)1