Не удается подключить веб-приложение Java 8 (291) на Glassfish 5.1.0 к экземпляру SQL Server 2014

У меня есть веб-приложение JSF, которое работало под Java 6, Glassfish 4.1, SQL Server 2012, Nebeans 8, но я получаю сообщение об ошибке под Java 8, Glassfish 5.1.0, SQL Server 2014, Netbeans 12. Это немного отличается, но это не так. обычно рукопожатие, сокет или класс не найдены (сосредоточены на сервлете).

Ошибка дрожания руки:

      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";
    }

1 ответ

Решение

Это не очень хороший ответ, но если сомневаетесь, то взорвите все ядерным оружием и начните заново.

Я удалил и удалил драйвер 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.

Я очистил, построил и развернул каждый проект до того, как он начал работать в проблемном проекте.

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