use of jp.ossc.nimbus.service.aop.Invoker 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.aop.Invoker 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.aop.Invoker 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");
}
}
use of jp.ossc.nimbus.service.aop.Invoker in project nimbus by nimbus-org.
the class MethodAsynchronousInterceptorServiceTest method test2.
public void test2() throws Throwable {
ServiceManagerFactory.registerManager("Test");
MethodAsynchronousInterceptorService interceptor = new MethodAsynchronousInterceptorService();
ServiceManagerFactory.registerService("Test", "MethodAsynchronousInterceptor", interceptor);
try {
ServiceManagerFactory.findManager("Test").createAllService();
interceptor.setResponseTimeout(200);
ServiceManagerFactory.findManager("Test").startAllService();
try {
new DefaultInterceptorChain(new DefaultInterceptorChainList(new Interceptor[] { interceptor }), new Invoker() {
public Object invoke(InvocationContext context) throws Throwable {
Thread.sleep(500);
return "test";
}
}).invokeNext(new DefaultMethodInvocationContext(new Integer(100), Integer.class.getMethod("toString", (Class[]) null), null));
fail();
} catch (AsynchronousTimeoutException e) {
}
} finally {
ServiceManagerFactory.findManager("Test").stopAllService();
ServiceManagerFactory.findManager("Test").destroyAllService();
ServiceManagerFactory.unregisterManager("Test");
}
}
use of jp.ossc.nimbus.service.aop.Invoker in project nimbus by nimbus-org.
the class MethodAsynchronousInterceptorServiceTest method test4.
public void test4() throws Throwable {
ServiceManagerFactory.registerManager("Test");
final ServiceMetaData interceptorServiceData = new ServiceMetaData();
interceptorServiceData.setCode(MethodAsynchronousInterceptorService.class.getName());
interceptorServiceData.setName("MethodAsynchronousInterceptor");
interceptorServiceData.addDepends(interceptorServiceData.createDependsMetaData("Test", "Queue"));
ServiceManagerFactory.registerService("Test", interceptorServiceData);
MethodAsynchronousInterceptorService interceptor = (MethodAsynchronousInterceptorService) ServiceManagerFactory.getService("Test", "MethodAsynchronousInterceptor");
final ServiceMetaData queueServiceData = new ServiceMetaData();
queueServiceData.setCode(DefaultQueueService.class.getName());
queueServiceData.setName("Queue");
queueServiceData.setInstance(ServiceMetaData.INSTANCE_TYPE_THREADLOCAL);
ServiceManagerFactory.registerService("Test", queueServiceData);
try {
ServiceManagerFactory.findManager("Test").createAllService();
interceptor.setResponseQueueServiceName(new ServiceName("Test", "Queue"));
interceptor.setInvokerThreadSize(3);
interceptor.setReturnResponse(false);
ServiceManagerFactory.findManager("Test").startAllService();
for (int i = 0; i < 3; i++) {
Object ret = new DefaultInterceptorChain(new DefaultInterceptorChainList(new Interceptor[] { interceptor }), new Invoker() {
public Object invoke(InvocationContext context) throws Throwable {
Thread.sleep(500);
return "test";
}
}).invokeNext(new DefaultMethodInvocationContext(new Integer(i), Integer.class.getMethod("toString", (Class[]) null), null));
assertNull(ret);
}
Queue queue = (Queue) ServiceManagerFactory.getServiceObject("Test", "Queue");
for (int i = 0; i < 3; i++) {
AsynchronousResponse response = (AsynchronousResponse) queue.get();
assertNotNull(response);
assertEquals("test", response.getReturnObject());
}
assertNull(queue.get(500));
} finally {
ServiceManagerFactory.findManager("Test").stopAllService();
ServiceManagerFactory.findManager("Test").destroyAllService();
ServiceManagerFactory.unregisterManager("Test");
}
}
Aggregations