org.appdapter.registry.test.BasicModuleTestOne Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.appdapter.lib.registry Show documentation
Show all versions of org.appdapter.lib.registry Show documentation
Pluggable object registration + query service
/*
* Copyright 2012 by The Appdapter Project (www.appdapter.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.appdapter.registry.test;
import org.appdapter.api.module.Modulator;
import org.appdapter.api.registry.VerySimpleRegistry;
import org.appdapter.core.log.BasicDebugger;
import org.appdapter.module.basic.BasicModulator;
import org.appdapter.module.basic.BasicModule;
import org.appdapter.module.basic.EmptyTimedModule;
import org.appdapter.module.basic.NullModule;
import org.appdapter.osgi.registry.RegistryServiceFuncs;
/**
* @author Stu B.
*/
public class BasicModuleTestOne extends BasicDebugger {
static class Ctx {
public String myData = "Yes, please!";
}
// static Logger theLogger = LoggerFactory.getLogger(BasicModuleTestOne.class);
public static class PowerModule extends NullModule {
@Override public synchronized void runOnce() {
enterBasicRunOnce();
Long runStart = logInfoEvent(IMPO_NORM, true, null, "runOnce", "BEGIN");
Ctx c = getContext();
logInfoEvent(IMPO_NORM, true, runStart, "runOnce", "");
exitBasicRunOnce();
}
}
public void processBatches(Modulator mu, int count) {
for (int i = 0; i < count; i++) {
mu.processOneBatch();
}
}
public void syncTest() {
final Modulator mu = new BasicModulator(new Ctx(), true);
processBatches(mu, 5);
PowerModule pm1 = new PowerModule();
pm1.setDebugImportanceThreshold(BasicModule.IMPO_MIN);
mu.attachModule(pm1);
EmptyTimedModule etm = new EmptyTimedModule();
mu.attachModule(etm);
processBatches(mu, 10);
pm1.markStopRequested();
processBatches(mu, 5);
try {
logInfo ("Expecting exception as we try to detach a module that was already auto-detached");
mu.detachModule(pm1);
} catch (RuntimeException re) {
logInfo("Caught the exception, as expected");
logError("Caught expected exception, but logging as error - for fun! ", re);
logWarning("And now, as a warning: ", re);
}
processBatches(mu, 5);
}
public void asyncTest() throws Throwable {
final Modulator mu = new BasicModulator(new Ctx(), false);
Thread runner = new Thread(new Runnable() {
@Override public void run() {
while (true) {
try {
mu.processOneBatch();
} catch (Throwable t) {
logError("Caught", t);
}
}
}
});
runner.start();
PowerModule pm1 = new PowerModule();
pm1.setDebugImportanceThreshold(BasicModule.IMPO_MIN);
mu.attachModule(pm1);
Thread.sleep(200);
pm1.markStopRequested();
Thread.sleep(200);
mu.detachModule(pm1);
Thread.sleep(200);
}
public void runTest() {
logInfo("------------BasicModuleTestOne-----------");
VerySimpleRegistry vsr = RegistryServiceFuncs.getTheWellKnownRegistry(getClass());
try {
logInfo("========================================");
logInfo("Starting syncTest()");
logInfo("========================================");
syncTest();
logInfo("========================================");
logInfo("Finished syncTest(), starting asyncTest()");
logInfo("========================================");
asyncTest();
logInfo("========================================");
logInfo("Finished asyncTest()");
logInfo("========================================");
} catch (Throwable t) {
t.printStackTrace();
}
}
public static void main(String[] args) {
BasicModuleTestOne bmto = new BasicModuleTestOne();
bmto.runTest();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy