无法将 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 文件夹。
在问题项目开始工作之前,我清理、构建和部署了每个项目。
我有一个在 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 文件夹。
在问题项目开始工作之前,我清理、构建和部署了每个项目。