cuando la inspiracion falta

Posted on September 4th, 2007 by benek.
Categories: Development, My way of life...

Bien, pues estos días no he estado haciendo otra cosa más que trabajar y trabajar xD

Ya no estoy en el equipo de Fútbol, por alguna razón ya no me dieron muchas ganas de ir aparte de que ya me queda lejos de la nueva oficina y a algunos partidos no llegaría, además de que esta última semana me lastimé el pie. Lo que quiero ahora es entrar a natación en la alberca olímpica de por mi casa, está muy muy padre y es nueva :)

En estos días he estado muy ajetreado, dos o tres veces por semana tengo que viajar a León, Gto. y es bastante pesado, aunque espero que rinda frutos. La onda ahi está muy interesante :P no es a lo que estoy acostumbrado (software), es a nivel más electrónico, control por radiofrecuencia (RFID) como las tarjetas IAVE de la autopista o como los chips que ponen en el Super Mercado a los artículos. Obviamente yo no voy a implantar eso pero al menos veré como se hace y es de lo más interesante (para mi, claro está xD) como se nota que cada vez quiero alejarme más del código :P al menos laboralmente porque de hobbie no creo que lo llegue a dejar completamente.

He tenido algo de tiempo en estos días pero no sabía que postear aqui :-/ de hecho hice un artículo nuevo de Java sobre Callbacks, puede ser buen pretexto que lo ponga, pero mejor solo daré las ligas, estos son los sitios donde lo puse:

Aaaaahh por cierto, casi lo olvido, este Sábado 8 habrá una reunión en el DF que comenzó a organizar Evilrulo de hackerss.com que viene de no sé que estado, pero como yo también iré al DF en esa fecha ahi estaré. El plan es ir al billar creo así que difundo la noticia por si alguien más se quiere apuntar :)

Bueh, no sé que más escribir :| no sé que diablos me pasa pero ando cortísimo de inspiración, no sé si les ha pasado :( alguna sugerencia?

En fin, espero que el próximo post sea mucho más ameno… gracias por leer, hasta aqui llegó este. :)

Visto 41052 veces por 7422 visitantes

8 comments.

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 36228 veces por 8120 visitantes

17 comments.

Blogs-E.org, obten tu blog con Gekko!

Posted on May 12th, 2007 by benek.
Categories: Development, My way of life.., Proyectos, Stuff.

Blogs-E.org Beta

Muy bien, comenzamos con este proyecto después de algunas semanas de prueba :D

En el proyecto Blogs-E nos encargamos de brindar un subdominio con espacio para tener un bonito blog Gekko, sin necesidad de instalar nada, solo configurar tu blogs-e como tú quieras!

Además de todo, no tendrás que preocuparte por actualizar tu blogs-e con Gekko, ya que nosotros lo hacemos por ti! Siempre estarás cómodamente a la última versión!

Lo bueno del proyecto, es que tenemos el respaldo de los desarrolladores de Gekko, Xiam y Blacknash, quienes han sido muy amables y han cooperado con esta iniciativa, y son parte de este proyecto tambien!

y vamos a lo importante…

¿Cómo obtengo mi Blogs-E?

1. Escribenos un mail a get@blogs-e.org (o por el formulario de contacto directamente). Tomate tu tiempo y cuentanos algo introductorio sobre ti :)

2. Incluye en el correo el subdominio que quisieras para tu Blogs-E al estilo http://tunombre.blogs-e.org

3. Espera un poco a que leamos tu peticion, normalmente debemos aprobar tu Blogs-E en menos de 24 horas, pero si han pasado un poco mas no desesperes, siempre obtendras respuesta ^^

Esperemos que te agrade el proyecto, cualquier feedback puedes enviarlo a staff@blogs-e.org, te lo agradeceremos ;)

::::

:D

Visto 20267 veces por 3082 visitantes

5 comments.

Algo de GUI con Java/SWT

Posted on January 8th, 2007 by benek.
Categories: Development, My way of life...

Regreso de un largo periodo de no escribir con esto que ojalà le sirva a alguien.. :)

:::::::::::::::::::

[How-to] Desarrollando GUI con SWT, Standard Widget Toolkit

Por: Javier Benek

Para: Hackerss.com

:::::::::::::::

Que es SWT??Es un framework para crear interfaces gráficas en Java, que crea a través de JNI (Java Native Interface) interfaces gráficas nativas del Sistema Operativo en donde ejecutemos nuestra aplicación SWT.

Es un framework para crear interfaces gráficas en Java, que crea a través de (Java Native Interface) interfaces gráficas nativas del Sistema Operativo en donde ejecutemos nuestra aplicación SWT.Esto quiere decir que con el mismo código visualizaremos en cada Sistema Operativo nuestras ventanas como si hubieran sido creadas para ese SO en específico.

:::::::::

Ahora bien, enumeraré las que a mi parecer son las más visibles ventajas y desventajas de este framework.

Ventajas:

  • Ya que crea nativamente la GUI dependiendo del SO, es más rápido que Swing
  • Consume mucho menos
  • La interfaz gráfica se verá como las demás aplicaciones de tu SO
  • Está en constante desarrollo

Desventajas:

  • Muy escasa documentación
  • Ya que SWT fue creado por la Fundación Eclipse y pensada para el desarrollo de Eclipse IDE, hay controles o widgets que no consideraron ya que Eclipse no los ocupa.
  • Se tienen que agregar las clases al proyecto a desarrollar, no viene por default

Algunas aplicaciones creadas con SWT:

  • Eclipse IDE (El más completo IDE para desarrollo en Java)
  • Azureus (Uno de los más conocidos clientes torrent)

:::::::::::::::::

Bien, ahora comencemos:

- Creemos un nuevo proyecto de Java en nuestro IDE preferido (para este tuto utilizaremos Eclipse IDE). El proyecto en este ejemplo se llamará ‘tests’

- Descarguemos SWT de http://www.eclipse.org/swt/ y lo dejamos dentro de nuestro proyecto..

- Importamos SWT al proyecto, en Eclipse IDE es en File/Import..

- Luego en General elegimos ‘Existing proyect into Workspace’

- Luego seleccionamos el zip que bajamos con swt y el nombre del proyecto ‘org.eclipse.swt’

- Ya tenemos SWT dentro de nuestro Workspace, ahora tenemos que agregarlo como dependencia de nuestro proyecto ‘tests’, entonces vamos a las propiedades de ‘tests’ (click derecho en tests/properties), luego damos click en Java Build Path, vamos a la pestaña de Projects y le damos ‘add..’ seleccionamos ‘org.eclipse.swt’, y luego OK y de nuevo OK.

- Bien, ya tenemos nuestro proyecto listo para implementar SWT, ahora debemos saber algunos conocimientos teóricos.

SWT se compone de principales elementos, que interactúan entre ellos para lograr la interfaz nativa que tanto le caracteriza:

  • JNI. Java Native Interface, es el primer y más bajo nivel, que interactúa directamente con el Sistema Operativo en el que estemos. En claro que cada SO necesita diferente configuración y librerías, pero JNI nos simplifica el trabajo para que todo lo escribamos de una sola manera y él se encarga de lo demás, así tenemos cumplida la visión de Java ‘write Once, run anywhere’
  • Display. Esta clase de SWT es la responsable de traducir o comunicar la Clase Shell con el JNI.
  • Shell. No chicos, no es ninguna shell que se pueda rootear! Shell es otra clase de SWT, que representa una ventana y quien es la responsable de administrar los widgets (componentes) que tendremos en la misma. Tendremos una instancia de la clase Shell por cada ventana en nuestro proyecto. Para poder instanciar la clase Shell debemos hacer referencia a un Display anteriormente instanciado.

Ahora un poco de código para mover esto..

Así implementamos una nueva ventana vacía:

package lol;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class testings {

public static void main(String lol[]){

Display display = new Display();
Shell shell = new Shell();

shell.setText(”Hackerss.com”);
shell.setVisible(true);
shell.setSize(400, 300);
shell.open();

while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

}

Que es lo que hacemos ahi??

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

Importamos las clases Display y Shell, imprescindibles en cualquier proyecto SWT.

Display display = new Display();
Shell shell = new Shell();

Instanciamos un Display y después una Shell, a la que le asignamos la Display que creamos.

shell.setText(”Hackerss.com”);
shell.setVisible(true);
shell.setSize(400, 300);
shell.open();

Como ya habíamos mencionado, ’shell’ es nuestra ventana, así que con ’setText’ definimos su título, con ’setVisible’ si queremos que sea mostrada, con ’setSize’ el tamaño y con ‘open’ la iniciamos.

while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}

Este bucle while es muy importante, ya que es nuestro ‘manejador de eventos’, lo que hace es que una vez mostrada la ventana y si la misma no está ejecutando algún evento lanza un bucle que deja la ventana en espera (sleep) de otro evento venidero, así que está constantemente en escucha de algún otro evento que se dispare.

display.dispose();

por último, liberamos la aplicación con dispose(), quien finaliza ‘display’ y todos los shells que ‘display’ contiene, esto solo ocurre cuando la ventana ha sido cerrada, cuando damos click en cerrar la ventana automáticamente el ciclo while no se cumple y salta al siguiente paso ‘display.dispose()’

Resultado:

::::::::::

Utilizando Widgets.

Bueno, iba a explicar detalladamente como poner widgets en layouts y algunos tips más, pero desde ayer interrumpí este tuto por cuestiones de trabajo, así que hice esta pequeña aplicación con una caja de texto, un botón y un listener que ejecutan una acción..

Aqui está el código, por favor examínenlo y vean la manera de implementar los widgets en el Grid(layout), y también chequen la acción que lleva a cabo el listener que le puse al botón.

/*
Creado por Javier Benek. Para Hackerss.com.
:: http://www.hackerss.com/
:: http://www.benek.org/
*/

package lol;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolTip;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;

/**
* Clase que implementa SWT en la aplicación!
*
* @author jBenek
* @version v1.0
*/

public class testings {

/**
* Método que crea una ventana con un widget Text y
* un widget Button de SWT, y agrega un listener al
* botón para desplegar un ToolTip en la bandeja del
* sistema (Tray) con el texto introducido!
*
* @param lol - Arreglo de Strings por default del
* método main que guarda la entrada de datos al inicio
* de la ejecución del programa!
*/

public static void main(String[] lol) {
final Display display = new Display();
final Shell shell = new Shell();

shell.setText(”Hackerss.com”);
shell.setVisible(true);

GridLayout layout = new GridLayout();
layout.numColumns = 4;

shell.setLayout(layout);

final Text texto = new Text(shell, SWT.BORDER);
texto.setEditable(true);
texto.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 3, 1));

final Button boton = new Button(shell, SWT.PUSH);
boton.setText(”Envia”);
boton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));

SelectionAdapter sel = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
final ToolTip hssTip = new ToolTip(shell,
SWT.BALLOON | SWT.ICON_WORKING);
hssTip.setMessage(texto.getText());

Tray hssTray = display.getSystemTray();

if (hssTray != null) {
TrayItem hssItem = new TrayItem(hssTray, SWT.NONE);
hssTip.setText(”Hackerss.com :P”);
hssItem.setToolTip(hssTip);
hssTip.setVisible(true);
}
}
};

boton.addSelectionListener(sel);

shell.pack();
shell.setSize(400, 100);
shell.open();

while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}

display.dispose();
}
}

Lo que muestra al iniciar la aplicación es esta ventanita:

y al dar click el listener ejecuta esta acción:

:::::::::::::::

Examínenlo y córranlo, cualquier duda pónganla aqui

Visto 13344 veces por 2886 visitantes

16 comments.

Sobre el ensayo de Ant :P

Posted on July 28th, 2006 by benek.
Categories: Development, My way of life...

Bien, pues escribo para informar que el ensayo que redacté sobre Apache Ant no será publicado en este blog como prometí por lo menos hasta entrando el siguiente mes :P

La razón es que mi ensayo será publicado en la revista Software Libre Para Ti el próximo mes, así que podrán verlo ahi o esperar a que lo publique en este blog, faltan solo unos pocos días así que no será larga la espera :)

Como verán, no es una noticia mala sino buena, el artículo está 100% terminado y como lo prometí lo verán muy pronto :P

Visto 6127 veces por 860 visitantes

9 comments.