1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.student.common_test_tester;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertNotNull;
20 import static org.junit.Assert.assertTrue;
21
22 import java.lang.reflect.Method;
23
24 import org.aopalliance.aop.Advice;
25 import org.apache.log4j.Logger;
26 import org.aspectj.lang.ProceedingJoinPoint;
27 import org.junit.Test;
28 import org.kuali.student.common.test.spring.AbstractServiceTest;
29 import org.kuali.student.common.test.spring.Client;
30 import org.kuali.student.common.test.spring.Dao;
31 import org.kuali.student.common.test.spring.Daos;
32 import org.kuali.student.common.test.spring.IdToObjectEhcacheAdvice;
33 import org.kuali.student.common.test.spring.PersistenceFileLocation;
34 import org.kuali.student.common_test_tester.support.MyService;
35 import org.springframework.aop.aspectj.AspectInstanceFactory;
36 import org.springframework.aop.aspectj.AspectJAroundAdvice;
37 import org.springframework.aop.aspectj.AspectJExpressionPointcut;
38 import org.springframework.aop.aspectj.AspectJPointcutAdvisor;
39 import org.springframework.aop.aspectj.SingletonAspectInstanceFactory;
40 import org.springframework.aop.framework.ProxyFactory;
41
42 @Daos( {
43 @Dao(value = "org.kuali.student.common_test_tester.support.MyDaoImpl", testDataFile = "classpath:META-INF/load-my-beans.xml",testSqlFile="classpath:test.sql"),
44 @Dao("org.kuali.student.common_test_tester.support.OtherDaoImpl") })
45 @PersistenceFileLocation("classpath:META-INF/test-persistence.xml")
46 public class ServiceCommonTest extends AbstractServiceTest {
47 final Logger LOG = Logger.getLogger(ServiceCommonTest.class);
48 @Client(value="org.kuali.student.common_test_tester.support.MyServiceImpl",additionalContextFile="classpath:test-my-additional-context.xml")
49 private MyService client;
50
51 @Test
52 public void test1() {
53 LOG.info(System.getProperty("ks.test.daoImplClasses"));
54 assertNotNull(client.saveString("la la la"));
55 }
56
57 @Test
58 public void testDaoLoader(){
59 String value = "loaded-value";
60 assertEquals(value, client.findValueFromValue(value));
61 }
62
63 @Test
64 public void testClientCaching() {
65
66 MyService cachedClient = client;
67 try {
68
69 ProxyFactory factory = new ProxyFactory(client);
70 factory.addInterface(MyService.class);
71
72
73 Advice cacheAdvice = new IdToObjectEhcacheAdvice("cachename");
74 AspectInstanceFactory aif = new SingletonAspectInstanceFactory(
75 cacheAdvice);
76
77
78 Method method = IdToObjectEhcacheAdvice.class.getMethod(
79 "getFromCache", ProceedingJoinPoint.class);
80
81 AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
82 pointcut
83 .setExpression("execution(* org.kuali.student.common_test_tester.support.MyService.find*(..))");
84
85 AspectJAroundAdvice advice = new AspectJAroundAdvice(method,
86 pointcut, aif);
87
88 AspectJPointcutAdvisor advisor = new AspectJPointcutAdvisor(advice);
89
90 factory.addAdvisor(advisor);
91
92
93 method = IdToObjectEhcacheAdvice.class.getMethod("invalidateCache",
94 ProceedingJoinPoint.class);
95 pointcut = new AspectJExpressionPointcut();
96 pointcut
97 .setExpression("execution(* org.kuali.student.common_test_tester.support.MyService.update*(..))");
98 advice = new AspectJAroundAdvice(method, pointcut, aif);
99 advisor = new AspectJPointcutAdvisor(advice);
100 factory.addAdvisor(advisor);
101
102 cachedClient = (MyService) factory.getProxy();
103 } catch (SecurityException e) {
104 LOG.error(e);
105 } catch (NoSuchMethodException e) {
106 LOG.error(e);
107 }
108
109 String id = cachedClient.saveString("Cache me!");
110 cachedClient.findStringId(id);
111
112 assertNotNull(cachedClient.findStringId(id));
113 assertTrue(cachedClient.updateValue(id, "Updated!!!"));
114
115 assertNotNull(cachedClient.findStringId(id));
116 }
117 }