From 30f5640c849a70f40c41989e3caa790892424b41 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Thu, 15 Oct 2015 12:17:44 +0200 Subject: [PATCH] =?utf8?q?added=20cache=20(back!)=20for=20user=20status=20?= =?utf8?q?and=20let=20the=20status=20being=20updated=20on=20registration?= =?utf8?q?=20Signed-off-by:Roland=20H=C3=A4der=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../validator/user/UserIdValidator.java | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/org/mxchange/addressbook/validator/user/UserIdValidator.java b/src/org/mxchange/addressbook/validator/user/UserIdValidator.java index e8836f6d..a3ff2578 100644 --- a/src/org/mxchange/addressbook/validator/user/UserIdValidator.java +++ b/src/org/mxchange/addressbook/validator/user/UserIdValidator.java @@ -17,7 +17,10 @@ package org.mxchange.addressbook.validator.user; import java.text.MessageFormat; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import javax.ejb.EJB; +import javax.enterprise.event.Observes; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; @@ -25,6 +28,8 @@ import javax.faces.validator.FacesValidator; import javax.faces.validator.Validator; import javax.faces.validator.ValidatorException; import org.mxchange.jcoreee.validator.number.BaseLongValidator; +import org.mxchange.jusercore.events.registration.UserRegisteredEvent; +import org.mxchange.jusercore.model.user.User; import org.mxchange.jusercore.model.user.UserSessionBeanRemote; /** @@ -46,6 +51,19 @@ public class UserIdValidator extends BaseLongValidator implements Validator { @EJB (mappedName = "ejb/stateless-user") private UserSessionBeanRemote userBean; + /** + * Cached user status + */ + private final ConcurrentMap cachedStatus; + + /** + * Default constructor + */ + public UserIdValidator () { + // Init map + this.cachedStatus = new ConcurrentHashMap<>(0); + } + @Override public void validate (final FacesContext context, final UIComponent component, final Object value) throws ValidatorException { // Trace message @@ -60,8 +78,20 @@ public class UserIdValidator extends BaseLongValidator implements Validator { // Cast value Long number = (Long) value; - // Get status - Boolean ifUserExists = this.userBean.ifUserIdExists(number); + // Define variable + Boolean ifUserExists = false; + + // Is a map entry there? + if (this.cachedStatus.containsKey(number)) { + // Get from cache + ifUserExists = this.cachedStatus.get(number); + } else { + // Get status + ifUserExists = this.userBean.ifUserIdExists(number); + + // Add to cache + this.cachedStatus.put(number, ifUserExists); + } // Is the address book id valid? if (!ifUserExists) { @@ -72,4 +102,32 @@ public class UserIdValidator extends BaseLongValidator implements Validator { // Trace message //this.getLogger().logTrace("validate: EXIT!"); //NOI18N } + + /** + * Event fired when the user registration is complete + *

+ * @param event User registration event + */ + public void afterRegistration (final @Observes UserRegisteredEvent event) { + // event should not be null + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getUser() == null) { + // Throw NPE again + throw new NullPointerException("event.user is null"); //NOI18N + } else if (event.getUser().getUserId() == null) { + // userId is null + throw new NullPointerException("event.user.userId is null"); //NOI18N + } else if (event.getUser().getUserId() < 1) { + // Not avalid id + throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUser(), event.getUser().getUserId())); //NOI18N + } + + // Get user instance + User registeredUser = event.getUser(); + + // Update cache + this.cachedStatus.put(registeredUser.getUserId(), Boolean.TRUE); + } } -- 2.39.5