package oracle.otnsamples.jdbc.pooling;
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.sql.Statement;
import java.util.Enumeration; import java.util.Properties; import java.util.ResourceBundle; import java.util.Vector;
import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.PooledConnection;
import oracle.jdbc.pool.OracleConnectionPoolDataSource;
public class ConnectionPoolingServlet extends HttpServlet { private ServletContext context = null;
private OracleConnectionPoolDataSource connectionPoolDS = null; private String servletPath = null;
public void init( ServletConfig config ) throws ServletException { super.init( config ); this.createConnectionPool( ); context = config.getServletContext( ); }
public void service( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException { res.setContentType( "text/html" );
PrintWriter out = new PrintWriter( res.getOutputStream( ) );
String reqType = req.getParameter( "REQ_TYPE" );
if ( reqType == null ) { servletPath = req.getRequestURI( );
out.println( ConnectionPoolingServletHTML.generateMainPageHTML( servletPath ) ); } else if ( reqType.equals( "ALL_HOTELS" ) ) { Vector hotels = populateHotels( );
out.println( ConnectionPoolingServletHTML.generateTableFrameHTML( hotels, servletPath ) ); } else if ( reqType.equals( "RESERVE_ROOM" ) ) { int hotelId = Integer.parseInt( req.getParameter( "HOTEL_ID" ) );
Vector roomTypes = retrieveRoomTypes( hotelId ); out.println( ConnectionPoolingServletHTML.generateReservePageHTML( hotelId, roomTypes, servletPath ) ); } else if ( reqType.equals( "DO_RESERVE"
) ) { int hotelId = Integer.parseInt( req.getParameter( "HOTEL_ID" ) );
String status = reserveRoom( hotelId, req.getParameter( "ARR_DATE" ), req.getParameter( "BY" ), req.getParameter( "ROOM_TYPE" ), req.getParameter( "NUM_NIGHTS" ), req.getParameter( "NUM_ROOMS" ) ); String page = null;
if ( status == null ) { page = ConnectionPoolingServletHTML.generateMessagePage( "The Room is reserved for <br>" + req.getParameter( "NUM_NIGHTS" ) + " day(s) from " + req.getParameter( "ARR_DATE" ) ); } else { page = ConnectionPoolingServletHTML.generateMessagePage( status ); }
out.println( page ); } else if ( reqType.equals( "CANCEL_ROOM" ) ) { int hotelId = Integer.parseInt( req.getParameter( "HOTEL_ID" ) );
Vector reservations = this.getRoomBookings( hotelId ); out.println( ConnectionPoolingServletHTML. generateReservationDetailsPageHTML( hotelId, reservations, servletPath ) ); } else if ( reqType.equals( "DO_CANCEL" ) ) { int bookingId
= Integer.parseInt( req.getParameter( "RESV_SELECT" ) ); String status = roomCancellation( bookingId );
if ( status != null ) { out.println( ConnectionPoolingServletHTML.generateMessagePage( "Error in canceling the reservation " + status ) ); } else { out.println( ConnectionPoolingServletHTML.generateMessagePage( "Selected booking has been canceled" ) ); } } else if ( reqType.equals( "BUTTON" ) ) {
out.println( ConnectionPoolingServletHTML. generateButtonFrameHTML( servletPath ) ); } else if ( reqType.equals( "PICTURE" ) ) { out.println( ConnectionPoolingServletHTML.generateImageFrameHTML( ) ); }
out.close( ); }
private void createConnectionPool( ) { try { Properties prop = this.loadParams( "Connection" );
connectionPoolDS = new OracleConnectionPoolDataSource( );
String url = "jdbc:oracle:thin:@" + prop.get( "HostName" ) + ":" + prop.get( "Port" ) + ":" + prop.get( "SID" );
connectionPoolDS.setURL( url );
connectionPoolDS.setUser( (String) prop.get( "UserName" ) );
connectionPoolDS.setPassword( (String) prop.get( "Password" ) ); } catch ( SQLException ex ) { context.log( ex.toString( ) ); } catch ( IOException ex ) { context.log( ex.toString( ) ); } }
private static Properties loadParams( String file ) throws IOException { Properties prop = new Properties( ); ResourceBundle bundle = ResourceBundle.getBundle( file );
Enumeration enum = bundle.getKeys( ); String key = null;
while ( enum.hasMoreElements( ) ) { key = (String) enum.nextElement( ); prop.put( key, bundle.getObject( key ) ); }
return prop; }
private Vector retrieveRoomTypes( int hotId ) { Vector roomType = new Vector( );
PooledConnection pooledconn = null; Connection connection = null;
try { pooledconn = connectionPoolDS.getPooledConnection( );
connection = pooledconn.getConnection( );
PreparedStatement pst = connection.prepareStatement( "SELECT room_type FROM otn_available_room_types " + "WHERE hot_id = ?" );
pst.setInt( 1, hotId );
ResultSet resultSet = pst.executeQuery( );
while ( resultSet.next( ) )
roomType.addElement( resultSet.getString( 1 ) );
pst.close( ); } catch ( SQLException ex ) { context.log( ex.toString( ) ); } finally {
if ( connection != null ) { try { connection.close( ); pooledconn.close( ); } catch ( SQLException e ) { context.log( e.toString( ) ); } } }
return roomType; }
private String reserveRoom( int hotelId, String arrDate, String name, String roomType, String numNights, String numRooms ) { PooledConnection pooledconn = null; Connection connection = null;
try { pooledconn = connectionPoolDS.getPooledConnection( );
connection = pooledconn.getConnection( );
Statement stmt = connection.createStatement( );
ResultSet resultSet = stmt.executeQuery( "SELECT otn_hotel_booking_id.nextval FROM dual" );
int bookingId = 0;
if ( resultSet.next( ) ) { bookingId = resultSet.getInt( 1 ); }
stmt.close( );
Statement st = connection.createStatement( );
st.close( );
PreparedStatement pst = connection.prepareStatement( "INSERT INTO otn_hotel_bookings VALUES (?,?,?,?,?,?,?,sysdate)" );
pst.setInt( 1, bookingId ); pst.setInt( 2, hotelId ); pst.setString( 3, arrDate ); pst.setInt( 4, Integer.parseInt( numNights ) ); pst.setInt( 5, Integer.parseInt( numRooms ) ); pst.setString( 6, roomType ); pst.setString( 7, name );
pst.execute( );
pst.close( );
connection.commit( );
return ( null ); } catch ( Exception ex ) {
if ( ex.toString( ).indexOf( "ORA-00001" ) == -1 ) { return " Error in Creating the Reservation: " + ex.toString( ); } else { return " ERROR! The hotel room has been reserved already for the " + " specified date"; } } finally {
if ( connection != null ) { try { connection.close( ); pooledconn.close( ); } catch ( SQLException e ) { context.log( e.toString( ) ); } } } }
private Vector getRoomBookings( int hotId ) { Vector reservations = new Vector( ); PooledConnection pooledconn = null; Connection connection = null;
try { pooledconn = connectionPoolDS.getPooledConnection( );
connection = pooledconn.getConnection( );
PreparedStatement pst = connection.prepareStatement( "SELECT booking_id,TO_CHAR(arrival_date,'DD-Mon-YYYY')" + ",no_of_nights,no_of_rooms,room_type, reserved_by, "+ " TO_CHAR(reserved_date,'DD-Mon-YYYY')" + " FROM otn_hotel_bookings WHERE hot_id = ? " );
pst.setInt( 1, hotId );
ResultSet resultSet = pst.executeQuery( );
String name = ""; String reserveDate = "";
while ( resultSet.next( ) ) {
Vector tempData = new Vector( );
tempData.addElement( resultSet.getString( 1 ) ); tempData.addElement( resultSet.getString( 5 ) ); tempData.addElement( resultSet.getString( 3 ) ); tempData.addElement( resultSet.getString( 4 ) ); tempData.addElement( resultSet.getString(
2 ) ); tempData.addElement( resultSet.getString( 6 ) ); tempData.addElement( resultSet.getString( 7 ) ); reservations.addElement( tempData ); }
pst.close( ); } catch ( SQLException ex ) { context.log( ex.toString( ) ); } finally {
if ( connection != null ) { try { connection.close( ); pooledconn.close( ); } catch ( SQLException e ) { context.log( e.toString( ) ); } } }
return reservations; }
private String roomCancellation( int bookId ) { PooledConnection pooledconn = null; Connection connection = null;
try { pooledconn = connectionPoolDS.getPooledConnection( );
connection = pooledconn.getConnection( );
PreparedStatement pstmt = connection.prepareStatement( "DELETE FROM otn_hotel_bookings WHERE booking_id = ?" );
pstmt.setInt( 1, bookId );
int numb = pstmt.executeUpdate( );
connection.commit( );
pstmt.close( ); } catch ( SQLException ex ) {
return "Error in deleting row " + ex.toString( ); } finally {
if ( connection != null ) { try { connection.close( ); pooledconn.close( ); } catch ( SQLException e ) { context.log( e.toString( ) ); } } }
return null; }
private Vector populateHotels( ) { Vector hotelDetails = new Vector( ); PooledConnection pooledconn = null; Connection connection = null;
try { pooledconn = connectionPoolDS.getPooledConnection( );
connection = pooledconn.getConnection( );
Statement statement = connection.createStatement( );
ResultSet resultSet = statement.executeQuery( "SELECT id,name,address,city FROM otn_hotels " );
while ( resultSet.next( ) ) { Vector hotel = new Vector( ); hotel.addElement( resultSet.getString( 1 ) ); hotel.addElement( resultSet.getString( 2 ) ); hotel.addElement( resultSet.getString( 3 ) ); hotel.addElement( resultSet.getString( 4 ) ); hotelDetails.addElement( hotel ); }
statement.close( ); } catch ( SQLException ex ) { context.log( ex.toString( ) ); } finally {
if ( connection != null ) { try { connection.close( ); pooledconn.close( ); } catch ( SQLException e ) { context.log( e.toString( ) ); } } }
return hotelDetails; }
public String getServletInfo( ) { return "Hotel Servlet Information"; }
public void destroy( ) { super.destroy( );
if ( connectionPoolDS != null ) { connectionPoolDS = null; } } }
|