Oracle JDBC DataSource en JBoss … y 10 cosas que tengo que decir el día de hoy

Posted on July 19th, 2007 by benek.
Categories: Development, My way of life...

Hace unas semanas que no había podido entrar… la razón? un proyecto/negocio corriendo que no me deja tiempo de nada…

Hoy vi que una chica argentina revivíó un post que puse hace año y algo: sobre 10 cosas que tenía que decir en ese momento, y emularé la idea para hacer lo mismo un año y algo después, o sea hoy! :)

  1. Amo a mi novia… y aunque un año y medio nos ha dado algunos desguisos, no quiero separarme nunca de ella, Alexa eres el amor de mi vida :) Te amo!
  2. Nuevamente vuelvo a dar cursos, casi a dos años de haber sido instructor de Solaris en Hildebrando vuelvo a la escena con Java/J2EE, me gusta dar cursos, mientras enseñas aprendes otro tanto, y eso es bueno!
  3. Disculpen Hackerss y Energía por ausentarme 3 semanas sin avisar, apenas avisé pero en verdad que no tenía nada de tiempo :)
  4. Necesito ya las certificaciones Java -.- al menos hasta Web Components.
  5. Estoy en un equipo de fútbol de una liga de aqui de Querétaro y la cancha está super bien :D en esa cancha de hecho el Necaxa entrena niños, aqui una foto (ahi salgo al fondo):
    Cancha de fútbol
    Click para agrandar
  6. Por fin cambié de celular, ninguno me convenció más que el K790 (Cybershot), principalmente por los 3.2 megapixeles y el flash de xenon.
  7. Me alegra mucho que mi mejor amigo (Danniel) haya salido bien de su operación y que no haya pasado a más, corriste con suerte brother, otro loco si te apunta en serio y ahi te deja, de la mano a la vida mil veces la mano, ojalá no tengas secuelas graves, ánimo!!
  8. Definitivamente aqui en Querétaro la vida es diferente, fuera presiones y tráfico, exceso de gente y un largo etc… da más tiempo de todo de este lado :)
  9. Prometo mantener actualizado mi blog mucho más seguido!!!
  10. Tomen esto como meme, le paso esta a Edgar Tish, Morgana, Jazz, Paranoik y Winsmurf!!! si no saben que es eso de ‘meme’ tienen que poner sus 10 cosas que tienen que decir hoy en su blog y a su vez pasarla a otros 5 :P

Seguimos con la parte del coding…

Oracle JDBC Data Source en Jboss

Autor: Javier Benek (blog.benek.org)
Para: http://www.hackerss.com
Usando:

* JDK 1.6 u1
* JBoss 5.0.0.Beta1
* Oracle 10g XE

Habrá algunas veces cuando no querramos que una conexión a la base de datos esté definida en el código fuente, con todo y usuario y password. Las razones? la más importante de todas ellas es cuando manejamos más de un ambiente de desarrollo, con una base de datos para cada uno (supongamos un ambiente de desarrollo, otro de pruebas y finalmente producción). Por supuesto no son los mismos datos de conexión para una y para otra (usuario, password, sid, y regularmente hasta host). Hacerlo en el código fuente obviamente obligaría a cambiar esa parte del código fuente cada vez que llevemos la aplicación de un ambiente a otro.

En este caso, haré el ejemplo con JBoss, un excelente proyecto Servidor de Aplicaciones, para quienes tengan la duda, no! no es solamente un contenedor :)

Esto será sencillo, así que pongamos atención…

* Un DataSource es un objeto JNDI (Java Naming and Directory Interface) con el cuál obtendremos una conexión desde un Connection Pool hacia una base de datos.

* Lo primero que necesitamos es obtener el jar que contiene el Driver JDBC de Oracle, pueden ocupar el clásico que es classess12.jar, aunque yo ocupé ojdbc14.jar, la diferencia es que este último es para su uso con las últimas versiones del JDK: 1.4 - 1.5, mientras classes12.jar está optimizado para JDK 1.2 y 1.3. Lo bajan de aqui: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html

* Ahora tomaremos un ejemplo que ya trae Jboss en sí, copiamos desde /docs/examples/jca/oracle-ds.xml a nuestro directorio /server/default/deploy (si utilizan el driver transaccional[XA] copien oracle-xa-ds.xml)

Tenemos que elegir que driver vamos a utilizar:

Oracle OCI Type 2 Driver

* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:oci8:@<database>

Oracle OCI Thin Type 4 Driver

* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:thin:@<host>:<port>:<database>

Oracle OCI XA Type 2 Driver

* Class: oracle.jdbc.xa.client.OracleXADataSource
* URL: jdbc:oracle:thin:@<host>:<port>:<database>

Oracle OCI Type 2 Driver

* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:oci8:@<database>

* En este caso usaré el ‘Thin’, así que ahora editamos el oracle-ds.xml en estas partes:

<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@bnk:1521:XE</connection-url>

<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>usuario</user-name>
<password>password</password>

* Si no se saben los datos de host, puerto y SID, están en el network/ADMIN/tnsnames.ora de Oracle.

* Ahora editaremos el standardjaws.xml que está en /server/default/conf (puede venir como jaws.xml), ya que por default JBoss está configurado para conectar con HypersonicDB, pero este no es el caso ya que nosotros lo haremos con Oracle.

<jaws>
<datasource>java:/OracleDS</datasource>
<type-mapping>Oracle10</type-mapping>
</jaws>

* Nos seguimos con el standardjbosscmp-jdbc.xml (puede venir como jbosscmp-jdbc.xml) y modificamos esta parte:

<datasource>java:/OracleDS</datasource>

* Finalmente el login-config.xml, agregamos una application-policy con el nombre OracleDBRealm de este modo:

<application-policy name = “OracleDbRealm”>
<authentication>
<login-module code = “org.jboss.resource.security.ConfiguredIdentityLoginModule” flag = “required”>
<module-option name = “principal”>sa</module-option>
<module-option name = “userName”>sa</module-option>
<module-option name = “password”></module-option>
<module-option name =”managedConnectionFactoryName”>
jboss.jca:service=LocalTxCM,name=OracleDS
</module-option>
</login-module>
</authentication>
</application-policy>

* Ahora ya tenemos nuestro JBoss listo para poder utilizar una base de datos Oracle! :)

* Lo siguiente es a desición del programador y el patrón de diseño que esté utilizando en su proyecto. En mi caso Utilizo el patrón de acceso a datos DAO, así que creo una clase GenericDAO, la cuál va a ser una superclase con un método que devolverá un objeto Connection utilizando la configuración que acabamos de crear.

GenericDAO.java:

package org.sintelti.dao;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.sql.DataSource;

/**
* Clase para crear una conexion vía JNDI a Oracle 10 XE!
*
* @author Javier Benek
* @version v0.1
*/
public class GenericDAO {
/**
* Metodo para crear y configurar una conexion!
*
* @return Se devuelve un objeto Connection con la conexion ya configurada!
*
* @throws NamingException !
*/
public Connection getConnection() throws NamingException {
Connection cnn = null;

try {
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource) initialContext.lookup(”java:OracleDS”);

try {
cnn = ds.getConnection();
} catch (SQLException sqle) {
System.out.println(
“Error obteniendo la conexión en GenericDAO: ” +
sqle.getMessage());
}
} catch (NamingException ne) {
System.out.println(
“Error en el método getConnection() de la clase GenericDAO: ” +
ne.getMessage());
}

return cnn;
}
}

* Esta clase será utilizada cada vez que desarrollemos un caso de uso o un include, ya que crearemos
la clase DAO específica para ese include (o caso de uso) y extenderemos de GenericDAO, llamaremos al
método que le he llamado getConnection() para obtener una instancia de la conexión y la utilizaremos como deseemos.

Pongo de ejemplo una clase DAO.

SiiOperacionDAO:

package org.sintelti.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.NamingException;

/**
* Clase para obtener las capitales de los estados de la república!
*
* @author Javier Benek
* @version v0.1
*/
public class SiiOperacionDAO extends GenericDAO {
/**
* Metodo para generar la consulta!
*/
public void generaConsulta() {
Connection cnn = null;
Statement st = null;
ResultSet rs = null;

try {
cnn = getConnection();
} catch (NamingException ne) {
System.out.println(
“NamingException en el metodo generaConsulta() de la clase SiiOperacionDAO: ” +
ne.getMessage());
}

try {
st = cnn.createStatement();

rs = st.executeQuery(”select * from estados order by id_estado asc”);

while (rs.next()) {
System.out.println(rs.getString(”CAPITAL”));
}
} catch (SQLException sqle) {
System.out.println(
“Error SQL en el metodo generaConsulta() de la clase SiiOperacionDAO: ” +
sqle.getMessage());
}
}
}

* Ya en este punto, tenemos resuelto todo, depende de la arquitectura de la aplicación y de la lógica de negocio
el saber desde donde se implementará esta clase, en mi caso desde mi clase Business (Patrón de diseño Business-Delegate)

* Suponemos que hasta este momento hemos ya hecho Deploy a nuestro proyecto, en mi caso mi proyecto curso-struts.war
ya está sobre /server/default/deploy en mi carpeta de Jboss, solo es cosa de levantar el servidor y voila!

Bueno ya cumplí, espero que comenten. Saludos a todos!! :)

click!

Visto 41581 veces por 9597 visitantes

17 comments.

Comment on July 19th, 2007.

Espero que asi sea y mantengas actualizado tu blog perro, por otro lado tengo un par de cuates que tambien se fueron a vivir a Queretaro y dicen que si es otro pedo, pero ps igual yo ya tengo por aca hecha mi vida.
Por si no me creías mi carnala estaba aqui junto a mí y si te estaba mandando saludos.
Por cierto ya publicare mi meme y lo pasare a 5 mas.

Saludos desde la Campestre mijo

Comment on July 19th, 2007.

Pss XD Ya conteste el meme => Te extrañooo!! Deberias checarnos de vez en cuando y de cuando en vez u_u se te quiereeee!!!! Y date un roll por mi blog. :**********

Morgana.

Comment on July 20th, 2007.

y feliz dia del amigo
porque aca en argentina
hoy es eso
jajajaj

Saludos benek

Comment on July 20th, 2007.

INTERESANTE PENEK….
SIGUE POSTEANDO ESAS COSAS (?)
NOS VEMOS…
CUIDATE!

Pausa
Comment on July 20th, 2007.

Hey chicooooo un gusto enorme conocerlo!! es usted bien chido en serio me acompa~aba en las ma~anas a no aburrirme (claro ute pobre se tenia q desvelar jiji) pero cuidese mucho ya se le extra~a pero bueno saber de usted siempre es divertido pasatela cool!!!!!! saluditos nubladitos desde alemania!!!!

Norma
Comment on July 20th, 2007.

Hola tío!!!
Dices tantas cosas buenas de Querétaro que hasta me dan ganas de pasar un tiempo por allá. Espero que si logres convencer a algun buitre para que te haga compañía.
Es verdad que me estaban interrogando sobre tu vida pero obviamente no podia decir cosas que te comprometieran… finalmente tú también sabes cosas mías que no me agradaria que se supieran :P.
Seguimos en contacto!!!

dna
Comment on July 20th, 2007.

XD esa cancha rulz
entendi la mitad del post :$
=( ya casi ni te veo y ni jugamos furbol
namas cuando llevo la comida xD juju
=**

CaRo :D
Comment on July 20th, 2007.

Piedrota!!

Despues de 2 minutos de pensar si contestar tu post o no… llegue a la conclusión de que es bueno de vez en cuando encontrar un lugar donde dejarte algunas quejas… siiiiiiiii asi como esas donde en tus 10 puntos, no escribiste nada sobre tus amigas :D como Norma y yo jajaja por otra parte quiero decirte que me da mucho gusto que estes tan feliz, y que hagas muchas muchas cosas para que no tengas malos pensamientos.

AAAA y que tu vida vaya tan bien, haber cuando nos vemos :D se les extraña ati y a tu hermana :D

les mando un abrazo,
saludos,
Caro :D

SiN
Comment on July 20th, 2007.

Pues no se exactamente cual es tu público men, pero la neta al menos que esten empapadones del tema los vas a dejar con mas dudas que antes, pero a mi me latio bastante la info voy a ver si hago ahorita algo parecidon, se rifo mi buen.

Salu2

Comment on July 21st, 2007.

we me saco de onda eso de que juegas futbol xDDDD no te imagino jugand u___U no te ofendas esque normalmente un geek jugando fut? o___0 bueno sobre lo de la certificacion de java te la mereces y espero que logres certificarte bien ya que dominas muy bien java, otra coso que haces en queretaroo???????? pues bueno, espero que sigas actualizando y te des mas bueltas por hackerss, Felicidadez por lo de tu novia =) y ya te mando el mail cuidate man ;)

Comment on July 23rd, 2007.

borning!!!!!

jajajaja no es cierto we te me vallas a esponjar!!

de ke operarn a daniel??? no supe!!! mantenme al tanto we

Comment on July 24th, 2007.

mi buen BNK… aki estan 10 cosas ke tengo ke decir el dia de hoy….

1.- para los ke nos llamamos JAVA el post esta PKM…
2.- no tengo a nadie ke me ame :(
3.- estoy feliz con mi nueva chamba
4.- no conozco a tu amigo Daniel pero que c recupere pronto
5.- la vida en la Cd. de Mexico es estresante, pero hay ke llevarla suave…. HAKUNA MATATA…
6.- no le he metido nada nuevo a mi blog…. no c me ocurre nada y c me estan acabando las ideas…. jaja
7.- las VM Rulean¡¡¡
8.- No me gusta el futbol…. pero amo las computadoras
9.- el BNK es la HOSTIA¡¡¡ (dicho en castellano… traduccion: eres la neta¡¡)
10.- un poko de locura nunk ha matado a nadie….

SALUDILLOS A TO2

Comment on July 24th, 2007.

bieeeeeeeee n nada mas necesito el pass demi blog benek jajajaxD deberian de ponerle elmodulo de recuperar pass

Miguel (Cucho)
Comment on July 25th, 2007.

Que onda BNK (Potter) est shido me va a servir puesto que tengo que manejar JBoss y la nta me da hueva asi que me va a sevir de mucho, estamos en contacto, para el portal especializado.

Comment on July 26th, 2007.

desde luego que era la idea migue :) que chido que te vaya a servir, y ya le estoy dando forma a ese asunto que les platiqué a mad, sin y a ti… tenía rato que no me decían potter xD

por otro lado, hay varios que ya deberían ir considerando venirse para acá a querétaro :P (eeh sobris y edgar!!)

franz, no soy tan geek como crees, o mejor dicho no solo soy geek como crees, hago varias cosas aparte desde siempre :P

xero, a danniel lo operaron de una mano, porque lo asaltaron y le iban a quitar el auto, pero el asaltante se puso nervioso xk pasó una patrulla y le disparó y se fué corriendo, dann se alcanzó a mover por instinto (gracias a dios) y le dió en la mano pero tiene un roce en el estómago, si no se mueve le cae centrado. Le pusieron una placa y tornillos en la mano, no estaría mal que le llamaras, su tel es el 1552 6876, es el de su casa, ahi está siempre

gracias a todos por comentar :)

RaNiSs
Comment on August 1st, 2007.

jeje… 10 cosas k quisiera decir el día de hoy:

1. Tengo cel nuevo!! (el otro aún esta en uso pero ya está por jubilarse)

2. Oiga, ya no se desaparezca tanto! jaja =P a ver cuando me lo topo en el msn aunk confieso que yo tmb he andado algo desaparecida.

3. Me fui a manzanillo de jueves a domingo y cazamos cangrejos! ah que rico caldo hicimos! jajaja…

4. Mis perros y mis amigos me aman y adoran yo se, no pueden vivir sin mi! =P

5. Ah! gane el premio de la mas borracha ¬¬…. pero aclaro que fue pork en mi salón nadie toma eh! no vayan a pensar mal jeje

6. La siguiente semana empiezo mi servicio social, tengo una plaza bn chida y a mis compañeras le ha de haber dado el infarto pork ni me presenté al reparto de plazas jojojo… asi es esto del abarrote y k =P

7. Tmb ya empiezo a trabajar este fin, he de mencionar que voy a andar disfrazada de pirata! jaja es en serio eh! XD… va a estar divertido =P

8. Ultimamnt sufro de verborrea y que, y que! ash se me ha hecho mala costumbre y hoy casi hago que una chica no alcance a bajarse en su estación del tren por estar hable y hable…. por suerte se dio cuenta y se alcanzo a bajar pero estabamos bn entradas en la charla jeje

9. Necesito otro trabajo (aparte del de los fines de semana) que sea de medio tiempo…. ¬¬

10. Necesito ya ponerme a hacer ejercicio… he estado comiendo puras chucherías y como que no va conmigo jaja.

11. Ya se que eran 10 pero es el extra solo para despedirme y decirle que se le estima ;)

Se cuida, ciao!!

P.D. Si va a venir en sep?? me avisa luego kndas va

Trackback on August 10th, 2007.

Conectividad Oracle en Servidor de Aplicaciones Java Enterprise…

En Java Web, habrá algunas veces cuando no querramos que una conexión a la base de datos esté definida en el código fuente, con todo y usuario y password. Las razones? manejar más de un ambiente de desarrollo principalmente. He aqui una fácil y s…

Leave a Comment

Names and email addresses are required (email addresses aren't displayed), url's are optional.

Comments may contain the following xhtml tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>