【发布时间】:2014-03-23 19:28:25
【问题描述】:
我在 iOS 上有一个带有推送通知的 Worklight 6.1 应用程序。它工作正常,直到 Worklight 服务器出现问题。之后的所有推送通知都会失败,直到服务器重新启动。
Worklight 服务器是 Linux x86_64 上的 Liberty 8.5.5.0 使用 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
但这似乎并没有破坏任何东西。推送通知仍然有效。服务器启动 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]
之后对推送适配器的任何调用都会导致:
[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
之后的所有重试都会导致同样的失败。
有一些关于“最终用户试图充当 CA”和“APNS”的谷歌点击表明这是一个 JDK 1.5 问题(已在 1.6 中修复),并且可以通过使用 IbmPKIX 信任管理器来修复,但我确定我使用的是 JDK 1.7,并且 java.security 中的信任管理器是 PKIX
【问题讨论】:
-
好的。我以为我有这个序列,但通过进一步测试,我真正能说的是,有时通过 APNS 的推送有效,有时它会因上述错误而失败。
-
notnoop 不适用于 JRE 7 AFAIK。使用 6 并观察是否有任何变化。
-
切换到 java-x86_64-60 (1.6.0)。现在,APNS 在服务器启动时工作,但一段时间后停止工作,Worklight 服务器日志中没有任何错误。通知永远不会到达设备上。 GCM 一直在正常工作。
-
请联系 JayaKarthik Jayabalan(IBM 同事,Worklight 中的推送通知开发人员)。听起来这需要调查。
-
@IdanAdar jayaKarthik jayabalan 的 stackoverflow id 是什么?
标签: apple-push-notifications ibm-mobilefirst websphere-liberty ibm-jdk