2017-09-19 2 views
-1

Je suis dans une situation étrange après la mise à niveau de Tomcat 7 vers la version 7.0.26 (mise à jour Centos 7 yum) il y a quelques jours. DriverManager ne parvient pas à reconnaître automatiquement le pilote MySQL et renvoie une valeur nulle Connection lorsque le servlet est déployé sur le serveur Tomcat. D'un autre côté, le serveur GlassFish sur mon NetBeans fonctionne parfaitement.DriverManager continue de renvoyer la connexion null uniquement sur Tomcat (fonctionne très bien sur Glassfish)

Le code de servlet test simple est comme ci-dessous:

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

et MySQLConnector, l'appel jdbc est défini comme ci-dessous:

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

Lorsque le servlet est exécuté sur le serveur GlasshFish, correctement affiche l'objet Connection, mais affiche le message Connection returned null sur le serveur Tomcat.

Des idées à ce sujet? Jusqu'ici, j'ai essayé de placer le dossier de jar de connecteur de mysql sous le répertoire /usr/share/tomcat/lib mais en vain. Le package war contient correctement le fichier jar du connecteur mysql. La version précédente de Tomcat 7 a bien fonctionné.

+0

Il n'a pas renvoyé la valeur null. Il a jeté une exception. Votre code a renvoyé null, mais c'est sa faute. L'exception vous indique le problème. – EJP

+0

Non, il a retourné null. Avec SELinux désactivé, il fonctionne correctement sans aucune exception. – jwsohn

Répondre

-1

OK. J'abandonne. :) Les seules choses que j'ai pu découvrir sont les suivantes. J'utilise CentOS 7.

  • Mise à niveau de Tomcat 7.0.69-7.0.76 semble avoir brisé la génération Connection de DriverManager
  • De l'/var/log/yum.log, OpenJDK (1.8.0) a également été mis à jour
  • Après la revenir l'instance EC2 virtuelle entière à une sauvegarde précédente (avec Tomcat 7.0.69), le code s'exécute sans aucun problème
  • yum update entraîne à nouveau l'erreur ci-dessus

Espérons que cela aide.

0

Enfin trouvé la réponse. C'était dû à SELinux. Je n'ai pas vérifié les détails, mais SELinux semble empêcher l'exécution de DriveManager. J'ai modifié le fichier de configuration /etc/selinux/config et désactivé SELinux:

SELINUX=permissive # changed from enforcing