2

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

その後の再試行はすべて同じ失敗に終わります。

これは JDK 1.5 の問題 (1.6 で修正済み) であり、IbmPKIX トラスト マネージャーを使用して修正できることを示唆する、「エンド ユーザーが CA として機能しようとした」および「APNS」に関する Google ヒットがいくつかありますが、私は私はJDK 1.7を使用しており、java.securityの信頼マネージャーはPKIXであることを確認してください

4

2 に答える 2

4

Worklight 6.0.0.2 フィックスパックにアップグレードした後、JDK 7 を実行している Websphere で同じ問題が発生しました。調査の結果、この問題は IBM JDK 7 で報告されていることがわかりました。 JDK。JDK 6 の cacerts ファイルを置き換えることで回避策を試したところ、うまくいきました。

 Replace jre\lib\security\cacerts file in JDK 7 with
 jre\lib\security\cacerts file in JDK 6

http://www-01.ibm.com/support/docview.wss?uid=swg1IV43936

注: APNs との TLS セッションを確立するには、プロバイダーのサーバーに Entrust Secure CA ルート証明書をインストールする必要があります。サーバーが OS X を実行している場合、このルート証明書はすでにキーチェーンにあります。他のシステムでは、証明書が利用できない場合があります。この証明書は、Entrust SSL Certificates Web サイトからダウンロードできます。

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

于 2014-02-23T23:41:17.987 に答える
1

繰り返しますが…これを理解するのに十分な時間がかかりました。

根本的な問題は、Worklight サーバーが SoftLayer でホストされていることでした。明らかに、SoftLayer ファイアウォールはデフォルトでソケット接続をモニターし、接続が 10 分間アイドル状態になるとドロップします。

これで、APN に接続された worklight サーバーとプッシュが機能しました。その後、プッシュ通知なしで 10 分が経過し、ファイアウォールは Worklight サーバーと APNS サーバーの間のソケットをドロップしました。Worklight に APNS サービス用のデッド ソケットがあったため、後続のプッシュ要求はすべてサイレントに失敗しました。

APNS への接続が無期限にアイドル状態になるようにファイアウォールを再構成し、問題は解決しました。

于 2014-03-07T16:16:34.773 に答える