我在本教程中学习JAVA EE 7.0:
https://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html
直到我来到这一部分一切顺利:
代码已成功生成。但它一直说不能找到mysql jdbc驱动程序:
HTTP状态500 - 内部服务器错误
输入例外报告
messageInternal Server Error
description服务器遇到内部错误,导致无法完成此请求。
例外
javax.servlet.ServletException:javax.servlet.jsp.JspException:无法获取连接,DataSource无效:" java.sql.SQLException:没有为jdbc / affablebean找到合适的驱动程序" 根本原因
javax.servlet.jsp.JspException:无法获取连接,DataSource无效:" java.sql.SQLException:没有为jdbc / affablebean找到合适的驱动程序" note备注GlassFish Server Open Source Edition 4.1.1日志中提供了异常的完整堆栈跟踪及其根本原因。
这是我在glassfish的日志中得到的:
警告:ServletContext的上下文路径:/ FA-war与bundle的路径不同:FA-war 警告:StandardWrapperValve [jsp]:servlet jsp的Servlet.service()引发了异常 javax.servlet.jsp.JspException:无法获取连接,DataSource无效:" java.sql.SQLException:没有为jdbc / affablebean找到合适的驱动程序" at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:318) 在org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:201) at org.apache.jsp.test.testDataSource_jsp._jspx_meth_sql_query_0(testDataSource_jsp.java:120) 在org.apache.jsp.test.testDataSource_jsp._jspService(testDataSource_jsp.java:75) 在org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) 在org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。
我尝试将mysql驱动程序放到GLASSFISH的lib目录和WEB-INF / lib中,但都没有用。
但是当我尝试在glassfish中ping这个数据源时,它可以成功ping通。所以这意味着实际上glassfish应该拥有访问mysql所需的一切。
那么问题是什么?我正在做教程讲述的所有内容,除了我使用的是glassfish 4.1.1& netbeans 8.1。
提前致谢。
答案 0 :(得分:0)
我已经弄明白了。看起来这个例外真的可能意味着很多完全不同的情况。
我的情况是:一旦我在glassfish-resources.xml中定义资源(可能名称不正确),它就不会真正出现在glassfish的管理控制台的JDBC条目中。
Glassfish认为它是一个应用程序范围的资源。它被命名为:
FA ----------- java:app / AffableConnPool JDBC连接池 FA ----------- java:app / jdbc / affablebean
看!你看到JNDI被操纵了。我在我的sqlquery taglib中尝试了java:app / jdbc / affablebean,但也无法正常工作。但我设法通过在glassfish中手动定义连接池来解决问题。
如果你遇到同样的问题,试试吧,我的朋友。永远不要陷入类路径问题,例外是厌恶错误。