/*
- * Copyright (C) 2016 Roland Häder
+ * Copyright (C) 2016, 2017 Roland Häder
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
*/
package org.mxchange.pizzaapplication.beans.mobileprovider;
+import fish.payara.cdi.jsr107.impl.NamedCache;
import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import javax.annotation.PostConstruct;
-import javax.enterprise.context.SessionScoped;
+import javax.cache.Cache;
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
-import javax.faces.view.facelets.FaceletException;
+import javax.inject.Inject;
import javax.inject.Named;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
import org.mxchange.jphone.events.mobileprovider.added.AdminAddedMobileProviderEvent;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
+import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
+import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
import org.mxchange.pizzaapplication.beans.BasePizzaController;
/**
* @author Roland Häder<roland@mxchange.org>
*/
@Named ("mobileProviderController")
-@SessionScoped
+@RequestScoped
public class PizzaMobileProviderWebRequestBean extends BasePizzaController implements PizzaMobileProviderWebRequestController {
/**
private static final long serialVersionUID = 15_869_423_671_950_276L;
/**
- * "Cached" list of mobile providers
+ * Remote EJB for mobile providers (regular)
*/
- private List<MobileProvider> mobileProviders;
+ @EJB (lookup = "java:global/jfinancials-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
+ private MobileProviderSingletonBeanRemote mobileProviderBean;
/**
- * Remote EJB for mobile providers (regular)
+ * "Cached" list of mobile providers
*/
- private MobileProviderSingletonBeanRemote mobileRemoteBean;
+ @Inject
+ @NamedCache (cacheName = "mobileProviderCache")
+ private Cache<Long, MobileProvider> mobileProviderCache;
/**
* Default constructor
*/
public PizzaMobileProviderWebRequestBean () {
+ // Call super constructor
+ super();
}
/**
}
// Add it to the list
- this.mobileProviders.add(event.getAddedMobileProvider());
+ this.mobileProviderCache.put(event.getAddedMobileProvider().getProviderId(), event.getAddedMobileProvider());
}
@Override
@SuppressWarnings ("ReturnOfCollectionOrArrayField")
public List<MobileProvider> allMobileProviders () {
- return this.mobileProviders;
+ // Init list
+ List<MobileProvider> list = new LinkedList<>();
+
+ // Get iterator
+ Iterator<Cache.Entry<Long, MobileProvider>> iterator = this.mobileProviderCache.iterator();
+
+ // Loop over all
+ while (iterator.hasNext()) {
+ // Get next entry
+ final Cache.Entry<Long, MobileProvider> next = iterator.next();
+
+ // Add value to list
+ list.add(next.getValue());
+ }
+
+ // Return it
+ return list;
}
/**
*/
@PostConstruct
public void init () {
- // Try it
- try {
- // Get initial context
- Context context = new InitialContext();
-
- // Try to lookup the beans
- this.mobileRemoteBean = (MobileProviderSingletonBeanRemote) context.lookup("java:global/pizzaservice-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote"); //NOI18N
- } catch (final NamingException e) {
- // Throw it again
- throw new FaceletException(e);
- }
+ // Is cache there?
+ if (!this.mobileProviderCache.iterator().hasNext()) {
+ // Get whole list
+ List<MobileProvider> list = this.mobileProviderBean.allMobileProviders();
+
+ // Add all
+ for (final Iterator<MobileProvider> iterator = list.iterator(); iterator.hasNext();) {
+ // Get next element
+ final MobileProvider next = iterator.next();
- // Init list of mobile providers
- this.mobileProviders = this.mobileRemoteBean.allMobileProvider();
+ // Add it to cache
+ this.mobileProviderCache.put(next.getProviderId(), next);
+ }
+ }
}
}