diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/SymmetricEngine.java b/symmetric/src/main/java/org/jumpmind/symmetric/SymmetricEngine.java
index 6eddc939b5..f0b462a1d2 100644
--- a/symmetric/src/main/java/org/jumpmind/symmetric/SymmetricEngine.java
+++ b/symmetric/src/main/java/org/jumpmind/symmetric/SymmetricEngine.java
@@ -29,6 +29,8 @@
import org.jumpmind.symmetric.common.Constants;
import org.jumpmind.symmetric.common.PropertiesConstants;
import org.jumpmind.symmetric.config.IRuntimeConfig;
+import org.jumpmind.symmetric.job.PurgeJob;
+import org.jumpmind.symmetric.job.PushJob;
import org.jumpmind.symmetric.model.Node;
import org.jumpmind.symmetric.service.IBootstrapService;
import org.jumpmind.symmetric.service.INodeService;
@@ -41,9 +43,15 @@
/**
* This is the preferred way to create, configure, start and manage an instance of
- * symmetric.
- *
- * @author chenson
+ * symmetric. The engine will bootstrap the symmetric.xml Spring context.
+ *
+ * The symmetric instance is configured by properties configuration files. By default the engine
+ * will look for and override existing properties with ones found in the properties files. Symmetric looks
+ * for: symmetric.properties in the classpath (it will use the first one it finds), symmetric.properties found
+ * in the user.home system property location. Next, if provided in the constructor of the SymmetricEngine, it will
+ * locate and use the properties file passed to the engine.
+ *
+ * When the engine is ready to be started, the {@link #start()} method should be called. It should only be called once.
*/
public class SymmetricEngine {
@@ -64,10 +72,14 @@ public class SymmetricEngine {
private boolean started = false;
- Properties properties;
+ private Properties properties;
private static Map registeredEnginesByUrl = new HashMap();
+ /**
+ * @param overridePropertiesResource1 Provide a Spring resource path to a properties file to be used for configuration
+ * @param overridePropertiesResource2 Provide a Spring resource path to a properties file to be used for configuration
+ */
public SymmetricEngine(String overridePropertiesResource1,
String overridePropertiesResource2) {
// Setting system properties is probably not the best way to accomplish this setup.
@@ -81,10 +93,17 @@ public SymmetricEngine(String overridePropertiesResource1,
}
}
+ /**
+ * Create a symmetric node
+ */
public SymmetricEngine() {
init(createContext());
}
+ /**
+ * Pass in the Spring context to be used. This had better include the Spring configuration for required Symmetric services.
+ * @param ctx A Spring framework context
+ */
protected SymmetricEngine(ApplicationContext ctx) {
init(ctx);
}
@@ -113,15 +132,15 @@ private void init(ApplicationContext applicationContext) {
/**
* Register this instance of the engine so it can be found by other processes in the JVM.
+ * @see #findEngineByUrl(String)
*/
private void registerEngine() {
registeredEnginesByUrl.put(runtimeConfig.getMyUrl(), this);
}
- private void initDb() {
- bootstrapService.init();
- }
-
+ /**
+ * Start the jobs if they are configured to be started in symmetric.properties
+ */
private void startJobs() {
if (Boolean.TRUE.toString().equalsIgnoreCase(
properties.getProperty(PropertiesConstants.START_PUSH_JOB))) {
@@ -154,9 +173,12 @@ private void startJobs() {
}
}
+ /**
+ * Must be called to start symmetric.
+ */
public synchronized void start() {
if (!started) {
- initDb();
+ bootstrapService.init();
Node node = nodeService.findIdentity();
if (node != null) {
logger.info("Starting registered node [group=" + node.getNodeGroupId() +
@@ -172,6 +194,11 @@ public synchronized void start() {
}
}
+ /**
+ * This can be called if the push job has not been enabled. It will perform a push
+ * the same way the {@link PushJob} would have.
+ * @see IPushService#pushData()
+ */
public void push() {
if (!Boolean.TRUE.toString().equalsIgnoreCase(
properties.getProperty(PropertiesConstants.START_PUSH_JOB))) {
@@ -183,10 +210,19 @@ public void push() {
}
}
+ /**
+ * Call this to resync triggers
+ * @see IBootstrapService#syncTriggers()
+ */
public void syncTriggers() {
bootstrapService.syncTriggers();
}
+ /**
+ * This can be called if the pull job has not been enabled. It will perform a pull
+ * the same way the {@link PullJob} would have.
+ * @see IPullService#pullData()
+ */
public void pull() {
if (!Boolean.TRUE.toString().equalsIgnoreCase(
properties.getProperty(PropertiesConstants.START_PULL_JOB))) {
@@ -198,6 +234,10 @@ public void pull() {
}
}
+ /**
+ * This can be called to do a purge. It may be called only if the {@link PurgeJob} has not been enabled.
+ * @see IPurgeService#purge()
+ */
public void purge() {
if (!Boolean.TRUE.toString().equalsIgnoreCase(
properties.getProperty(PropertiesConstants.START_PURGE_JOB))) {
@@ -208,22 +248,41 @@ public void purge() {
}
}
+ /**
+ * Push a copy of the node onto the push queue so the symmetric node 'checks' in with it's root node.
+ * @see IBootstrapService#heartbeat()
+ */
public void heartbeat() {
bootstrapService.heartbeat();
}
- public void openRegistration(String domainName, String domainId) {
- registrationService.openRegistration(domainName, domainId);
+ /**
+ * Open up registration for client to attach.
+ * @see IRegistrationService#openRegistration(String, String)
+ */
+ public void openRegistration(String groupId, String externalId) {
+ registrationService.openRegistration(groupId, externalId);
}
+ /**
+ * Check to see if this node has been registered.
+ * @return true if the node is registered
+ */
public boolean isRegistered() {
return nodeService.findIdentity() != null;
}
+ /**
+ * Expose access to the Spring context. This is for advanced use only.
+ * @return
+ */
public ApplicationContext getApplicationContext() {
return applicationContext;
}
+ /**
+ * Locate a {@link SymmetricEngine} in the same JVM
+ */
public static SymmetricEngine findEngineByUrl(String url) {
return registeredEnginesByUrl.get(url);
}