Revision e78140b5
Added by Cherian Mathew almost 9 years ago
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java | ||
---|---|---|
18 | 18 |
import org.springframework.transaction.PlatformTransactionManager; |
19 | 19 |
import org.springframework.transaction.TransactionStatus; |
20 | 20 |
|
21 |
import eu.etaxonomy.cdm.api.cache.ICachedCommonService; |
|
22 | 21 |
import eu.etaxonomy.cdm.api.conversation.ConversationHolder; |
23 | 22 |
import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; |
24 | 23 |
import eu.etaxonomy.cdm.ext.geo.IEditGeoService; |
24 |
import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService; |
|
25 | 25 |
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; |
26 | 26 |
|
27 | 27 |
|
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java | ||
---|---|---|
27 | 27 |
import eu.etaxonomy.cdm.api.application.CdmApplicationController; |
28 | 28 |
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; |
29 | 29 |
import eu.etaxonomy.cdm.api.application.RemotingMonitoredGenericApplicationContext; |
30 |
import eu.etaxonomy.cdm.api.cache.CdmModelCacher; |
|
31 | 30 |
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; |
32 | 31 |
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor; |
33 | 32 |
import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor; |
33 |
import eu.etaxonomy.taxeditor.remoting.cache.CdmModelCacher; |
|
34 | 34 |
import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; |
35 | 35 |
import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager; |
36 | 36 |
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; |
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java | ||
---|---|---|
13 | 13 |
import java.util.Collection; |
14 | 14 |
import java.util.List; |
15 | 15 |
|
16 |
import org.springframework.beans.factory.annotation.Autowired; |
|
17 |
import org.springframework.stereotype.Component; |
|
18 |
|
|
19 |
import eu.etaxonomy.cdm.api.cache.CdmTransientEntityCacher; |
|
20 |
import eu.etaxonomy.cdm.api.service.ICommonService; |
|
21 |
import eu.etaxonomy.cdm.api.service.IService; |
|
22 | 16 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
23 |
import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
|
|
17 |
import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
|
|
24 | 18 |
|
25 | 19 |
|
26 | 20 |
/** |
... | ... | |
31 | 25 |
|
32 | 26 |
public class CdmEntitySession<T extends CdmBase> implements ICdmEntitySession<T> { |
33 | 27 |
|
34 |
|
|
28 |
|
|
35 | 29 |
private CdmEntitySessionManager cdmEntitySessionManager; |
36 |
|
|
37 |
private ISessionEventListener sessionOwner; |
|
38 |
|
|
39 |
private CdmTransientEntityCacher cdmTransientEntityCacher;
|
|
40 |
|
|
41 |
private List<T> rootEntities; |
|
42 |
|
|
30 |
|
|
31 |
private final ISessionEventListener sessionOwner;
|
|
32 |
|
|
33 |
private final CdmTransientEntityCacher cdmTransientEntityCacher;
|
|
34 |
|
|
35 |
private final List<T> rootEntities;
|
|
36 |
|
|
43 | 37 |
CdmEntitySession(ISessionEventListener sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) { |
44 | 38 |
this.sessionOwner = sessionOwner; |
45 | 39 |
this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager); |
46 | 40 |
this.rootEntities = new ArrayList<T>(); |
47 |
|
|
41 |
|
|
48 | 42 |
cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this); |
49 | 43 |
} |
50 | 44 |
|
51 |
|
|
45 |
|
|
52 | 46 |
/* (non-Javadoc) |
53 | 47 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(T) |
54 | 48 |
*/ |
55 | 49 |
@Override |
56 |
public <T extends Object> T load(T obj) {
|
|
57 |
return (T) cdmTransientEntityCacher.load(obj,true);
|
|
50 |
public <T extends Object> T load(T obj) { |
|
51 |
return cdmTransientEntityCacher.load(obj,true); |
|
58 | 52 |
} |
59 | 53 |
|
60 | 54 |
|
... | ... | |
62 | 56 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(T) |
63 | 57 |
*/ |
64 | 58 |
@Override |
65 |
public <T extends CdmBase> T load(T cdmBase) {
|
|
59 |
public <T extends CdmBase> T load(T cdmBase) { |
|
66 | 60 |
return (T)cdmTransientEntityCacher.load(cdmBase,true); |
67 | 61 |
} |
68 | 62 |
|
... | ... | |
71 | 65 |
*/ |
72 | 66 |
@Override |
73 | 67 |
public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList) { |
74 |
|
|
68 |
|
|
75 | 69 |
return cdmTransientEntityCacher.load(cdmBaseList,true); |
76 | 70 |
} |
77 |
|
|
71 |
|
|
78 | 72 |
/* (non-Javadoc) |
79 | 73 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest() |
80 | 74 |
*/ |
81 | 75 |
@Override |
82 | 76 |
public void setEntitiesAsLatest() { |
83 |
List<CdmBase> entities = cdmTransientEntityCacher.getAllEntities(); |
|
84 |
for(CdmBase entity : entities) { |
|
85 |
cdmEntitySessionManager.setEntityAsLatest(entity); |
|
86 |
} |
|
77 |
//FIXME:Remoting need to think more about whether we really need this |
|
78 |
// List<CdmBase> entities = cdmTransientEntityCacher.getAllEntities(); |
|
79 |
// for(CdmBase entity : entities) { |
|
80 |
// cdmEntitySessionManager.setEntityAsLatest(entity); |
|
81 |
// } |
|
87 | 82 |
} |
88 |
|
|
89 |
|
|
83 |
|
|
84 |
|
|
90 | 85 |
/* (non-Javadoc) |
91 | 86 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose() |
92 | 87 |
*/ |
... | ... | |
95 | 90 |
rootEntities.clear(); |
96 | 91 |
cdmTransientEntityCacher.dispose(); |
97 | 92 |
} |
98 |
|
|
99 |
|
|
93 |
|
|
94 |
|
|
100 | 95 |
|
101 | 96 |
} |
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java | ||
---|---|---|
16 | 16 |
import org.apache.log4j.Logger; |
17 | 17 |
import org.springframework.stereotype.Component; |
18 | 18 |
|
19 |
import eu.etaxonomy.cdm.api.cache.CdmTransientEntityCacher; |
|
20 | 19 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
21 | 20 |
|
22 | 21 |
/** |
... | ... | |
24 | 23 |
* @date 16 Oct 2014 |
25 | 24 |
* |
26 | 25 |
*/ |
27 |
@Component("cdmEntitySessionManager")
|
|
26 |
@Component |
|
28 | 27 |
public class CdmEntitySessionManager implements ICdmEntitySessionManager { |
29 | 28 |
private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class); |
30 | 29 |
|
31 |
private Map<ISessionEventListener, CdmEntitySession> ownerSessionMap =
|
|
30 |
private final Map<ISessionEventListener, CdmEntitySession> ownerSessionMap =
|
|
32 | 31 |
new HashMap<ISessionEventListener, CdmEntitySession>(); |
33 |
|
|
34 |
// private HashMap<String, HashSet<CdmClientBase<T>>> entitiesMap = |
|
35 |
// new HashMap<String, HashSet<CdmClientBase<T>>>(); |
|
36 |
|
|
37 |
private CdmTransientEntityCacher latestEntityCacher = |
|
38 |
new CdmTransientEntityCacher("latestEntityCacher", this); |
|
39 |
|
|
32 |
|
|
33 |
|
|
40 | 34 |
private ICdmEntitySession activeSession; |
41 | 35 |
|
42 |
|
|
43 |
|
|
36 |
|
|
37 |
public CdmEntitySessionManager() { |
|
38 |
|
|
39 |
} |
|
40 |
|
|
44 | 41 |
private ICdmEntitySession newSession(ISessionEventListener sessionOwner, boolean setAsActive) { |
45 | 42 |
CdmEntitySession session = ownerSessionMap.get(sessionOwner); |
46 |
if(session == null) {
|
|
43 |
if(session == null) { |
|
47 | 44 |
session = new CdmEntitySession(sessionOwner, this); |
48 | 45 |
addToOwnerSessionMap(sessionOwner, session); |
49 | 46 |
} |
50 |
|
|
47 |
|
|
51 | 48 |
if(setAsActive) { |
52 | 49 |
activeSession = session; |
53 |
}
|
|
50 |
} |
|
54 | 51 |
return session; |
55 | 52 |
} |
56 |
|
|
53 |
|
|
57 | 54 |
/* (non-Javadoc) |
58 | 55 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener) |
59 | 56 |
*/ |
... | ... | |
69 | 66 |
} |
70 | 67 |
activeSession = session; |
71 | 68 |
} |
72 |
|
|
69 |
|
|
73 | 70 |
/* (non-Javadoc) |
74 | 71 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.taxeditor.session.ISessionEventListener, T) |
75 | 72 |
*/ |
76 | 73 |
@Override |
77 | 74 |
public <T extends Object> T load(ISessionEventListener sessionOwner, T obj) { |
78 |
ICdmEntitySession session = newSession(sessionOwner,true);
|
|
75 |
ICdmEntitySession session = newSession(sessionOwner,true); |
|
79 | 76 |
return (T) session.load(obj); |
80 | 77 |
} |
81 |
|
|
78 |
|
|
82 | 79 |
/* (non-Javadoc) |
83 | 80 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T) |
84 | 81 |
*/ |
... | ... | |
99 | 96 |
ICdmEntitySession session = newSession(sessionOwner,true); |
100 | 97 |
return (T)session.load(cdmBase); |
101 | 98 |
} |
102 |
|
|
99 |
|
|
103 | 100 |
/* (non-Javadoc) |
104 | 101 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T) |
105 | 102 |
*/ |
... | ... | |
110 | 107 |
} |
111 | 108 |
return (T)activeSession.load(cdmBase); |
112 | 109 |
} |
113 |
|
|
110 |
|
|
114 | 111 |
|
115 | 112 |
/* (non-Javadoc) |
116 | 113 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.taxeditor.session.ISessionEventListener, java.util.Collection) |
... | ... | |
120 | 117 |
ICdmEntitySession session = newSession(sessionOwner,true); |
121 | 118 |
return session.load(cdmBaseList); |
122 | 119 |
} |
123 |
|
|
124 |
|
|
120 |
|
|
121 |
|
|
125 | 122 |
/* (non-Javadoc) |
126 | 123 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection) |
127 | 124 |
*/ |
... | ... | |
133 | 130 |
return activeSession.load(cdmBaseList); |
134 | 131 |
} |
135 | 132 |
|
136 |
|
|
133 |
|
|
137 | 134 |
/* (non-Javadoc) |
138 | 135 |
* @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener) |
139 | 136 |
*/ |
... | ... | |
144 | 141 |
logger.info("No Session connected to owner, nothing to dispose"); |
145 | 142 |
return; |
146 | 143 |
} |
147 |
session.dispose();
|
|
144 |
session.dispose(); |
|
148 | 145 |
} |
149 |
|
|
146 |
|
|
150 | 147 |
void addToOwnerSessionMap(ISessionEventListener owner, CdmEntitySession session) { |
151 | 148 |
ownerSessionMap.put(owner, session); |
152 | 149 |
} |
153 |
|
|
154 | 150 |
|
155 |
void setEntityAsLatest(CdmBase cdmBase) { |
|
156 |
latestEntityCacher.put(cdmBase); |
|
157 |
} |
|
158 |
|
|
159 |
void promoteSessionEntitiesToLatest(ISessionEventListener owner) { |
|
160 |
ICdmEntitySession session = ownerSessionMap.get(owner); |
|
161 |
if(session != null) { |
|
162 |
session.setEntitiesAsLatest(); |
|
163 |
} |
|
164 |
} |
|
165 | 151 |
|
166 | 152 |
} |
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import java.util.Collection; |
4 | 4 |
|
5 |
import org.springframework.stereotype.Component; |
|
6 |
|
|
7 |
import eu.etaxonomy.cdm.api.service.IService; |
|
8 | 5 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
9 |
import eu.etaxonomy.taxeditor.session.ICdmEntitySession; |
|
10 | 6 |
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; |
11 | 7 |
import eu.etaxonomy.taxeditor.session.ISessionEventListener; |
12 | 8 |
|
... | ... | |
15 | 11 |
|
16 | 12 |
|
17 | 13 |
@Override |
18 |
public void bind(ISessionEventListener sessionOwner) {
|
|
14 |
public void bind(ISessionEventListener sessionOwner) { |
|
19 | 15 |
} |
20 | 16 |
|
21 | 17 |
@Override |
... | ... | |
52 | 48 |
|
53 | 49 |
@Override |
54 | 50 |
public void dispose(ISessionEventListener owner) { |
55 |
|
|
51 |
|
|
56 | 52 |
} |
57 | 53 |
|
58 | 54 |
} |
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java | ||
---|---|---|
60 | 60 |
import org.jboss.logging.Logger; |
61 | 61 |
|
62 | 62 |
import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration; |
63 |
import eu.etaxonomy.cdm.api.cache.CachedCommonServiceImpl.CollectionField; |
|
64 |
import eu.etaxonomy.cdm.api.cache.ICachedCommonService; |
|
65 | 63 |
import eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException; |
64 |
import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService; |
|
65 |
import eu.etaxonomy.taxeditor.remoting.cache.CachedCommonServiceImpl.CollectionField; |
|
66 | 66 |
|
67 | 67 |
/** |
68 | 68 |
* Base class implementing {@link org.hibernate.collection.spi.PersistentCollection} |
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java | ||
---|---|---|
40 | 40 |
import org.jboss.logging.Logger; |
41 | 41 |
|
42 | 42 |
import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration; |
43 |
import eu.etaxonomy.cdm.api.cache.ICachedCommonService; |
|
44 | 43 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
44 |
import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService; |
|
45 | 45 |
|
46 | 46 |
/** |
47 | 47 |
* Convenience base class for lazy initialization handlers. Centralizes the basic plumbing of doing lazy |
Also available in: Unified diff
refactoring due to change in cache package name