0

我有一个在 Java 6、Glassfish 4.1、SQL Server 2012、Nebeans 8 下工作的 JSF Web 应用程序,但我在 Java 8、Glassfish 5.1.0、SQL Server 2014、Netbeans 12 下收到错误。它有所不同,但确实如此通常是未找到握手、套接字或类(专注于 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";
    }
4

1 回答 1

0

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

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

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

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

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

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

于 2021-05-16T20:13:10.603 回答