数日前に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はうまくいきました。
nullを返しませんでした。それは例外を投げた。あなたのコードはnullを返しましたが、それはその誤りです。例外は、問題の内容を示します。 – EJP
いいえ、nullを返しました。 SELinuxを無効にすると、例外がスローされることなく正常に動作します。 – jwsohn