2017-09-19 7 views
-1

数日前にTomcat 7を7.0.26(Centos 7 yum update)にアップグレードした後、私は奇妙な状況に陥りました。 DriverManagerは、MySQLドライバを自動的に認識できず、サーブレットがTomcatサーバーにデプロイされたときにnull db Connectionを返します。一方、NetBeans上のGlassFishサーバーは完全にうまく動作します。DriverManagerはTomcatでのみヌル接続を返し続けます(Glassfishで正常に動作します)

簡単なテスト・サーブレットのコードは以下のようなものです:

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); 
      . 
      . 
      . 

サーブレットはGlasshFishサーバー上で実行されている場合、それを正しくConnectionオブジェクトを表示しますが、Connection returned nullメッセージをTomcatサーバーに表示します。

これに関するご意見はありますか?これまでのところ、私はmysqlコネクタjarファイルを/usr/share/tomcat/libディレクトリの下に置いてみましたが、役に立たなかった。 warパッケージには、mysqlコネクタjarファイルが正しく含まれています。以前のバージョンのTomcat 7はうまくいきました。

+0

nullを返しませんでした。それは例外を投げた。あなたのコードはnullを返しましたが、それはその誤りです。例外は、問題の内容を示します。 – EJP

+0

いいえ、nullを返しました。 SELinuxを無効にすると、例外がスローされることなく正常に動作します。 – jwsohn

答えて

-1

大丈夫です。私は諦めている。 :)私が見つけた唯一の事は次の通りです。私は7.0.76へのTomcat 7.0.69からのアップグレードは/var/log/yum.logからDriverManager

  • からConnection世代が壊れているようだCentOSの7

    • を使用しています、OpenJDKの(1.​​8.0)も復帰した後
    • をアップグレードされました全体の仮想EC2インスタンスを以前のバックアップ(Tomcat 7.0.69)にすると、問題なくコードが実行されます。
    • yum update上記のエラーが再度発生します。

    希望すると便利です。

  • 0

    最後に答えが見つかりました。それはSELinuxによるものです。私は詳細を確認していませんが、SELinuxはDriveManagerの実行を妨げるようです。私は構成ファイル/etc/selinux/configを変更し、SELinuxを無効にしました。

    SELINUX=permissive # changed from enforcing 
    
    関連する問題