Использование Pushy с ALPN и драйвером MSSQL Jdbc генерирует java.lang.IllegalAccessError

Я разрабатываю Приложение, которое использует Pushy с доступом HTTP/2 через ALPN для отправки Push-уведомлений на iPhone Apple.

Для этого я настроил JVM для использования ALPN в соответствии с запросом следующего аргумента VM.

-Xbootclasspath/p:<Path To ALPN JAR>

Это подключение к Apple Push Notification Server работает нормально.

Но в том же приложении у меня есть источник данных MSSQL, подключающийся к базе данных через драйвер MSSQL Jdbc. Но когда он пытается подключиться к MSSQL, он выдает следующую ошибку:

java.lang.IllegalAccessError: tried to access field sun.security.ssl.Handshaker.algorithmConstraints from class sun.security.ssl.ClientHandshaker

Может ли кто-нибудь помочь мне с этим или указать мне в правильном направлении.

Полная трассировка стека

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalAccessError: tried to access field sun.security.ssl.Handshaker.algorithmConstraints from class sun.security.ssl.ClientHandshaker
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    ... 58 more
Caused by: java.lang.IllegalAccessError: tried to access field sun.security.ssl.Handshaker.algorithmConstraints from class sun.security.ssl.ClientHandshaker
    at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:778)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:285)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:969)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:904)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1050)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1618)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:621)
    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:57)
    at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:373)
    at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:469)
    at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:162)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:61)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:49)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:78)

Удаление аргумента виртуальной машины устранило проблему источника данных, но соединение ALPN не удалось.

ОБНОВИТЬ

Библиотека Jetty ALPN-Boot переопределит пакет sun.security.ssl Который также доступен в jsse.jar (что означает базовый класс JVM). Это переопределение приводит к сбою источника данных, поскольку MSSQL-сервер не является HTTP2-сервером.

Вот почему я получил

java.lang.IllegalAccessError: tried to access field sun.security.ssl.Handshaker.algorithmConstraints from class sun.security.ssl.ClientHandshaker

В любом случае я мог бы использовать оба HTTP2 и HTTP вместе?

1 ответ

Мне удалось избавиться от этой проблемы с помощью jetty-alpn-agent

Другие вопросы по тегам