1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package it.openutils.spring.rmibernate.client.aspects;
18
19 import it.openutils.spring.rmibernate.client.pagination.Paginator;
20 import it.openutils.spring.rmibernate.shared.managers.HibernateLazyService;
21
22 import java.io.Serializable;
23
24 import net.sf.cglib.proxy.LazyLoader;
25
26
27
28
29
30
31
32 public class HibernateLazyLoaderAspect implements LazyLoader, Serializable
33 {
34
35
36
37
38 private static final long serialVersionUID = -365731708075101363L;
39
40 private static ThreadLocal<Paginator> paginator = new ThreadLocal<Paginator>();
41
42 private String className;
43
44 private String fieldName;
45
46 private Serializable id;
47
48 private Object localReference;
49
50 private HibernateLazyService hibernateLazyService;
51
52
53
54
55
56
57
58 public HibernateLazyLoaderAspect(String className, String fieldName, Serializable id, HibernateLazyService hibernateLazyService)
59 {
60 this.className = className;
61 this.fieldName = fieldName;
62 this.id = id;
63 this.hibernateLazyService = hibernateLazyService;
64 }
65
66
67
68
69
70
71 public static void setPagination(int from, int size)
72 {
73 paginator.set(new Paginator(from, size));
74 }
75
76
77
78
79 public static void resetPagination()
80 {
81 paginator.set(null);
82 }
83
84
85
86
87 public Object loadObject() throws Exception
88 {
89
90
91 if (paginator.get() != null)
92 {
93 return hibernateLazyService.invoke(className, fieldName, id, paginator.get().getFrom(), paginator.get().getSize());
94 }
95 if (localReference == null)
96 {
97 localReference = hibernateLazyService.invoke(className, fieldName, id);
98 }
99 return localReference;
100 }
101
102 }