+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.argeo.slc.services.impl;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.Executor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private final SlcAgentDescriptorDao slcAgentDescriptorDao;
private final SlcAgentFactory agentFactory;
- private Long pingCycle = 60000l;
+ private Executor systemExecutor;
+
+ private Long pingCycle = 20000l;
private Boolean pingThreadActive = true;
}
public void register(SlcAgentDescriptor slcAgentDescriptor) {
- slcAgentDescriptorDao.create(slcAgentDescriptor);
+ if (slcAgentDescriptorDao.getAgentDescriptor(slcAgentDescriptor
+ .getUuid()) == null)
+ slcAgentDescriptorDao.create(slcAgentDescriptor);
log.info("Registered agent #" + slcAgentDescriptor.getUuid());
}
}
public void afterPropertiesSet() throws Exception {
- if (pingCycle > 0)
- new PingThread().start();
+ // if (pingCycle > 0)
+ // new PingThread().start();
+ if (pingCycle > 0) {
+ Thread authenticatedThread = new Thread("SLC Agents Ping") {
+ public void run() {
+ systemExecutor.execute(new AgentsPing());
+ }
+ };
+ authenticatedThread.start();
+
+ }
}
public synchronized void destroy() throws Exception {
this.pingCycle = pingCycle;
}
- protected class PingThread extends Thread {
+ public void setSystemExecutor(Executor securityService) {
+ this.systemExecutor = securityService;
+ }
+
+ protected class AgentsPing implements Runnable {
public void run() {
// FIXME: temporary hack so that the ping starts after the server
// has been properly started.
try {
- Thread.sleep(5 * 1000);
+ Thread.sleep(10 * 1000);
} catch (InterruptedException e1) {
// silent
}
agentIds.add(ad.getUuid());
if (log.isTraceEnabled())
- log.debug("Ping " + agentIds.size() + " agent.");
+ log.trace("Ping " + agentIds.size() + " agent(s).");
for (String agentId : agentIds) {
SlcAgent agent = agentFactory.getAgent(agentId);
if (!agent.ping()) {
}
}
+
}