我已经安装了MS SQL Server的评估版,并已连接数据库AdventureWorks2016,并已在localhost:4848上运行Glassfish。 SQL Server(配置管理器)上允许TCP / IP连接,TCP端口是1433。我已经从Microsoft JDBC Driver下载了用于SQL Server的Microsoft JDBC Driver 7.0,并将其解压缩到C:\中,并设置CLASSPATH变量以指向并将其副本放入 C:\ Program Files \ glassfish5 \ glassfish \ domains \ domain1 \ lib。我使用Windows身份验证连接到MS SQL Server。 我使用所有默认值创建了AdventureWorks2016连接池。当我ping它时,我得到
java.lang.NoSuchMethodError:sun.security.ssl.SSLSessionImpl。(Lsun / security / ssl / ProtocolVersion; Lsun / security / ssl / CipherSuite; Ljava / util / Collection; Lsun / security / ssl / SessionId; Ljava / lang / String; I)V sun.security.ssl.SSLSessionImpl。(Lsun / security / ssl / ProtocolVersion; Lsun / security / ssl / CipherSuite; Ljava / util / Collection; Lsun / security / ssl / SessionId; Ljava / lang /字符串; I)
我想念什么? java jdk是Java 8(jdk1.8.0_191)和Glassfish 5.0。
我已经降级为java8u151。现在,当我执行ping操作时,错误是:
Ping Connection Pool在AdventureWorks2016中失败。无法分配连接,因为:驱动程序无法通过使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“不支持的curveId:29”。 ClientConnectionId:ebe27ff7-0ce1-4e9d-95fd-52133be8ee01请查看server.log以获取更多详细信息。
正如我已经说过的,我正在服务器上使用Windows身份验证,因为我在笔记本电脑上不需要任何其他东西,并且在我安装MS SQL Server时该方法首先起作用。现在,我尝试
jdbc:sqlserver:// localhost; integratedSecurity = true;
用于URL属性,但没有效果。
答案 0 :(得分:1)
问题“不受支持的curveId:29”已解决。
这是我在Glassfish(Java8内部版本152)中的设置:“-Dcom.sun.net.ssl.enableECC = false”。
答案 1 :(得分:1)
如果将选项放在“ server-config”而不是“ default-config”中,则@VinnhCC给出的答案可以解决该问题。
答案 2 :(得分:0)
您正在遇到GlassFish 5.0和Java版本高于8u161的已知问题。
来自the last time I answered this problem:
解决方案是将Java版本降级为 版本低于8u161 。
I answered this in more detail in another answer,但是,如果您这样做 与降级Java的想法不同,您可以使用the latest GlassFish 5.0.1 nightly或switch to Payara 5, which is derived from GlassFish,并且在大多数情况下应该可以正常工作。
编辑: 请注意,在进行了其中一项更改之后,您仍然需要添加安全例外,以便浏览器接受 自签名证书,但该页面不再可用 问题;我用Java 8u144对此进行了验证
答案 3 :(得分:0)
要使用此功能,必须使用特定版本的JDK:181。如果使用JDK版本181,则只能使其与MS SQL Server JDBC驱动程序保持一致。我希望有更好的使用方法JDK的最新版本,但不幸的是它。