package org.quartz.management;
import org.quartz.core.QuartzScheduler;
import org.quartz.management.service.EntityResourceFactory;
import org.quartz.management.service.SamplerRepositoryService;
import org.terracotta.management.ServiceLocator;
import org.terracotta.management.embedded.StandaloneServer;
/**
* @author Anthony Dahanne
*/
public final class ManagementServerImpl implements ManagementServer {
private final StandaloneServer standaloneServer;
private final SamplerRepositoryService samplerRepoSvc;
public ManagementServerImpl(ManagementRESTServiceConfiguration configuration) {
String basePackage = "org.quartz.management.resource.services;org.quartz.management.jaxrs";
String host = configuration.getHost();
int port = configuration.getPort();
standaloneServer = new StandaloneServer(null, null, basePackage, host, port, null, false);
loadEmbeddedAgentServiceLocator();
this.samplerRepoSvc = ServiceLocator.locate(SamplerRepositoryService.class);
}
/**
* {@inheritDoc}
*/
@Override
public void start() {
try {
standaloneServer.start();
} catch (Exception e) {
throw new RuntimeException("error starting management server", e);
}
}
/**
* {@inheritDoc}
*/
@Override
public void stop() {
try {
standaloneServer.stop();
} catch (Exception e) {
throw new RuntimeException("error stopping management server", e);
}
}
/**
* {@inheritDoc}
*/
@Override
public void register(QuartzScheduler managedResource) {
samplerRepoSvc.register(managedResource);
}
/**
* {@inheritDoc}
*/
@Override
public void unregister(QuartzScheduler managedResource) {
samplerRepoSvc.unregister(managedResource);
}
/**
* {@inheritDoc}
*/
@Override
public boolean hasRegistered() {
return true;
// return samplerRepoSvc.hasRegistered();
}
private void loadEmbeddedAgentServiceLocator() {
DfltSamplerRepositoryService samplerRepoSvc = new DfltSamplerRepositoryService();
ServiceLocator locator = new ServiceLocator().loadService(SamplerRepositoryService.class , samplerRepoSvc)
.loadService(EntityResourceFactory.class, samplerRepoSvc);
ServiceLocator.load(locator);
}
}