/* * Copyright 2005 GigaSpaces Technologies Ltd. All rights reserved. * * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED INCLUDING BUT NOT LIMITED TO WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT. GIGASPACES WILL NOT BE LIABLE FOR ANY DAMAGE OR * LOSS IN CONNECTION WITH THE SOFTWARE. */ package org.springmodules.javaspaces.gigaspaces; import java.io.Serializable; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.support.AopUtils; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import org.springframework.util.StopWatch; import org.springmodules.beans.ITestBean; import org.springmodules.javaspaces.DelegatingWorker; // test excluded from the build as it keeps failing on the build server public class GigaSpacesRemotingTest extends AbstractDependencyInjectionSpringContextTests { //member for gigaspaces template private GigaSpacesTemplate template; //The delegator worker private DelegatingWorker iTestBeanWorker; private Thread itbThread; protected void onSetUp() throws Exception { template = (GigaSpacesTemplate)applicationContext.getBean("gigaSpacesTemplate"); iTestBeanWorker = (DelegatingWorker)applicationContext.getBean("testBeanWorker"); createWorkerThreads(); } protected void createWorkerThreads() { itbThread = new Thread(iTestBeanWorker); itbThread.start(); } protected void killWorkerThreads() { iTestBeanWorker.stop(); // TODO why is this necessary? itbThread.stop(); } protected void onTearDown() throws Exception { killWorkerThreads(); } public void testSuccessfulInvocations() throws Exception { //template.clean(); ITestBean proxy = (ITestBean)applicationContext.getBean("proxy"); for (int i = 0; i < 2; i++) { String name = "john" + i; proxy.setName(name); assertEquals(name, proxy.getName()); } } protected String[] getConfigLocations() { return new String[] {/*"/config/common.xml",*/ "/config/gigaspaces_remoting.xml" }; // return new String[] {"/config/common.xml"}; } public void testLazyTest() throws Throwable { //template.clean(); ITestBean proxy = (ITestBean)applicationContext.getBean("proxy"); GigaSpacesInterceptor gigaSpacesInterceptor = (GigaSpacesInterceptor)applicationContext.getBean("javaSpaceInterceptor"); gigaSpacesInterceptor.setSynchronous(false); ITestBean lazyResult = proxy.getSpouse(); System.out.println("should not be initialized"); System.out.println(lazyResult.getClass()); System.out.println(lazyResult.hashCode()); System.out.println("should not be initialized"); System.out.println("classname is " + lazyResult.getClass()); assertTrue(AopUtils.isCglibProxyClass(lazyResult.getClass())); System.out.println("The lazy result"+lazyResult); System.out.println("should be initialized"); System.out.println("the name " +lazyResult.getName()); assertEquals("kerry", lazyResult.getName()); } public void testAsynchInterceptor() throws Throwable { template.clean(); ITestBean proxy = (ITestBean)applicationContext.getBean("proxy"); GigaSpacesInterceptor gigaSpacesInterceptor = (GigaSpacesInterceptor)applicationContext.getBean("javaSpaceInterceptor"); gigaSpacesInterceptor.setSynchronous(false); try { proxy.getName(); fail("cglib can't proxy final classes"); } catch (IllegalArgumentException e) { // can't proxy strings // expected } } public class PerformanceMonitorInterceptor implements MethodInterceptor, Serializable { public Object invoke(MethodInvocation invocation) throws Throwable { String name = invocation.getMethod().getDeclaringClass().getName() + "." + invocation.getMethod().getName(); StopWatch sw = new StopWatch(name); sw.start(name); try { return invocation.proceed(); } finally { sw.stop(); System.out.println(sw.shortSummary()); } } } }