无法将 Glassfish 5.1.0 上的 Java 8 (291) Web 应用程序连接到 SQL Server 2014 实例

Can't connect Java 8 (291) web application on Glassfish 5.1.0 to SQL Server 2014 instance

我有一个在 Java 6、Glassfish 4.1、SQL Server 2012、Nebeans 8 下运行的 JSF Web 应用程序,但我在 Java 8、Glassfish 5.1 下收到错误.0,SQL Server 2014,Netbeans 12。它有一些变化,但通常是握手、套接字或 class 未找到(专注于 servlet)。

手抖错误:

java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager
    at sun.security.ssl.Handshaker.init(Handshaker.java:282)
    at sun.security.ssl.Handshaker.<init>(Handshaker.java:242)
    at sun.security.ssl.ClientHandshaker.<init>(ClientHandshaker.java:160)
    at sun.security.ssl.SSLSocketImpl.initHandshaker(SSLSocketImpl.java:1297)
    at sun.security.ssl.SSLSocketImpl.doneConnect(SSLSocketImpl.java:671)
    at sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:551)
    at sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:110)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1606)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1324)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:992)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:828)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at Database.DAO.openConnection(DAO.java:48)

一切都在同一台机器上,我试过没有打开防火墙,所以我不认为这是一个端口问题,尽管 glassfish 服务器日志说它已连接但端口在某些配置下关闭。

我也尝试过使用 Payara,但在那里遇到了失败。

代码看起来很简单,所以很可能是配置/库问题,但我一直没能解决。

public Connection openConnection(){
        //This try/catch should not be necessary, but the driver is not found here
        try{
            Class.forName(dbi.getDriver());
        }catch (ClassNotFoundException e){
                System.out.println("Could not load the driver");
        }
        
        try{
            connect = DriverManager.getConnection((dbi.getUrl()+dbi.getDbName()), dbi.getDbUsername(), dbi.getDbPassword());
        }catch(Exception e){
            e.printStackTrace();  //Point of failure: connect is null
        }
        
        return connect;
    }

public DbInfo(){
        driver      = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        url         = "jdbc:sqlserver://localhost";
        dbName      = ";DatabaseName=Test";
        dbUsername  = "user";
        dbPassword  = "pass";
    }

这不是一个很好的答案,但是当有疑问时,然后核对一切并重新开始。

我删除并删除了 ODBC 驱动程序、SSMS、Netbeans 和 Glassfish,并重新安装了每个组件。我确保在 TCP/UDP 1433-1434 上打开了防火墙,并且所有 SQL 服务器服务都是 运行.

我确保在建议的 Program Files 目录中提供了 ODBC 驱动程序。 我确保启用 SQL 服务器和 Windows 授权,启用 sa 登录,允许远程连接。

我复制了已安装的 ODBC 驱动程序 sqljdbc42.jar 以使其可用于项目。我最小化了每个项目引用的 jar 数量,并包含了 Java 8 API 和 Java 8 Web API 库。

我从 Glassfish 的 grzzly jar 中删除了 sun 文件夹。

在问题项目开始工作之前,我清理、构建和部署了每个项目。