You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/10/29 20:21:52 UTC
[11/22] git commit: refactor static classes out of adapters
refactor static classes out of adapters
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/0f4584c4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/0f4584c4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/0f4584c4
Branch: refs/heads/two-dot-o-events
Commit: 0f4584c47a775d97d0b2f3e297e5a5be8b06a31b
Parents: ad0cce9
Author: Shawn Feldman <sf...@apache.org>
Authored: Wed Oct 29 09:50:03 2014 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Wed Oct 29 09:50:03 2014 -0600
----------------------------------------------------------------------
.../usergrid/persistence/entities/Notifier.java | 5 -
.../notifications/ApplicationQueueManager.java | 76 ++++++-----
.../notifications/InactiveDeviceManager.java | 13 +-
.../notifications/NotificationsService.java | 24 +---
.../services/notifications/ProviderAdapter.java | 12 +-
.../notifications/ProviderAdapterFactory.java | 49 ++++++++
.../services/notifications/QueueListener.java | 65 +++++++---
.../services/notifications/TestAdapter.java | 21 +++-
.../notifications/apns/APNsAdapter.java | 126 +++++++------------
.../notifications/apns/EntityPushManager.java | 6 +-
.../apns/ExpiredTokenListener.java | 2 +-
.../services/notifications/gcm/GCMAdapter.java | 32 +++--
.../services/notifiers/NotifiersService.java | 23 ++--
.../notifications/NotifiersServiceIT.java | 33 +----
.../apns/MockSuccessfulProviderAdapter.java | 37 ++----
.../apns/NotificationsServiceIT.java | 43 ++-----
.../gcm/MockSuccessfulProviderAdapter.java | 31 ++---
.../gcm/NotificationsServiceIT.java | 74 -----------
18 files changed, 292 insertions(+), 380 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notifier.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notifier.java b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notifier.java
index ba3f2fc..819ccde 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notifier.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/Notifier.java
@@ -132,10 +132,5 @@ public class Notifier extends TypedEntity {
this.apiKey = apiKey;
}
- @JsonIgnore
- public EntityManager getEntityManager(){return entityManager;}
-
- public void setEntityManager(EntityManager entityManager){ this.entityManager = entityManager;}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/ApplicationQueueManager.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/ApplicationQueueManager.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ApplicationQueueManager.java
index 3fd84a6..11b197c 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/ApplicationQueueManager.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ApplicationQueueManager.java
@@ -39,6 +39,7 @@ import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
+import java.security.Provider;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -61,9 +62,7 @@ public class ApplicationQueueManager {
private final MetricsFactory metricsFactory;
private final String queueName;
- HashMap<Object, Notifier> notifierHashMap; // only retrieve notifiers once
-
- public final Map<String, ProviderAdapter> providerAdapters;
+ HashMap<Object, ProviderAdapter> notifierHashMap; // only retrieve notifiers once
public ApplicationQueueManager(JobScheduler jobScheduler, EntityManager entityManager, QueueManager queueManager, MetricsFactory metricsFactory, Properties properties){
@@ -72,12 +71,7 @@ public class ApplicationQueueManager {
this.jobScheduler = jobScheduler;
this.metricsFactory = metricsFactory;
this.queueName = getQueueNames(properties);
- providerAdapters = new HashMap<String, ProviderAdapter>(3);
- {
- providerAdapters.put("apple", new APNsAdapter());
- providerAdapters.put("google", new GCMAdapter());
- providerAdapters.put("noop", new TestAdapter());
- };
+
}
public boolean scheduleQueueJob(Notification notification) throws Exception{
@@ -106,7 +100,7 @@ public class ApplicationQueueManager {
final AtomicInteger deviceCount = new AtomicInteger(); //count devices so you can make a judgement on batching
final ConcurrentLinkedQueue<String> errorMessages = new ConcurrentLinkedQueue<String>(); //build up list of issues
- final HashMap<Object,Notifier> notifierMap = getNotifierMap();
+ final HashMap<Object,ProviderAdapter> notifierMap = getNotifierMap();
//get devices in querystring, and make sure you have access
if (pathQuery != null) {
@@ -147,9 +141,9 @@ public class ApplicationQueueManager {
//find the device notifier info, match it to the payload
for (Map.Entry<String, Object> entry : payloads.entrySet()) {
- Notifier notifier = notifierMap.get(entry.getKey().toLowerCase());
+ ProviderAdapter adapter = notifierMap.get(entry.getKey().toLowerCase());
now = System.currentTimeMillis();
- String providerId = getProviderId(deviceRef, notifier);
+ String providerId = getProviderId(deviceRef, adapter.getNotifier());
if (providerId != null) {
notifierId = providerId;
notifierKey = entry.getKey().toLowerCase();
@@ -236,10 +230,10 @@ public class ApplicationQueueManager {
* only need to get notifiers once. will reset on next batch
* @return
*/
- public HashMap<Object,Notifier> getNotifierMap(){
+ public HashMap<Object,ProviderAdapter> getNotifierMap(){
if(notifierHashMap == null) {
long now = System.currentTimeMillis();
- notifierHashMap = new HashMap<Object, Notifier>();
+ notifierHashMap = new HashMap<Object, ProviderAdapter>();
Query query = new Query();
query.setCollection("notifiers");
query.setLimit(100);
@@ -251,12 +245,12 @@ public class ApplicationQueueManager {
int count = 0;
while (notifierIterator.hasNext()) {
Notifier notifier = notifierIterator.next();
- notifier.setEntityManager(em);
String name = notifier.getName() != null ? notifier.getName() : "";
UUID uuid = notifier.getUuid() != null ? notifier.getUuid() : UUID.randomUUID();
- notifierHashMap.put(name.toLowerCase(), notifier);
- notifierHashMap.put(uuid, notifier);
- notifierHashMap.put(uuid.toString(), notifier);
+ ProviderAdapter providerAdapter = ProviderAdapterFactory.getProviderAdapter(notifier,em);
+ notifierHashMap.put(name.toLowerCase(), providerAdapter);
+ notifierHashMap.put(uuid, providerAdapter);
+ notifierHashMap.put(uuid.toString(), providerAdapter);
if(count++ >= 100){
LOG.error("ApplicationQueueManager: too many notifiers...breaking out ", notifierHashMap.size());
break;
@@ -276,7 +270,7 @@ public class ApplicationQueueManager {
LOG.info("sending batch of {} notifications.", messages.size());
final Meter sendMeter = metricsFactory.getMeter(NotificationsService.class, "send");
- final Map<Object, Notifier> notifierMap = getNotifierMap();
+ final Map<Object, ProviderAdapter> notifierMap = getNotifierMap();
final ApplicationQueueManager proxy = this;
final ConcurrentHashMap<UUID,TaskManager> taskMap = new ConcurrentHashMap<UUID, TaskManager>(messages.size());
final ConcurrentHashMap<UUID,Notification> notificationMap = new ConcurrentHashMap<UUID, Notification>(messages.size());
@@ -310,10 +304,10 @@ public class ApplicationQueueManager {
try {
String notifierName = message.getNotifierKey().toLowerCase();
- Notifier notifier = notifierMap.get(notifierName.toLowerCase());
+ ProviderAdapter providerAdapter = notifierMap.get(notifierName.toLowerCase());
Object payload = translatedPayloads.get(notifierName);
Receipt receipt = new Receipt(notification.getUuid(), message.getNotifierId(), payload, deviceUUID);
- TaskTracker tracker = new TaskTracker(notifier, taskManager, receipt, deviceUUID);
+ TaskTracker tracker = new TaskTracker(providerAdapter.getNotifier(), taskManager, receipt, deviceUUID);
if(!isOkToSend(notification)){
tracker.failed(0, "Notification is duplicate/expired/cancelled.");
}else {
@@ -323,8 +317,7 @@ public class ApplicationQueueManager {
} else {
long now = System.currentTimeMillis();
try {
- ProviderAdapter providerAdapter = providerAdapters.get(notifier.getProvider());
- providerAdapter.sendNotification(message.getNotifierId(), notifier, payload, notification, tracker);
+ providerAdapter.sendNotification(message.getNotifierId(), payload, notification, tracker);
} catch (Exception e) {
tracker.failed(0, e.getMessage());
} finally {
@@ -362,7 +355,7 @@ public class ApplicationQueueManager {
@Override
public HashMap<UUID, ApplicationQueueMessage> call(List<ApplicationQueueMessage> queueMessages) {
//for gcm this will actually send notification
- for (ProviderAdapter providerAdapter : providerAdapters.values()) {
+ for (ProviderAdapter providerAdapter : notifierMap.values()) {
try {
providerAdapter.doneSendingNotifications();
} catch (Exception e) {
@@ -395,24 +388,26 @@ public class ApplicationQueueManager {
return o;
}
+ public void stop(){
+ for(ProviderAdapter adapter : getNotifierMap().values()){
+ adapter.stop();
+ }
+ }
+
/**
* Call the adapter with the notifier
*/
- private Map<String, Object> translatePayloads(Map<String, Object> payloads, Map<Object, Notifier> notifierMap) throws Exception {
- Map<String, Object> translatedPayloads = new HashMap<String, Object>(
- payloads.size());
+ private Map<String, Object> translatePayloads(Map<String, Object> payloads, Map<Object, ProviderAdapter> notifierMap) throws Exception {
+ Map<String, Object> translatedPayloads = new HashMap<String, Object>( payloads.size());
for (Map.Entry<String, Object> entry : payloads.entrySet()) {
String payloadKey = entry.getKey().toLowerCase();
Object payloadValue = entry.getValue();
- Notifier notifier = notifierMap.get(payloadKey);
- if (notifier != null) {
- ProviderAdapter providerAdapter = providerAdapters.get(notifier.getProvider());
- if (providerAdapter != null) {
- Object translatedPayload = payloadValue != null ? providerAdapter.translatePayload(payloadValue) : null;
- if (translatedPayload != null) {
- translatedPayloads.put(payloadKey, translatedPayload);
- }
+ ProviderAdapter providerAdapter = notifierMap.get(payloadKey);
+ if (providerAdapter != null) {
+ Object translatedPayload = payloadValue != null ? providerAdapter.translatePayload(payloadValue) : null;
+ if (translatedPayload != null) {
+ translatedPayloads.put(payloadKey, translatedPayload);
}
}
}
@@ -453,15 +448,14 @@ public class ApplicationQueueManager {
}
public void asyncCheckForInactiveDevices() throws Exception {
- Collection<Notifier> notifiers = getNotifierMap().values();
- for (final Notifier notifier : notifiers) {
+ Collection<ProviderAdapter> providerAdapters = getNotifierMap().values();
+ for (final ProviderAdapter providerAdapter : providerAdapters) {
try {
- ProviderAdapter providerAdapter = providerAdapters.get(notifier.getProvider());
if (providerAdapter != null) {
- LOG.debug("checking notifier {} for inactive devices", notifier);
- providerAdapter.removeInactiveDevices(notifier, em);
+ LOG.debug("checking notifier {} for inactive devices", providerAdapter.getNotifier());
+ providerAdapter.removeInactiveDevices();
- LOG.debug("finished checking notifier {} for inactive devices",notifier);
+ LOG.debug("finished checking notifier {} for inactive devices",providerAdapter.getNotifier());
}
} catch (Exception e) {
LOG.error("checkForInactiveDevices", e); // not
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/InactiveDeviceManager.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/InactiveDeviceManager.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/InactiveDeviceManager.java
index ecee485..c54a595 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/InactiveDeviceManager.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/InactiveDeviceManager.java
@@ -38,13 +38,14 @@ import java.util.Map;
public class InactiveDeviceManager {
private static final Logger LOG = LoggerFactory.getLogger(InactiveDeviceManager.class);
private final Notifier notifier;
+ private EntityManager entityManager;
- public InactiveDeviceManager(Notifier notifier){
+ public InactiveDeviceManager(Notifier notifier,EntityManager entityManager){
this.notifier = notifier;
+ this.entityManager = entityManager;
}
public void removeInactiveDevices( Map<String,Date> inactiveDeviceMap ){
final String notfierPostFix = ApplicationQueueManager.NOTIFIER_ID_POSTFIX;
- final EntityManager em = notifier.getEntityManager();
if (inactiveDeviceMap != null && inactiveDeviceMap.size() > 0) {
LOG.debug("processing {} inactive devices", inactiveDeviceMap.size());
Map<String, Object> clearPushtokenMap = new HashMap<String, Object>( 2);
@@ -57,16 +58,16 @@ public class InactiveDeviceManager {
// name
Query query = new Query();
query.addEqualityFilter(notifier.getName() + notfierPostFix, entry.getKey());
- Results results = em.searchCollection(em.getApplication(), "devices", query);
+ Results results = entityManager.searchCollection(entityManager.getApplication(), "devices", query);
for (Entity e : results.getEntities()) {
- em.updateProperties(e, clearPushtokenMap);
+ entityManager.updateProperties(e, clearPushtokenMap);
}
// uuid
query = new Query();
query.addEqualityFilter(notifier.getUuid() + notfierPostFix, entry.getKey());
- results = em.searchCollection(em.getApplication(), "devices", query);
+ results = entityManager.searchCollection(entityManager.getApplication(), "devices", query);
for (Entity e : results.getEntities()) {
- em.updateProperties(e, clearPushtokenMap);
+ entityManager.updateProperties(e, clearPushtokenMap);
}
}catch (Exception e){
LOG.error("failed to remove token",e);
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/NotificationsService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/NotificationsService.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/NotificationsService.java
index 5420d29..a64704c 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/NotificationsService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/NotificationsService.java
@@ -72,18 +72,6 @@ public class NotificationsService extends AbstractCollectionService {
MESSAGE_PROPERTY_DEVICE_UUID, UUID.class);
}
- // these 2 can be static, but GCM can't. future: would be nice to get gcm
- // static as well...
- public static ProviderAdapter APNS_ADAPTER = new APNsAdapter();
- public static ProviderAdapter TEST_ADAPTER = new TestAdapter();
-
- public final Map<String, ProviderAdapter> providerAdapters =
- new HashMap<String, ProviderAdapter>(3);
- {
- providerAdapters.put("apple", APNS_ADAPTER);
- providerAdapters.put("google", new GCMAdapter());
- providerAdapters.put("noop", TEST_ADAPTER);
- }
private ApplicationQueueManager notificationQueueManager;
private long gracePeriod;
@@ -250,10 +238,6 @@ public class NotificationsService extends AbstractCollectionService {
return (notification.getStarted() == null);
}
- public Set<String> getProviders() {
- return providerAdapters.keySet();
- }
-
// validate payloads
private void validate(EntityRef ref, ServicePayload servicePayload)
throws Exception {
@@ -278,8 +262,7 @@ public class NotificationsService extends AbstractCollectionService {
throw new IllegalArgumentException("notifier \""
+ notifierId + "\" not found");
}
- ProviderAdapter providerAdapter = providerAdapters.get(notifier
- .getProvider());
+ ProviderAdapter providerAdapter = ProviderAdapterFactory.getProviderAdapter(notifier,em);
Object payload = entry.getValue();
try {
return providerAdapter.translatePayload(payload); // validate
@@ -354,10 +337,9 @@ public class NotificationsService extends AbstractCollectionService {
* failure
*/
public void testConnection(Notifier notifier) throws Exception {
- ProviderAdapter providerAdapter = providerAdapters.get(notifier.getProvider());
+ ProviderAdapter providerAdapter = ProviderAdapterFactory.getProviderAdapter(notifier,em);
if (providerAdapter != null) {
- notifier.setEntityManager(em);
- providerAdapter.testConnection(notifier);
+ providerAdapter.testConnection();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapter.java
index 33e921f..8acd006 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapter.java
@@ -34,10 +34,9 @@ import org.apache.usergrid.services.ServicePayload;
*/
public interface ProviderAdapter {
- public void testConnection(Notifier notifier) throws ConnectionException;
+ public void testConnection() throws ConnectionException;
- public void sendNotification(String providerId, Notifier notifier,
- Object payload, Notification notification, TaskTracker tracker)
+ public void sendNotification(String providerId, Object payload, Notification notification, TaskTracker tracker)
throws Exception;
/**
@@ -46,10 +45,13 @@ public interface ProviderAdapter {
*/
public void doneSendingNotifications() throws Exception;
- public void removeInactiveDevices(Notifier notifier,
- EntityManager em) throws Exception;
+ public void removeInactiveDevices() throws Exception;
public Object translatePayload(Object payload) throws Exception;
public void validateCreateNotifier(ServicePayload payload) throws Exception;
+
+ public void stop();
+
+ public Notifier getNotifier();
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapterFactory.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapterFactory.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapterFactory.java
new file mode 100644
index 0000000..a4022c1
--- /dev/null
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/ProviderAdapterFactory.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+
+package org.apache.usergrid.services.notifications;
+
+import org.apache.usergrid.persistence.EntityManager;
+import org.apache.usergrid.persistence.entities.Notifier;
+import org.apache.usergrid.services.notifications.apns.APNsAdapter;
+import org.apache.usergrid.services.notifications.gcm.GCMAdapter;
+
+import java.util.HashMap;
+
+/**
+ * Classy class class.
+ */
+public class ProviderAdapterFactory {
+ private static final String[] providers = new String[]{"apple", "google", "noop"};
+ public static ProviderAdapter getProviderAdapter(Notifier notifier, EntityManager entityManager){
+ ProviderAdapter adapter = null;
+ switch(notifier.getProvider().toLowerCase()){
+ case "apple" : adapter = new APNsAdapter(entityManager,notifier); break;
+ case "google" : adapter = new GCMAdapter(entityManager ,notifier); break;
+ case "noop" : adapter = new TestAdapter(notifier); break;
+ }
+ return adapter;
+
+ }
+
+ public static String[] getValidProviders() {
+ return providers;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/QueueListener.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/QueueListener.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/QueueListener.java
index fffc8cd..3c788a9 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/QueueListener.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/QueueListener.java
@@ -18,6 +18,7 @@ package org.apache.usergrid.services.notifications;
import com.codahale.metrics.*;
import com.codahale.metrics.Timer;
+import com.google.common.cache.*;
import org.apache.usergrid.corepersistence.CpSetup;
import org.apache.usergrid.metrics.MetricsFactory;
@@ -35,10 +36,7 @@ import org.slf4j.LoggerFactory;
import rx.Observable;
import javax.annotation.PostConstruct;
import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
+import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
public class QueueListener {
@@ -148,7 +146,9 @@ public class QueueListener {
QueueManager queueManager = TEST_QUEUE_MANAGER != null ? TEST_QUEUE_MANAGER : queueManagerFactory.getQueueManager(queueScope);
// run until there are no more active jobs
long runCount = 0;
- Map<UUID,ApplicationQueueManager> queueManagerMap = new ConcurrentHashMap<>(); //keep a cache of queuemangers then clear them at an interval
+ //cache to retrieve push manager, cached per notifier, so many notifications will get same push manager
+ LoadingCache<UUID, ApplicationQueueManager> queueManagerMap = getQueueManagerCache(queueManager);
+
while ( true ) {
try {
@@ -175,20 +175,7 @@ public class QueueListener {
//send each set of app ids together
for (Map.Entry<UUID, List<QueueMessage>> entry : messageMap.entrySet()) {
UUID applicationId = entry.getKey();
- EntityManager entityManager = emf.getEntityManager(applicationId);
- ServiceManager serviceManager = smf.getServiceManager(applicationId);
-
ApplicationQueueManager manager = queueManagerMap.get(applicationId);
- if(manager==null) {
- manager = new ApplicationQueueManager(
- new JobScheduler(serviceManager, entityManager),
- entityManager,
- queueManager,
- metricsService,
- properties
- );
- queueManagerMap.put(applicationId,manager);
- }
LOG.info("send batch for app {} of {} messages", entry.getKey(), entry.getValue().size());
Observable current = manager.sendBatchToProviders(entry.getValue(),queueName);
if(merge == null)
@@ -210,7 +197,7 @@ public class QueueListener {
Thread.sleep(sleepBetweenRuns);
}
if(++runCount % consecutiveCallsToRemoveDevices == 0){
- for(ApplicationQueueManager applicationQueueManager : queueManagerMap.values()){
+ for(ApplicationQueueManager applicationQueueManager : queueManagerMap.asMap().values()){
try {
applicationQueueManager.asyncCheckForInactiveDevices();
}catch (Exception inactiveDeviceException){
@@ -218,7 +205,6 @@ public class QueueListener {
}
}
//clear everything
- queueManagerMap.clear();
runCount=0;
}
}
@@ -244,6 +230,43 @@ public class QueueListener {
}
}
+ private LoadingCache<UUID, ApplicationQueueManager> getQueueManagerCache(final QueueManager queueManager) {
+ return CacheBuilder
+ .newBuilder()
+ .expireAfterAccess(10, TimeUnit.MINUTES)
+ .removalListener(new RemovalListener<UUID, ApplicationQueueManager>() {
+ @Override
+ public void onRemoval(
+ RemovalNotification<UUID, ApplicationQueueManager> queueManagerNotifiication) {
+ try {
+ queueManagerNotifiication.getValue().stop();
+ } catch (Exception ie) {
+ LOG.error("Failed to shutdown from cache", ie);
+ }
+ }
+ }).build(new CacheLoader<UUID, ApplicationQueueManager>() {
+ @Override
+ public ApplicationQueueManager load(final UUID applicationId) {
+ try {
+ EntityManager entityManager = emf.getEntityManager(applicationId);
+ ServiceManager serviceManager = smf.getServiceManager(applicationId);
+
+ ApplicationQueueManager manager = new ApplicationQueueManager(
+ new JobScheduler(serviceManager, entityManager),
+ entityManager,
+ queueManager,
+ metricsService,
+ properties
+ );
+ return manager;
+ } catch (Exception e) {
+ LOG.error("Could not instantiate queue manager", e);
+ return null;
+ }
+ }
+ });
+ }
+
public void stop(){
LOG.info("stop processes");
@@ -263,4 +286,6 @@ public class QueueListener {
}
public int getBatchSize(){return batchSize;}
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/TestAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/TestAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/TestAdapter.java
index b4eb767..1007dc6 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/TestAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/TestAdapter.java
@@ -38,25 +38,26 @@ public class TestAdapter implements ProviderAdapter {
private static final Logger log = LoggerFactory.getLogger(TestAdapter.class);
private static final int DELAY = 1; // if delay > 0, uses threadpool
+ private final Notifier notifier;
private ExecutorService pool = null;
- public TestAdapter() {
+ public TestAdapter(Notifier notifier) {
if (DELAY > 0) {
pool = Executors
.newFixedThreadPool(APNsAdapter.MAX_CONNECTION_POOL_SIZE);
}
+ this.notifier = notifier;
}
@Override
- public void testConnection(Notifier notifier) throws ConnectionException {
+ public void testConnection() throws ConnectionException {
}
@Override
public void sendNotification(
String providerId,
- Notifier notifier,
- final Object payload,
+ final Object payload,
Notification notification,
TaskTracker tracker)
throws Exception {
@@ -89,7 +90,7 @@ public class TestAdapter implements ProviderAdapter {
}
@Override
- public void removeInactiveDevices(Notifier notifier, EntityManager em) throws Exception {
+ public void removeInactiveDevices() throws Exception {
log.debug("getInactiveDevices()");
}
@@ -101,4 +102,14 @@ public class TestAdapter implements ProviderAdapter {
@Override
public void validateCreateNotifier(ServicePayload payload) throws Exception {
}
+
+ @Override
+ public void stop() {
+
+ }
+
+ @Override
+ public Notifier getNotifier() {
+ return notifier;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsAdapter.java
index 7ab1dc3..da5d3e5 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/APNsAdapter.java
@@ -60,13 +60,18 @@ public class APNsAdapter implements ProviderAdapter {
validEnvironments.add("mock");
}
- public APNsAdapter(){}
+ private final Notifier notifier;
+
+ private EntityManager entityManager;
+ private EntityPushManager pushManager;
+
+ public APNsAdapter(EntityManager entityManager, Notifier notifier){
+ this.entityManager = entityManager;
+ this.notifier = notifier;
+ }
@Override
- public void testConnection(Notifier notifier) throws ConnectionException {
- if(isMock(notifier)){
- delayRandom(notifier); return;
- }
+ public void testConnection() throws ConnectionException {
TestAPNsNotification notification = TestAPNsNotification.create(TEST_TOKEN, TEST_PAYLOAD);
try {
CountDownLatch latch = new CountDownLatch(1);
@@ -99,8 +104,7 @@ public class APNsAdapter implements ProviderAdapter {
}
@Override
- public void sendNotification(String providerId, Notifier notifier,
- Object payload, Notification notification, TaskTracker tracker)
+ public void sendNotification(String providerId, Object payload, Notification notification, TaskTracker tracker)
throws Exception {
APNsNotification apnsNotification = APNsNotification.create(providerId, payload.toString(), notification, tracker);
PushManager<SimpleApnsPushNotification> pushManager = getPushManager(notifier);
@@ -119,74 +123,35 @@ public class APNsAdapter implements ProviderAdapter {
}
@Override
- public void removeInactiveDevices(Notifier notifier,EntityManager em) throws Exception {
+ public void removeInactiveDevices() throws Exception {
PushManager<SimpleApnsPushNotification> pushManager = getPushManager(notifier);
pushManager.requestExpiredTokens();
}
private EntityPushManager getPushManager(Notifier notifier) throws ExecutionException {
- EntityPushManager pushManager = apnsServiceMap.get(notifier);
if(pushManager != null && !pushManager.isStarted() && pushManager.isShutDown()){
- apnsServiceMap.invalidate(notifier);
- pushManager = apnsServiceMap.get(notifier);
+ PushManagerConfiguration config = new PushManagerConfiguration();
+ config.setConcurrentConnectionCount(Runtime.getRuntime().availableProcessors() * 2);
+ EntityPushManager pushManager = new EntityPushManager(notifier,entityManager, config);
+ //only tested when a message is sent
+ pushManager.registerRejectedNotificationListener(new RejectedAPNsListener());
+ //this will get tested when start is called
+ pushManager.registerFailedConnectionListener(new FailedConnectionListener());
+ //unregistered expired devices
+ pushManager.registerExpiredTokenListener(new ExpiredTokenListener());
+
+ try {
+ if (!pushManager.isStarted()) { //ensure manager is started
+ pushManager.start();
+ }
+ }catch(IllegalStateException ise){
+ logger.debug("failed to start",ise);//could have failed because its started
+ }
+ return pushManager;
}
return pushManager;
}
- //cache to retrieve push manager, cached per notifier, so many notifications will get same push manager
- private static LoadingCache<Notifier, EntityPushManager> apnsServiceMap = CacheBuilder
- .newBuilder()
- .expireAfterAccess(10, TimeUnit.MINUTES)
- .removalListener(new RemovalListener<Notifier, EntityPushManager>() {
- @Override
- public void onRemoval(
- RemovalNotification<Notifier,EntityPushManager> notification) {
- try {
- EntityPushManager manager = notification.getValue();
- if (!manager.isShutDown()) {
- List<SimpleApnsPushNotification> notifications = manager.shutdown(3000);
- for (SimpleApnsPushNotification notification1 : notifications) {
- try {
- ((APNsNotification) notification1).messageSendFailed(new Exception("Cache Expired: Shutting down sender"));
- }catch (Exception e){
- logger.error("Failed to mark notification",e);
- }
- }
- }
- } catch (Exception ie) {
- logger.error("Failed to shutdown from cache", ie);
- }
- }
- }).build(new CacheLoader<Notifier, EntityPushManager>() {
- @Override
- public EntityPushManager load(final Notifier notifier) {
- try {
- PushManagerConfiguration config = new PushManagerConfiguration();
- config.setConcurrentConnectionCount(Runtime.getRuntime().availableProcessors() * 2);
- EntityPushManager pushManager = new EntityPushManager(notifier, config);
- //only tested when a message is sent
- pushManager.registerRejectedNotificationListener(new RejectedAPNsListener());
- //this will get tested when start is called
- pushManager.registerFailedConnectionListener(new FailedConnectionListener());
- //unregistered expired devices
- pushManager.registerExpiredTokenListener(new ExpiredTokenListener());
-
- try {
- if (!pushManager.isStarted()) { //ensure manager is started
- pushManager.start();
- }
- }catch(IllegalStateException ise){
- logger.debug("failed to start",ise);//could have failed because its started
- }
- return pushManager;
- } catch (Exception e) {
- logger.error("Could not instantiate pushmanager", e);
- return null;
- }
- }
- });
-
-
@Override
public Object translatePayload(Object objPayload) throws Exception {
@@ -220,23 +185,26 @@ public class APNsAdapter implements ProviderAdapter {
"p12Certificate");
}
}
- public boolean isMock(Notifier notifier){
- return notifier.getEnvironment() !=null ? notifier.getEnvironment().equals("mock") : false ;
- }
- public boolean delayRandom(Notifier notifier) {
- boolean wasDelayed = false;
- if (isMock(notifier)) {
+
+ @Override
+ public void stop(){
try {
- Thread.sleep(
- new Random().nextInt(300)
- );
- wasDelayed = true;
- } catch (InterruptedException ie) {
- //delay was stopped
+ if (!pushManager.isShutDown()) {
+ List<SimpleApnsPushNotification> notifications = pushManager.shutdown(3000);
+ for (SimpleApnsPushNotification notification1 : notifications) {
+ try {
+ ((APNsNotification) notification1).messageSendFailed(new Exception("Cache Expired: Shutting down sender"));
+ }catch (Exception e){
+ logger.error("Failed to mark notification",e);
+ }
+ }
+ }
+ } catch (Exception ie) {
+ logger.error("Failed to shutdown from cache", ie);
}
- }
- return wasDelayed;
}
+ @Override
+ public Notifier getNotifier(){return notifier;}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/EntityPushManager.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/EntityPushManager.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/EntityPushManager.java
index 8283458..d675081 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/EntityPushManager.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/EntityPushManager.java
@@ -38,14 +38,16 @@ import java.util.concurrent.LinkedBlockingDeque;
*/
public class EntityPushManager extends PushManager<SimpleApnsPushNotification> {
private final Notifier notifier;
+ private final EntityManager entityManager;
- public EntityPushManager( Notifier notifier, PushManagerConfiguration configuration) {
+ public EntityPushManager( Notifier notifier, EntityManager entityManager, PushManagerConfiguration configuration) {
super(getApnsEnvironment(notifier), getSSLContext(notifier), null, null, new LinkedBlockingDeque<SimpleApnsPushNotification>(), configuration, notifier.getName());
this.notifier = notifier;
+ this.entityManager = entityManager;
}
public EntityManager getEntityManager() {
- return notifier.getEntityManager();
+ return entityManager;
}
public Notifier getNotifier() {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/ExpiredTokenListener.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/ExpiredTokenListener.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/ExpiredTokenListener.java
index 3daa20c..6408dfd 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/ExpiredTokenListener.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/apns/ExpiredTokenListener.java
@@ -53,7 +53,7 @@ public class ExpiredTokenListener implements com.relayrides.pushy.apns.ExpiredTo
}
if(pushManager instanceof EntityPushManager){
EntityPushManager entityPushManager = (EntityPushManager) pushManager;
- InactiveDeviceManager inactiveDeviceManager = new InactiveDeviceManager(entityPushManager.getNotifier());
+ InactiveDeviceManager inactiveDeviceManager = new InactiveDeviceManager(entityPushManager.getNotifier(),entityPushManager.getEntityManager());
inactiveDeviceManager.removeInactiveDevices(inactiveDeviceMap);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
index f8de5ff..b65b25a 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifications/gcm/GCMAdapter.java
@@ -40,11 +40,17 @@ public class GCMAdapter implements ProviderAdapter {
private static final Logger LOG = LoggerFactory.getLogger(GCMAdapter.class);
private static final int SEND_RETRIES = 3;
private static int BATCH_SIZE = 1000;
+ private final Notifier notifier;
+ private EntityManager entityManager;
private Map<Notifier, Batch> notifierBatches = new HashMap<Notifier, Batch>();
+ public GCMAdapter(EntityManager entityManager,Notifier notifier){
+ this.notifier = notifier;
+ this.entityManager = entityManager;
+ }
@Override
- public void testConnection(Notifier notifier) throws ConnectionException {
+ public void testConnection() throws ConnectionException {
Sender sender = new Sender(notifier.getApiKey());
Message message = new Message.Builder().build();
try {
@@ -56,7 +62,7 @@ public class GCMAdapter implements ProviderAdapter {
}
@Override
- public void sendNotification(String providerId, Notifier notifier,
+ public void sendNotification(String providerId,
Object payload, Notification notification, TaskTracker tracker)
throws Exception {
Map<String,Object> map = (Map<String, Object>) payload;
@@ -66,12 +72,11 @@ public class GCMAdapter implements ProviderAdapter {
expireSeconds = expireSeconds <= 2419200 ? expireSeconds : 2419200; //send the max gcm value documented here http://developer.android.com/google/gcm/adv.html#ttl
map.put(expiresKey, expireSeconds);
}
- Batch batch = getBatch(notifier, map);
+ Batch batch = getBatch( map);
batch.add(providerId, tracker);
}
- synchronized private Batch getBatch(Notifier notifier,
- Map<String, Object> payload) {
+ synchronized private Batch getBatch( Map<String, Object> payload) {
Batch batch = notifierBatches.get(notifier);
if (batch == null && payload != null) {
batch = new Batch(notifier, payload);
@@ -88,13 +93,12 @@ public class GCMAdapter implements ProviderAdapter {
}
@Override
- public void removeInactiveDevices(Notifier notifier,
- EntityManager em) throws Exception {
- Batch batch = getBatch(notifier, null);
+ public void removeInactiveDevices( ) throws Exception {
+ Batch batch = getBatch( null);
Map<String,Date> map = null;
if(batch != null) {
map = batch.getAndClearInactiveDevices();
- InactiveDeviceManager deviceManager = new InactiveDeviceManager(notifier);
+ InactiveDeviceManager deviceManager = new InactiveDeviceManager(notifier,entityManager);
deviceManager.removeInactiveDevices(map);
}
@@ -126,6 +130,16 @@ public class GCMAdapter implements ProviderAdapter {
}
}
+ @Override
+ public void stop() {
+
+ }
+
+ @Override
+ public Notifier getNotifier() {
+ return notifier;
+ }
+
private class Batch {
private Notifier notifier;
private Map payload;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/main/java/org/apache/usergrid/services/notifiers/NotifiersService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/notifiers/NotifiersService.java b/stack/services/src/main/java/org/apache/usergrid/services/notifiers/NotifiersService.java
index 8c41e0a..ae089fe 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/notifiers/NotifiersService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/notifiers/NotifiersService.java
@@ -18,6 +18,10 @@ package org.apache.usergrid.services.notifiers;
import org.apache.usergrid.persistence.Entity;
import org.apache.usergrid.persistence.entities.Notifier;
+import org.apache.usergrid.services.notifications.ProviderAdapterFactory;
+import org.apache.usergrid.services.notifications.TestAdapter;
+import org.apache.usergrid.services.notifications.apns.APNsAdapter;
+import org.apache.usergrid.services.notifications.gcm.GCMAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.usergrid.services.*;
@@ -25,6 +29,8 @@ import org.apache.usergrid.services.notifications.NotificationsService;
import org.apache.usergrid.services.notifications.ProviderAdapter;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
public class NotifiersService extends AbstractCollectionService {
@@ -45,22 +51,21 @@ public class NotifiersService extends AbstractCollectionService {
NotificationsService ns = (NotificationsService) sm
.getService("notifications");
- Set<String> providers = ns.getProviders();
String provider = payload.getStringProperty("provider");
- if (!providers.contains(provider)) {
- throw new IllegalArgumentException("provider must be one of: "
- + Arrays.toString(providers.toArray()));
- }
- ProviderAdapter providerAdapter = ns.providerAdapters.get(provider);
- providerAdapter.validateCreateNotifier(payload);
ServiceResults results = super.postCollection(context);
-
- Notifier notifier =(Notifier) results.getEntity();
+ Notifier notifier = (Notifier) results.getEntity();
if (notifier != null) {
try {
+ ProviderAdapter providerAdapter = ProviderAdapterFactory.getProviderAdapter(notifier, em);
+
+ if (providerAdapter==null) {
+ throw new IllegalArgumentException("provider must be one of: "
+ + Arrays.toString(ProviderAdapterFactory.getValidProviders()));
+ }
+ providerAdapter.validateCreateNotifier(payload);
ns.testConnection(notifier);
} catch (Exception e) {
logger.info("notifier testConnection() failed", e);
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/test/java/org/apache/usergrid/services/notifications/NotifiersServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/NotifiersServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/NotifiersServiceIT.java
index 61cf1e6..7ced70c 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/NotifiersServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/NotifiersServiceIT.java
@@ -44,7 +44,6 @@ public class NotifiersServiceIT extends AbstractServiceIT {
@Before
public void before() throws Exception {
ns = (NotificationsService) app.getSm().getService("notifications");
- MockSuccessfulProviderAdapter.install(ns);
}
@Test
@@ -76,16 +75,6 @@ public class NotifiersServiceIT extends AbstractServiceIT {
// ok
}
- // mock action (based on verified actual behavior) //
- ns.providerAdapters
- .put("google",
- new org.apache.usergrid.services.notifications.gcm.MockSuccessfulProviderAdapter() {
- @Override
- public void testConnection(Notifier notifier)
- throws ConnectionException {
- throw new ConnectionException("", null);
- }
- });
app.put("apiKey", "xxx");
@@ -100,8 +89,6 @@ public class NotifiersServiceIT extends AbstractServiceIT {
@Test
public void badAPNsEnvironment() throws Exception {
- MockSuccessfulProviderAdapter.uninstall(ns);
-
app.clear();
app.put("provider", "apple");
app.put("environment", "xxx");
@@ -141,16 +128,7 @@ public class NotifiersServiceIT extends AbstractServiceIT {
@Test
public void badAPNsCertificate() throws Exception {
- // mock error (based on verified actual behavior) //
- ns.providerAdapters.put("apple", new MockSuccessfulProviderAdapter() {
- @Override
- public void testConnection(Notifier notifier)
- throws ConnectionException {
- Exception e = new SocketException(
- "Connection closed by remote host");
- throw new ConnectionException(e.getMessage(), e);
- }
- });
+
app.clear();
app.put("provider", "apple");
@@ -174,15 +152,6 @@ public class NotifiersServiceIT extends AbstractServiceIT {
@Test
public void badAPNsPassword() throws Exception {
- // mock error (based on verified actual behavior) //
- ns.providerAdapters.put("apple", new MockSuccessfulProviderAdapter() {
- @Override
- public void testConnection(Notifier notifier)
- throws ConnectionException {
- Exception e = new Exception("invalid ssl config");
- throw new ConnectionException(e.getMessage(), e);
- }
- });
app.clear();
app.put("provider", "apple");
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/MockSuccessfulProviderAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/MockSuccessfulProviderAdapter.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/MockSuccessfulProviderAdapter.java
index e864e4f..b3096b7 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/MockSuccessfulProviderAdapter.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/MockSuccessfulProviderAdapter.java
@@ -23,34 +23,15 @@ import org.apache.usergrid.services.notifications.NotificationsService;
import org.apache.usergrid.services.notifications.ProviderAdapter;
import org.apache.usergrid.services.notifications.TaskTracker;
-import java.util.Date;
-import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import org.apache.usergrid.persistence.EntityManager;
import org.apache.usergrid.services.ServicePayload;
public class MockSuccessfulProviderAdapter implements ProviderAdapter {
private static ProviderAdapter realProviderAdapter;
- public static void install(NotificationsService ns) {
- install(ns, false);
- }
-
- public static void install(NotificationsService ns, boolean doAsync) {
- if (realProviderAdapter != null)
- realProviderAdapter = ns.providerAdapters.get("apple");
- ns.providerAdapters.put("apple", new MockSuccessfulProviderAdapter(
- doAsync));
- }
-
- public static void uninstall(NotificationsService ns) {
- if (realProviderAdapter != null) {
- ns.providerAdapters.put("apple", realProviderAdapter);
- }
- }
private ExecutorService pool;
@@ -65,7 +46,7 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
}
@Override
- public void testConnection(Notifier notifier) throws ConnectionException {
+ public void testConnection() throws ConnectionException {
}
@Override
@@ -74,8 +55,7 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
}
@Override
- public void removeInactiveDevices(Notifier notifier,
- EntityManager em) {
+ public void removeInactiveDevices() {
}
@Override
@@ -83,12 +63,21 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
}
@Override
+ public void stop() {
+
+ }
+
+ @Override
+ public Notifier getNotifier() {
+ return null;
+ }
+
+ @Override
public void doneSendingNotifications() throws Exception {
}
@Override
- public void sendNotification(final String providerId,
- final Notifier notifier, final Object payload,
+ public void sendNotification(final String providerId, final Object payload,
final Notification notification, final TaskTracker tracker)
throws Exception {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
index 31a653c..2a4ec73 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/apns/NotificationsServiceIT.java
@@ -327,8 +327,6 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
@Test
public void badPayloads() throws Exception {
- MockSuccessfulProviderAdapter.uninstall(ns);
-
// bad payloads format
app.clear();
@@ -400,24 +398,6 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
// mock action (based on verified actual behavior) //
- if (!USE_REAL_CONNECTIONS) {
- ns.providerAdapters.put("apple",
- new MockSuccessfulProviderAdapter() {
- @Override
- public void sendNotification(String providerId,
- Notifier notifier, Object payload,
- Notification notification, TaskTracker tracker)
- throws Exception {
- APNsNotification apnsNotification = APNsNotification
- .create(providerId, payload.toString(),
- notification, tracker);
- apnsNotification.messageSent();
- apnsNotification
- .messageSendFailed( RejectedNotificationReason.INVALID_TOKEN);
- }
- });
- }
-
// create push notification //
HashMap<String, Object> properties = new LinkedHashMap<String, Object>();
@@ -628,16 +608,16 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
// mock error (based on verified actual behavior) //
if (!USE_REAL_CONNECTIONS) {
- ns.providerAdapters.put("apple",
- new MockSuccessfulProviderAdapter() {
- @Override
- public void testConnection(Notifier notifier)
- throws ConnectionException {
- Exception e = new SocketException(
- "Connection closed by remote host");
- throw new ConnectionException(e.getMessage(), e);
- }
- });
+// ns.providerAdapters.put("apple",
+// new MockSuccessfulProviderAdapter() {
+// @Override
+// public void testConnection(Notifier notifier)
+// throws ConnectionException {
+// Exception e = new SocketException(
+// "Connection closed by remote host");
+// throw new ConnectionException(e.getMessage(), e);
+// }
+// });
}
// create push notification //
@@ -685,8 +665,7 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
// mock action (based on verified actual behavior) //
if (!USE_REAL_CONNECTIONS) {
- ns.providerAdapters.put("apple",
- new MockSuccessfulProviderAdapter());
+
}
// create push notification //
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/MockSuccessfulProviderAdapter.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/MockSuccessfulProviderAdapter.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/MockSuccessfulProviderAdapter.java
index 3836fe8..c41e5ab 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/MockSuccessfulProviderAdapter.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/MockSuccessfulProviderAdapter.java
@@ -32,23 +32,13 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
private static ProviderAdapter realProviderAdapter;
- public static void install(NotificationsService ns) {
- if (realProviderAdapter != null)
- realProviderAdapter = ns.providerAdapters.get("google");
- ns.providerAdapters.put("google", new MockSuccessfulProviderAdapter());
- }
- public static void uninstall(NotificationsService ns) {
- if (realProviderAdapter != null) {
- ns.providerAdapters.put("google", realProviderAdapter);
- }
- }
public MockSuccessfulProviderAdapter() {
}
@Override
- public void testConnection(Notifier notifier) throws ConnectionException {
+ public void testConnection() throws ConnectionException {
}
@Override
@@ -56,14 +46,20 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
return payload.toString();
}
+
+
@Override
- public void removeInactiveDevices(Notifier notifier,
- EntityManager em) throws Exception {
+ public void validateCreateNotifier(ServicePayload payload) throws Exception {
+ }
+
+ @Override
+ public void stop() {
}
@Override
- public void validateCreateNotifier(ServicePayload payload) throws Exception {
+ public Notifier getNotifier() {
+ return null;
}
@Override
@@ -71,7 +67,12 @@ public class MockSuccessfulProviderAdapter implements ProviderAdapter {
}
@Override
- public void sendNotification(String providerId, Notifier notifier,
+ public void removeInactiveDevices() throws Exception {
+
+ }
+
+ @Override
+ public void sendNotification(String providerId,
Object payload, Notification notification, final TaskTracker tracker)
throws Exception {
new Thread() {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/0f4584c4/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
index ea0b7da..3795be1 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/notifications/gcm/NotificationsServiceIT.java
@@ -240,51 +240,6 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
}
}
- @Ignore("todo: how can I mock this?")
- @Test
- public void providerIdUpdate() throws Exception {
-
- // mock action (based on verified actual behavior) //
- final String newProviderId = "newProviderId";
- ns.providerAdapters.put("google", new MockSuccessfulProviderAdapter() {
- @Override
- public void sendNotification(String providerId, Notifier notifier,
- Object payload, Notification notification,
- TaskTracker tracker) throws Exception {
- tracker.completed(newProviderId);
- }
- });
-
- // create push notification //
-
- app.clear();
- String payload = "Hello, World!";
- Map<String, String> payloads = new HashMap<String, String>(1);
- payloads.put(notifier.getUuid().toString(), payload);
- app.put("payloads", payloads);
- app.put("queued", System.currentTimeMillis());
- app.put("debug",true);
-
- Entity e = app.testRequest(ServiceAction.POST, 1,"devices",device1.getUuid(), "notifications")
- .getEntity();
- app.testRequest(ServiceAction.GET, 1, "notifications", e.getUuid());
-
- Notification notification = app.getEm().get(e.getUuid(),
- Notification.class);
- assertEquals(
- notification.getPayloads().get(notifier.getUuid().toString()),
- payload);
-
- ns.addDevice(notification, device1);
-
- // perform push //
- notification = scheduleNotificationAndWait(notification);
- checkReceipts(notification, 1);
-
- Device device = (Device) app.getEm().get(device1).toTypedEntity();
- assertEquals(newProviderId,
- device.getProperty(notifier.getName() + NOTIFIER_ID_POSTFIX));
- }
@Test
public void badPayloads() throws Exception {
@@ -353,20 +308,6 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
@Test
public void badToken() throws Exception {
- // mock action (based on verified actual behavior) //
- if (!USE_REAL_CONNECTIONS) {
- ns.providerAdapters.put("google",
- new MockSuccessfulProviderAdapter() {
- @Override
- public void sendNotification(String providerId,
- Notifier notifier, Object payload,
- Notification notification, TaskTracker tracker)
- throws Exception {
- tracker.failed("InvalidRegistration",
- "InvalidRegistration");
- }
- });
- }
// create push notification //
@@ -410,21 +351,6 @@ public class NotificationsServiceIT extends AbstractServiceNotificationIT {
@Test
public void badAPIKey() throws Exception {
- if (!USE_REAL_CONNECTIONS) {
- // mock action (based on verified actual behavior) //
- ns.providerAdapters.put("google",
- new MockSuccessfulProviderAdapter() {
- @Override
- public void sendNotification(String providerId,
- Notifier notifier, Object payload,
- Notification notification, TaskTracker tracker)
- throws Exception {
- Exception e = new IOException();
- throw new ConnectionException(e.getMessage(), e);
- }
- });
- }
-
// create push notification //
app.clear();