jueves, 24 de mayo de 2012

Tutorial Pool de Conexiones Con Oracle En Linux !


Tutorial para la creación de un pool de conexiones con oracle en Linux.


Autor: Cristian Lara
Trabajo: Bonus Point nº8.
Curso: Introducción al desarrollo de aplicaciones empresariales.
Profesor: Cristian Ortiz.




Para descargar el ojdbc6.jar lo podemos bajar del siguiente link:


Como tenemos exportado el ojdbc6.jar ( Debemos tenerlo par
a correr nuestro servidor de aplicaciones glassfish )
Nos vamos a la siguiente direccion por la terminal:
- /usr/local/glassfish-3.1.2/glassfish/domains/domain1/lib/ext
Ahora copiamos el ojdbc6
en la direccion, pero primero le damos los permisos, esto lo podemos hacer de la siguiente manera:

- chmod 777 /home/<usuario>/desktop/ojdbc6.jar
- cp /home/<usuario>/desktop/ojdb6.jar

Y ahora aplicamos el siguiente comando:

- locate "lib/ext"

Ahora podemos comenzar con la instalacion de nuestro pool de conexiones.


Paso1: Para comenzar debemos tener corriendo nuestro servidor de aplicaciones

Paso2: Ahora abrimos alguno de nuestros navegadores (Firefox,Chrome,Opera,etc), aunque de preferencia se recomienda ocupar Mozilla Firefox por su compatibilidad con diferentes aplicaciones web. Luego de esto nos vamos a el puerto donde tenemos configurado nuestro Servidor de Aplicaciones. Para este caso, nosotros ocupamos el puero "8080", entonces nos dirigimos a la siguiente ruta: "http://localhost:8080". En otros casos tambien puede ser la IP local de su ordenador que suele ser "http://127.0.0.1:8080". Recordemos que para NUESTRO caso ocupamos el puerto 8080 ya que nuestro servidor de aplicaciones esta configurado en ese puerto. 

 
















Paso3: Ahora nos dirigimos a donde dice "go to the Administration Console", que en español se leeria "ir a la administracion de la consola". Estando dentro nos dirijimos a "Recursos", luego a "JDBC" para luego ir a "Pool de conexiones". Desde Ahora en adelante comenzaremos a crear nuestro Pool de conexiones en Oracle.




Paso4: Ya estando en Pool de Conexiones, veremos algunos ya creados por default, pero nosotros queremos crear nuestro propio pool, con nuestros parametros y nuestras caracteristicas por lo tanto nos vamos a nuevo o new.


















Paso5: Ahora como nos damos cuenta, comienza la creacion del nuevo pool de conexiones. Para empezar, Colocamos el nombre que le queremos dar a nuestro pool de conexiones. Para nuestro caso le pondremos "EjemploPool", y luego en la parte posterior(Tipo de recurso) seleccionamos la opcion de "javax.sql.ConnectionPoolDataSource" y abajo en "Proveedor de base de datos", la base de datos que vamos a utilizar, para esta ocacion seria "Oracle"(Recordemos que las casillas que no nombramos deben quedar default) y luego presionamos siguiente.

















Paso6: Al apretar siguiente nos saldra varios campos. Primero, La configuracion general, la cual ya realizamos al principio, por ende no debemos cambiar nada. Mas abajo, nos encontramos con la configuracion de pool y es aquí donde debemos comenzar a editar la configuracion.

- En tamaño Inicial y minimo designamos la cantidad minimi e inicial de conexiones. Este valor puede ser decidido por ustedes pero lo recomendado son 2.

- Luego tamaño del pool maximo. Esto corresponde al valor maximo de conexiones que puede sostener nuestro pool, como la configuracion que estamo haciendo es basica, recomendamos 8.

- Ahora nos encontramos con la cantidad de cambio de tamaño de pool. Esto corresponde a cuantas conexiones se van a eliminar cuando el timeout de inactividad del pool caduque. Recomendado 2

- Timeout de inactividad. Tiempo que una conexion puede mantener sin actividad en el pool. recomendado 300

- Tiempo maximo de espera. Tiempo maximo que se espera para la conexion, antes que se envie un mensaje de timeout. Recomendado 10000.

Terminando con esta parte nos metemos a la "Transaccion". Aqui comenzaremos a editar sobre las "Propiedades adicionales".
Debemos tener lo siguiente:

Nombre                                    Valor
ExplicitCachingEnable             false
MaxStatements                           0
ImplicitCachingEnable             false
LoginTimeOut                           0
URL                               jdbc.oracle:thin:@localhost:1521:XE

(Donde localhost es la ip del ordenador a  conectar. 1521 donde  configuramos nuestra base de datos y XE el nombre de la base de datos)

PortNumber                             1521  (Puerto de oracle)
DataBaseName                   XE   (Nombre de la base de datos)
DataSourceName                     OracleConnectionPoolDataSource 
NetworkProtocol                        tcp
ServerName                             Oracle
User                                         ejemplo   (Nombre del usuario de la base de datos)
Password                                ejemplo123 (Password de la base de datos) 










...y presionamos Finalizar (Recordemos que si las propiedades no se encuentran, presionamos agregar propiedad y listo).

















Codigo Java para conectarse al Pool:


1 <%@page import="java.sql.Connection"%>
 2 <%@page import="java.sql.ResultSet"%>
 3 <%@page import="java.sql.PreparedStatement"%>
 4 <%@page import="javax.naming.NamingException"%>
 5 <%@page import="java.sql.SQLException"%>
 6 <%@page import="javax.sql.DataSource"%>
 7 <%@page import="javax.naming.InitialContext"%>
 8 <%@page import="javax.naming.Context"%>
 9 <%@page contentType="text/html" pageEncoding="UTF-8"%>
10 <!DOCTYPE html>
11 <html>
12     <head>
13         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
14         <title>No molestar, estoy el pool !!!</title>
15     </head>
16     <body>
17         <h1>Estoy en Pool!</h1>
18         <%
19             Connection connection = null;   // objeto conexion
20
21             try {
22                 System.out.println("\n\n\n\n ------------");
23                 Context ctx = new InitialContext();     // interfaz representa un contexto de nomenclatura,
24                 DataSource ds = (DataSource) ctx.lookup("jdbc/ejemplo");   // definimos el pool de conexiones a utilizar
25
26                 System.out.println("------------ \n\n\n\n ");
27                 connection = ds.getConnection();    // obtenemos la conexion a traves de un pool de conexiones
28
29                 if (connection == null) {
30                     out.print("<p>Conexion es null</p>");                  
31                 }
32
33                 // A continuacion se muestra una consulta normal a la base de datos
34                 String query = "SELECT * FROM palabra";
35                 PreparedStatement statement = connection.prepareStatement(query);
36                 ResultSet rs = statement.executeQuery();
37                 while (rs.next()) {
38                     out.print(rs.getString(2) + "<br>");    // visualizar la columna 2 del ResultSet.
39                 }              
40             } catch (NamingException ex) {
41                 System.out.println("Error NamingException: " + ex.getMessage());
42             } catch (SQLException ex) {
43                 System.out.println("Error SQLException: " + ex.getMessage());
44             }
45         %>
46
47
48     </body>
49 </html>
50