package org.kodejava.jndi;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.Servlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet(name = "JNDITestServlet", urlPatterns = "/jndi-datasource-test")
public class JNDITestServlet extends HttpServlet implements Servlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// This implementation of doGet method show us an example to use
// conn obtained in the getConnection() method.
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
try (Connection connection = getConnection()) {
// A query to get current date time from Oracle database
String sql = "select current_timestamp() as SYSDATE";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
Date date = rs.getTimestamp("SYSDATE");
writer.println("The current date is " + format.format(date));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* Get a database connection from the registered data source in the
* servlet container. To registered the JNDI data source you should
* refer to your servlet container documentation.
*
* @return a database connection
*/
private Connection getConnection() {
Connection connection = null;
try {
InitialContext initialContext = new InitialContext();
Context context = (Context) initialContext.lookup("java:/comp/env");
DataSource dataSource = (DataSource) context.lookup("jdbc/DataSource");
connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
}
Configure the JNDI DataSource in Tomcat conf/context.xml
configuration file. And don’t forget to copy the JDBC driver library to Tomcat’s lib
directory.
<?xml version="1.0" encoding="UTF-8"?>
<Context>
...
<Resource name="jdbc/DataSource" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="root" password="" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/kodejava"/>
...
</Context>
Maven dependencies
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024