Я работаю с подключением к базе данных, используя JNDI. Я уверен, что развертывание в порядке. Потому что, когда я тестирую его в JSP ниже, он работает нормально.
</head>
<body>
<%
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/airlineticket");
Connection conn = ds.getConnection();
out.println(conn);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
изображение успешного подключения
Но когда я использую класс ConnectionFactory, возникает ошибка: ConnectionFactory не может быть решена. Я просто поместил код подключения в класс ConnectionFactory, почему это произошло?
Класс ConnectionFactory:
package com.db;
import javax.naming.*;
import java.sql.*;
import org.apache.tomcat.jdbc.pool.DataSource;
public class ConnectionFactory {
private ConnectionFactory() {};
public static Connection getConnection()
{
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/airlineticket");
return ds.getConnection();
}
catch (NamingException e)
{
System.out.print("connection failed");
return null;
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
}
}
тест JSP:
<%@ page language="java" import="java.util.*,com.db.ConnectionFactory" pageEncoding="UTF-8"%>
</head>
<body>
<%
try {
Connection conn = ConnectionFactory.getConnection();
out.println(conn);
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
web.xml (/WEB-INF/web.xml):
<resource-ref>
<res-ref-name>jdbc/airlineticket</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
context.xml (/META-INF/context.xml):
<Context>
<Resource name="jdbc/airlineticket"
auth="Container"
type="javax.sql.DataSource"
username="Manager"
password="123456"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3306/airlineticket"
maxActive="50"
masIdle="20"> </Resource>
</Context>