use of jp.ossc.nimbus.service.semaphore.DefaultSemaphoreService in project nimbus by nimbus-org.
the class FlowControlInterceptorServiceTest method test2.
public void test2() throws Throwable {
ServiceManagerFactory.registerManager("Test");
final ServiceMetaData interceptorServiceData = new ServiceMetaData();
interceptorServiceData.setCode(FlowControlInterceptorService.class.getName());
interceptorServiceData.setName("FlowControlInterceptor");
interceptorServiceData.addDepends(interceptorServiceData.createDependsMetaData("Test", "Semaphore"));
ServiceManagerFactory.registerService("Test", interceptorServiceData);
FlowControlInterceptorService interceptor = (FlowControlInterceptorService) ServiceManagerFactory.getService("Test", "FlowControlInterceptor");
final DefaultSemaphoreService semaphore = new DefaultSemaphoreService();
ServiceManagerFactory.registerService("Test", "Semaphore", semaphore);
try {
ServiceManagerFactory.findManager("Test").createAllService();
interceptor.setSemaphoreServiceName(new ServiceName("Test", "Semaphore"));
interceptor.setTimeout(200l);
semaphore.setResourceCapacity(1);
ServiceManagerFactory.findManager("Test").startAllService();
final InterceptorChain chain = new DefaultThreadLocalInterceptorChain(new DefaultInterceptorChainList(new Interceptor[] { interceptor }), new Invoker() {
public Object invoke(InvocationContext context) throws Throwable {
Thread.sleep(500);
return "test";
}
});
Runnable runner = new Runnable() {
public void run() {
try {
chain.invokeNext(new DefaultMethodInvocationContext());
} catch (Throwable th) {
}
}
};
Thread thread = new Thread(runner);
thread.start();
Thread.sleep(100);
try {
chain.invokeNext(new DefaultMethodInvocationContext());
fail();
} catch (FailToObtainSemaphoreException e) {
}
thread.join();
} finally {
ServiceManagerFactory.findManager("Test").stopAllService();
ServiceManagerFactory.findManager("Test").destroyAllService();
ServiceManagerFactory.unregisterManager("Test");
}
}
use of jp.ossc.nimbus.service.semaphore.DefaultSemaphoreService in project nimbus by nimbus-org.
the class FlowControlInterceptorServiceTest method test1.
public void test1() throws Throwable {
ServiceManagerFactory.registerManager("Test");
final ServiceMetaData interceptorServiceData = new ServiceMetaData();
interceptorServiceData.setCode(FlowControlInterceptorService.class.getName());
interceptorServiceData.setName("FlowControlInterceptor");
interceptorServiceData.addDepends(interceptorServiceData.createDependsMetaData("Test", "Semaphore"));
ServiceManagerFactory.registerService("Test", interceptorServiceData);
FlowControlInterceptorService interceptor = (FlowControlInterceptorService) ServiceManagerFactory.getService("Test", "FlowControlInterceptor");
final DefaultSemaphoreService semaphore = new DefaultSemaphoreService();
ServiceManagerFactory.registerService("Test", "Semaphore", semaphore);
try {
ServiceManagerFactory.findManager("Test").createAllService();
interceptor.setSemaphoreServiceName(new ServiceName("Test", "Semaphore"));
semaphore.setResourceCapacity(2);
ServiceManagerFactory.findManager("Test").startAllService();
class Counter {
public volatile int count;
public boolean isAssertFail;
}
final Counter counter = new Counter();
final InterceptorChain chain = new DefaultThreadLocalInterceptorChain(new DefaultInterceptorChainList(new Interceptor[] { interceptor }), new Invoker() {
public Object invoke(InvocationContext context) throws Throwable {
try {
synchronized (counter) {
counter.count++;
}
Thread.sleep(new Random().nextInt(100));
return "test";
} finally {
synchronized (counter) {
counter.count--;
}
}
}
});
Runnable runner = new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
counter.isAssertFail |= counter.count > semaphore.getResourceCapacity();
try {
chain.invokeNext(new DefaultMethodInvocationContext());
} catch (Throwable th) {
}
counter.isAssertFail |= counter.count > semaphore.getResourceCapacity();
}
}
};
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(runner);
}
Random random = new Random();
for (int i = 0; i < threads.length; i++) {
threads[i].start();
Thread.sleep(random.nextInt(100));
}
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
assertFalse(counter.isAssertFail);
} finally {
ServiceManagerFactory.findManager("Test").stopAllService();
ServiceManagerFactory.findManager("Test").destroyAllService();
ServiceManagerFactory.unregisterManager("Test");
}
}
use of jp.ossc.nimbus.service.semaphore.DefaultSemaphoreService in project nimbus by nimbus-org.
the class FlowControlInterceptorServiceTest method test3.
public void test3() throws Throwable {
ServiceManagerFactory.registerManager("Test");
final ServiceMetaData interceptorServiceData = new ServiceMetaData();
interceptorServiceData.setCode(FlowControlInterceptorService.class.getName());
interceptorServiceData.setName("FlowControlInterceptor");
interceptorServiceData.addDepends(interceptorServiceData.createDependsMetaData("Test", "Semaphore"));
ServiceManagerFactory.registerService("Test", interceptorServiceData);
FlowControlInterceptorService interceptor = (FlowControlInterceptorService) ServiceManagerFactory.getService("Test", "FlowControlInterceptor");
final DefaultSemaphoreService semaphore = new DefaultSemaphoreService();
ServiceManagerFactory.registerService("Test", "Semaphore", semaphore);
try {
ServiceManagerFactory.findManager("Test").createAllService();
interceptor.setSemaphoreServiceName(new ServiceName("Test", "Semaphore"));
interceptor.setTimeout(200l);
interceptor.setFailToObtainSemaphore(false);
semaphore.setResourceCapacity(1);
ServiceManagerFactory.findManager("Test").startAllService();
final InterceptorChain chain = new DefaultThreadLocalInterceptorChain(new DefaultInterceptorChainList(new Interceptor[] { interceptor }), new Invoker() {
public Object invoke(InvocationContext context) throws Throwable {
Thread.sleep(500);
return "test";
}
});
Runnable runner = new Runnable() {
public void run() {
try {
chain.invokeNext(new DefaultMethodInvocationContext());
} catch (Throwable th) {
}
}
};
Thread thread = new Thread(runner);
thread.start();
Thread.sleep(100);
assertNull(chain.invokeNext(new DefaultMethodInvocationContext()));
thread.join();
} finally {
ServiceManagerFactory.findManager("Test").stopAllService();
ServiceManagerFactory.findManager("Test").destroyAllService();
ServiceManagerFactory.unregisterManager("Test");
}
}
Aggregations