2017-09-19 27 views
-1

幾天前將Tomcat 7升級到7.0.26(Centos 7 yum update)後出現了一個奇怪的情況。 DriverManager未能自動識別MySQL驅動程序,並且在servlet部署在Tomcat服務器上時返回空分鐘Connection。另一方面,我的NetBeans上的GlassFish服務器工作良好。DriverManager只在Tomcat上返回null連接(在Glassfish上正常工作)

的簡單的測試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服務器上顯示Connection returned null消息。

對此的任何想法?到目前爲止,我已經嘗試將mysql連接器jar文件放在/usr/share/tomcat/lib目錄下,但無濟於事。 war包正確包含mysql連接器jar文件。以前版本的Tomcat 7運行良好。

+0

它沒有返回null。它拋出了一個例外。你的代碼返回null,但這是它的錯。異常告訴你問題是什麼。 – EJP

+0

不,它確實返回null。在禁用SELinux的情況下,它可以正常工作,不會引發任何異常。 – jwsohn

回答

-1

好的。我放棄了。 :)我能找到的唯一的東西如下。我使用CentOS的7

  • 升級從Tomcat 7.0.697.0.76似乎已經打破了Connection代從DriverManager
  • /var/log/yum.log,OpenJDK的(1.8.0)也得到了升級
  • 回覆後整個虛擬EC2實例到以前的備份(使用Tomcat 7.0.69),代碼運行沒有任何問題
  • yum update再次導致以上錯誤

希望這會有所幫助。

0

終於找到了答案。這是由於SELinux。我沒有檢查細節,但SELinux似乎阻止DriveManager執行。我修改了配置文件/etc/selinux/config並禁用了SELinux:

SELINUX=permissive # changed from enforcing 
相關問題