@@ -132,13 +132,18 @@ public void registerNewSession(String sessionId, Object principal) {
132
132
sessionIds .put (sessionId ,
133
133
new SessionInformation (principal , sessionId , new Date ()));
134
134
135
- Set <String > sessionsUsedByPrincipal = principals .computeIfAbsent (principal , key -> new CopyOnWriteArraySet <>());
136
- sessionsUsedByPrincipal .add (sessionId );
135
+ principals .compute (principal , (key , sessionsUsedByPrincipal ) -> {
136
+ if (sessionsUsedByPrincipal == null ) {
137
+ sessionsUsedByPrincipal = new CopyOnWriteArraySet <>();
138
+ }
139
+ sessionsUsedByPrincipal .add (sessionId );
137
140
138
- if (logger .isTraceEnabled ()) {
139
- logger .trace ("Sessions used by '" + principal + "' : "
140
- + sessionsUsedByPrincipal );
141
- }
141
+ if (logger .isTraceEnabled ()) {
142
+ logger .trace ("Sessions used by '" + principal + "' : "
143
+ + sessionsUsedByPrincipal );
144
+ }
145
+ return sessionsUsedByPrincipal ;
146
+ });
142
147
}
143
148
144
149
public void removeSessionInformation (String sessionId ) {
@@ -157,32 +162,29 @@ public void removeSessionInformation(String sessionId) {
157
162
158
163
sessionIds .remove (sessionId );
159
164
160
- Set <String > sessionsUsedByPrincipal = principals .get (info .getPrincipal ());
161
-
162
- if (sessionsUsedByPrincipal == null ) {
163
- return ;
164
- }
165
-
166
- if (logger .isDebugEnabled ()) {
167
- logger .debug ("Removing session " + sessionId
168
- + " from principal's set of registered sessions" );
169
- }
165
+ principals .computeIfPresent (info .getPrincipal (), (key , sessionsUsedByPrincipal ) -> {
166
+ if (logger .isDebugEnabled ()) {
167
+ logger .debug ("Removing session " + sessionId
168
+ + " from principal's set of registered sessions" );
169
+ }
170
170
171
- sessionsUsedByPrincipal .remove (sessionId );
171
+ sessionsUsedByPrincipal .remove (sessionId );
172
172
173
- if (sessionsUsedByPrincipal .isEmpty ()) {
174
- // No need to keep object in principals Map anymore
175
- if (logger .isDebugEnabled ()) {
176
- logger .debug ("Removing principal " + info .getPrincipal ()
177
- + " from registry" );
173
+ if (sessionsUsedByPrincipal .isEmpty ()) {
174
+ // No need to keep object in principals Map anymore
175
+ if (logger .isDebugEnabled ()) {
176
+ logger .debug ("Removing principal " + info .getPrincipal ()
177
+ + " from registry" );
178
+ }
179
+ sessionsUsedByPrincipal = null ;
178
180
}
179
- principals .remove (info .getPrincipal ());
180
- }
181
181
182
- if (logger .isTraceEnabled ()) {
183
- logger .trace ("Sessions used by '" + info .getPrincipal () + "' : "
184
- + sessionsUsedByPrincipal );
185
- }
182
+ if (logger .isTraceEnabled ()) {
183
+ logger .trace ("Sessions used by '" + info .getPrincipal () + "' : "
184
+ + sessionsUsedByPrincipal );
185
+ }
186
+ return sessionsUsedByPrincipal ;
187
+ });
186
188
}
187
189
188
190
}
0 commit comments