Push-уведомление Worklight (APNS) завершается неудачно с javax.net.ssl.SSLHandshakeException
У меня есть приложение Worklight 6.1 на iOS с push-уведомлениями. Работает нормально, пока что-то не работает на сервере Worklight. Все push-уведомления после этого терпят неудачу, пока сервер не будет перезагружен.
Сервер Worklight - это Liberty 8.5.5.0 в Linux x86_64 с использованием JDK: java-1.7.0-ibm-1.7.0.5.0.x86_64 База данных Worklight - Derby (это тестовый сервер)
Все отлично работает, когда я запускаю сервер.
Через 10 минут после запуска сервера я вижу:
[2/20/14 19:39:15:319 CST] 0000003e com.notnoop.apns.internal.ApnsFeedbackConnection W Failed to retreive invalid devices
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: End user tried to act as a CA
Но это, похоже, ничего не сломает. Push-уведомления по-прежнему работают. Через 30 минут после запуска сервера я вижу:
[2/20/14 19:59:48:657 CST] 00000061 com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E: Exception thrown by application class 'org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException:365'
org.jboss.resteasy.spi.UnhandledException: org.springframework.dao.InvalidDataAccessApiUsageException: Multiple DISTINCT aggregates are not supported at this time. {SELECT COUNT(DISTINCT t0.DEVICE), COUNT(DISTINCT t1.ID) FROM NOTIFICATION_DEVICE t0 INNER JOIN NOTIFICATION_USER t1 ON t0.USERSUBSCRIPTIONID = t1.ID WHERE (t0.APPLICATIONID IN (?) AND t0.PLATFORM = ?)} [code=30000, state=42Z02]; nested exception is <openjpa-1.2.2-r422266:898935 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Multiple DISTINCT aggregates are not supported at this time. {SELECT COUNT(DISTINCT t0.DEVICE), COUNT(DISTINCT t1.ID) FROM NOTIFICATION_DEVICE t0 INNER JOIN NOTIFICATION_USER t1 ON t0.USERSUBSCRIPTIONID = t1.ID WHERE (t0.APPLICATIONID IN (?) AND t0.PLATFORM = ?)} [code=30000, state=42Z02]
И любой вызов push-адаптера после этого приводит к:
[2/21/14 19:06:44:038 CST] 00000090 com.notnoop.apns.internal.ApnsConnectionImpl I Exception while waiting for error code
java.net.SocketException: Socket is closed
at com.ibm.jsse2.qc.j(qc.java:301)
at com.ibm.jsse2.e.read(e.java:32)
at java.io.InputStream.read(InputStream.java:102)
at com.notnoop.apns.internal.ApnsConnectionImpl$1MonitoringThread.run(ApnsConnectionImpl.java:114)
[2/21/14 19:06:44:650 CST] 00000085 com.notnoop.apns.internal.ApnsConnectionImpl I Failed to send message Message(Id=2; Token=499D9813FBC377CCDE787E2749CDA914F826EDF39B0830D4AFEEF7A5D71A1802; Payload={"aps":{"alert":{"body":"You have 4 available messages","action-loc-key":null},"sound":"","badge":4},"payload":"{\"alias\":\"myNotificationPush\"}"})... trying again after delay
javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: End user tried to act as a CA
И все повторные попытки после этого приводят к одной и той же ошибке.
Есть несколько обращений Google на «Конечный пользователь пытался действовать как CA» и «APNS», которые предполагают, что это проблема JDK 1.5 (исправлена в 1.6), и что это можно исправить с помощью диспетчера доверия IbmPKIX, но я уверен, что я использую JDK 1.7, а менеджер доверия в java.security - PKIX