几天前升级Tomcat 7至7.0.26(Centos 7 YUM更新)后,我的情况很奇怪。DriverManager
无法自动识别MySQL驱动程序,并在Tomcat Server上部署Servlet时返回NULL DB Connection
。另一方面,我的Netbeans上的Glassfish Server效果很好。
简单的测试servlet代码如下:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter())
{
Connection c = MySQLConnector.connect("DBFoobar", "username", "passwd");
String message = null;
if (c == null)
message = "Connection returned null";
else
message = "C is returned: " + c.toString();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<body>");
out.println(message);
.
.
.
和在MySQLConnector
中,jdbc
调用定义如下:
public class MySQLConnector
{
private static final String dbURLPrefix
= "jdbc:mysql://dbfoobar.xxx.uswest2.rds.amazonaws.com:3306/";
public static Connection connect(String dbName, String username, String password)
{
Connection connection = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(dbURLPrefix + dbName
+ "?useUnicode=yes&characterEncoding=UTF-8&useSSL=false", username, password);
.
.
.
当Servlet在Glasshfish服务器上运行时,它会正确显示Connection
对象,但在Tomcat Server上显示Connection returned null
消息。
对此有什么想法吗?到目前为止,我试图将MySQL连接器JAR文件放在/usr/share/tomcat/lib
目录下,但无济于事。war
软件包正确包含MySQL连接器JAR文件。Tomcat 7的先前版本工作正常。
最终找到了答案。这是由于Selinux。我尚未检查详细信息,但是SELINUX似乎可以阻止DriveManager
执行。我修改了配置文件/etc/selinux/config
和禁用的Selinux:
SELINUX=permissive # changed from enforcing
好吧。我放弃。:)我唯一能够发现的事情如下。我正在使用Centos 7。
- 从tomcat
7.0.69
升级到7.0.76
似乎已经从DriverManager
中损坏了Connection
的生成 - 在
/var/log/yum.log
中,OpenJDK(1.8.0)也已升级 - 将整个虚拟EC2实例恢复到先前的备份(使用Tomcat
7.0.69
)之后,代码运行而无需任何问题 -
yum update
再次导致上述错误
希望这会有所帮助。