如何解决无法将 Glassfish 5.1.0 上的 Java 8 (291) Web 应用程序连接到 SQL Server 2014 实例
我有一个在 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";
}
解决方法
这不是一个很好的答案,但如果有疑问,那就放弃一切,然后重新开始。
我删除并移除了 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 文件夹。
在问题项目开始工作之前,我清理、构建和部署了每个项目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。