Sei sulla pagina 1di 22

Adobe FLEX, WEBorb, JAVA y MySql

En este documento se tratara de explicar mediante un ejercicio ya prediseado la manera de hacer el puente de comunicacin a una base de datos en el servidor MySql 5.1 mediante una aplicacin en Adobe Flex haciendo para esto, uso del servidor para Java WEBorb 3.0 y objetos del lenguaje de programacin JAVA. Utilidades: Server MySql 5.1 y Tools Adobe Flex Builder 3 WEBorb for JAVA 3.0 Mquina Virtual JAVA IDE Net Beans 6.8 Connector mysql-connector-java-5.0.8-bin Se supone que estos paquetes de software ya los tiene instalados el lector, solo el paquete .JAR del conector se utilizara ms adelante; pasaremos a realizar una base de datos utilizando lo que el lector ms le convenga: *El cdigo SQL y su ejecucin en una lnea de comando cliente de MySql *Usando el Tool Adminisrator y realizarla de manera grfica.

Cdigo: Creamos una base de datos llamada empleados y en esta agregamos una tabla llamada datos. CREATE TABLE empleados ( `clave` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `nombre` VARCHAR(45) NOT NULL, `paterno` VARCHAR(45) NOT NULL, `materno` VARCHAR(45) NOT NULL, `departamento` VARCHAR(45) NOT NULL, `sexo` VARCHAR(45) NOT NULL, `horas_trabajadas` VARCHAR(45) NOT NULL, `sueldo` VARCHAR(45) NOT NULL, `sueldo_neto` VARCHAR(45) NOT NULL, PRIMARY KEY (`clave`) )

Modo Grfico con Tool Administrator:

Ya tenemos la base de datos lista. Ahora se compilaran y ejecutaran los objetos (clases) JAVA que nos servirn para la comunicacin con la base de datos; ya que JAVA soporta la transferencia y comunicacin con bases de datos que implementen para este lenguaje. Ejecutamos IDE Net Beans y seguimos los siguientes pasos para abrir y configurar un nuevo proyecto:

File->>New Project:

Java Aplication->>Next

Es indistinto el nombre del proyecto para esta documentacin lo llamaremos empleados y lo dejaremos con las propiedades marcadas.

Con el proyecto creado vamos a agregar una clase siguiendo lo siguiente: ->Click derecho sobre el proyecto->New->Java Class (Esto lo haremos dos veces ya que necesitamos dos clases)

A una clase le llamaremos javaclientes y a la otra select (estos objetos son los que se comunican digamos, directamente con la Base de Datos). Por lo que entonces tendremos dos clases listas para ser compiladas, a continuacin el cdigo de las dos clases que ser agregado a las dos clases creadas previamente y que posterior a esto sern compiladas (copiarlo y agregarlo a cada una de las clases creadas en Net Beans respectivamente):

Objeto o CLASE javaclientes


importjava.sql.*; //paquete del API de JAVA para soporte de sentencia SQL publicclassjavaclientes { //Inicio clase //Varibles(cadenas) para espeficicarparametros de nuestra base de datos staticStringbd = "empleados"; //Nombre de la base de datos static String login = "root"; //usuario static String password = "udl";//password static String url = "jdbc:mysql://localhost/"+bd;//URL (especificacionpara Server Mysql) Connection conn = null; //Variable tipo Connection publicjavaclientes() { //Constructor //Las sentencias que manejan cualquier actividad a la base de datos //Necesitan tratamiento de errores (try) try{ //obtenemos el driver para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexin conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("Coneccin a base de datos "+bd+" OK"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } /**Permite retornar la conexin*/ public Connection getConnection(){ return conn; } publicvoid desconectar(){ conn = null; } }

Objeto o CLASE selct


importjava.sql.*; //paquete del API de JAVA para soporte de sentencia SQL publicclassselect { //incio de la clase javaclientescn; //Referencia al objeto javaclientes para establecer la conexion publicselect() {//Instancia del objeto javacliente y autmaticamenteobenemosconexion cn = new javaclientes(); } //Metodo encargado de hacer un SELECT a una tabla de la base de datos //Regresara un arreglo con tipo de dato Object public Object[][] seleccionar(){ int registros = 0; //Bandera indicadora del numero de tuplas en la tabla //Asegurar posibles errore en tiempo de ejecucion(Try) try{ //Instancia al objeto PreparedStatement el cual prepara una sentancia SQL //Sentencia usando el metodoMysqlcount(1) para saber el numero de tuplas de la tabla PreparedStatementpstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" + " FROM datos "); ResultSet res = pstm.executeQuery();//Ejecucion de la sentencia citada enteriormente //metodo .next para recorrer los resultados obenidos de la consulta //en este caso nada mas regresara un solo dato(El numero de tuplas) res.next(); registros = res.getInt("cont");//Obtenemos el unico dato obtenido res.close(); //Cierre de Conexin a la base de datos }catch(SQLException e){ System.out.println(e); } Object [][] data = new Object[registros][8]; //Creacion de matriz tipo Object con los parametros de cuantas filas //y columnas cerran requeridos //en este caso el numero de renglones=registros //8= Numero de columnas //Misa matriz cerra regresada por este metodo. //Segunda consulta a la base de datos seleccionando los campos indicados try{ PreparedStatementpstm = cn.getConnection().prepareStatement("SELECT nombre," + " paterno," + " materno," + " departamento," + " sexo," + " horas_trabajadas," + " sueldo," + " sueldo_neto " + " FROM datos " + " ORDER BY clave "); ResultSet res = pstm.executeQuery(); //Ejecucion de la sentencia int i = 0; //Contador auxiliar para recorrer los resultados obtenidos //de la consutla //Mientras se acaben de recorrer todas las tuplas de resultados obtenidos while(res.next()){ //Obtencion del dato cuyo campo se manda como parametro

String nombre = res.getString("nombre"); String paterno = res.getString("paterno"); String materno = res.getString("materno"); String departamento = res.getString("departamento"); String sexo = res.getString("sexo"); Stringhoras_trabajadas = res.getString("horas_trabajadas"); String sueldo = res.getString("sueldo"); Stringsueldo_neto = res.getString("sueldo_neto"); //Asignacion a la matrix de los datos obenidos data[i][0] = nombre; data[i][1] = paterno; data[i][2] = materno; data[i][3] = departamento; data[i][4] = sexo; data[i][5] = horas_trabajadas; data[i][6] = sueldo; data[i][7] = sueldo_neto; i++; //Incremento que provoca la matrix cambie su indice para //la proximaaignacion de datos } res.close();//Cierre de conexin }catch(SQLException e){ System.out.println(e); } return data; }

//Metodo para la insercion de datos en la tabla //recibira como parametros nueve cadenas para posteriormente ser asignadas //a la tabla en la base de datos public void insertar(String una,Stringdos,Stringtres,Stringcuatro,Stringcinco ,Stringseis,Stringsiete,Stringocho,Stringnueve){

int i=java.lang.Integer.parseInt(una); //en la tabla se requiere que el primer dato asignado sea un entero por eso //existe el requerimiento ded esta cadena convertirla en entero try{ //construimos la sentencia SQL PreparedStatementpstm = cn.getConnection().prepareStatement("insertinto datos(clave," + "nombre,paterno,materno," + "departamento,sexo,horas_trabajadas,sueldo,sueldo_neto)values "+ "("+i+"," +"'"+dos+"'"+","+"'"+tres+"'"+","+"'"+cuatro+"'"+"," + ""+"'"+cinco+"'"+","+"'"+seis+"'"+","+"'"+siete+"'"+"" + ","+"'"+ocho+"'"+","+"'"+nueve+"'"+")"); pstm.executeUpdate();//Ejecucion, en consiguiente una inserccion a la tabla. }catch(SQLException e){ System.out.println(e); } } }

Luego entonces aparecen nuestras dos clases listas para compilar no sin antes agregar el conector de comunicacin a la base de datos, de hecho al inicio del documento lo cito como parte de las utileras, es el archivo JAR Connector mysql-connector-java5.0.8-bin

Clases ya con cdigo Agregado.

Para agregara el conector es simple, justo en el proyecto en Net Beans daremos clic derecho sobre el icono del folder el cual dice Libraries, en seguida AddJarFloder, ubicamos el archivo JAR del conector donde lo tengamos ubicado. Y ahora esta completo ya el proyecto para ser compilado.

Lo compilaremos usando el icono que a continuacin la imagen muestra; de esta manera nos creara un archivo JAR el cual es el que nos interesa porque posteriormente lo tenemos que agregar al servidor WEBorb. El archivo JAR esta ubicado en la ruta que marca el output de NET BEANS como marca igual la imagen.

Hasta este momento tenemos la base de datos creada con una tabla y el archivo JAR producto de la compilacin de las dos clases anteriores. Ahora vamos a arrancar el servido WEBorb y vamos a agregarle el archivo JAR obtenido.

Para arrancar el servidor se supone que ya se instal el paquete WEBorb y el mismo ha dejado una carpeta de instalacin que por Default lo hace en la unidad C: \, partiendo de este punto y desde una consola de comando Windows ejecutaremos el siguiente comando ubicados en la ruta:C:\weborb30 Java -jar weborb.jar El server y en general el servicio es arrancado por el puerto 8080 que es el Default.

El archivo JAR obtenido en pasos anteriores lo vamos a agregar al servidor de la siguiente manera: Copiar y pegar en la siguiente ruta el archivo JAR (para este caso en donde la instalacin de WEBorb dejo sus archivos en la carpeta C:\) Ruta: C:\weborb30\webapp\WEB-INF\lib Para comprobar que el archivo esta agregado abriremos la consola grafica HTML del WEBorb para verificarlo, la cual abriremos con el siguiente url: http://localhost:8080/ Una vez abierta la interfaz verificamos el nombre del archivo JAR en la pestaa Management y subpestaa Services como se muestra a continuacin:

Podemos comprobar tambin que en el mismo JAR estn los mtodos que declaramos en las clases compiladas en JAVA y que de hecho podemos invocar desde la misma interfaz mandndole los parmetros en el caso necesario que as el mtodo lo requiera.

Si desde la misma invocacin desde WeBorb de los mtodos creados con JAVA resultan satisfactorios, es decir, en el ejemplo del mtodo insertar a la hora de ser ejecutado mandando sus respectivos parmetros estos son insertados en la tabla de la base de datos empleados; si es as continuaremos con los ltimos pasos para unir la aplicacin en FLEX al proyecto. Con la aplicacin FLEX se dispondr a crear un nuevo proyecto el cual va tener la particularidad de estar vinculado con un servidor JAVA (WEBorb, el cual ya tiene lo necesario para invocar mtodos y comunicarse a la base de datos)

Entonces: FILE NEW Flex Project

Lo configuramos usando el server J2EE que es el de JAVA y el nombre es indistinto en este proyecto lo nombramos MySql y avanzamos (NEXT):

Los parmetros puestos en esta ventana debern coincidir con la carpeta ubicada de la instalacin previa WEBorb, como se mencionaba anteriormente, la carpeta por Default se coloc en C:\weborb30 As como se muestra en la figura la especificaremos los siguientes datos: Root folder: C:\weborb30\webapp Root URL: http://localhost:8080 Contextroot: /flex Por ultimo validaremos en el boton: ValidateConfiguration (puede que marque una alerta, mientras no sea error finalizamos (FINISH):

Por Default el proyecto aparece con un archivo XML del mismo nombre que el proyecto; vamos a sustituir el cdigo por Default de este por el siguiente:

Codigo XML de la aplicacion en FLEX

<?xml version="1.0" encoding="utf-8"?> <mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="1005.6" height="811.8" creationComplete="carga();"> <mx:TabNavigator x="21" y="14.6" width="818.21216" height="352.92426" change="carga();" > <mx:Canvas label="Captura" width="100%" height="100%"> <mx:Label x="95" y="12" text="Clave"/> <mx:Label x="95" y="46" text="Nombre"/> <mx:Label x="95" y="72" text="A. Paterno"/> <mx:Label x="94" y="98" text="A. Materno"/> <mx:Label x="92" y="130" text="Departamento"/> <mx:ComboBox x="178" y="126" width="122" dataProvider="{A1}" id="depa"></mx:ComboBox> <mx:Label x="83" y="162" text="Sexo"/> <mx:RadioButton x="136" y="160" label="Masculino" id="mas"/> <mx:RadioButton x="218" y="160" label="Femenino" id="fem"/> <mx:Label x="83" y="199" text="Hras. Trabajadas"/> <mx:Label x="83" y="238" text="Pago por hora"/> <mx:ComboBox x="196" y="199" width="98" dataProvider="{A2}" id="tiempo"></mx:ComboBox> <mx:TextInput x="162" y="10" width="86" id="cve"/> <mx:TextInput x="162" y="44" width="137" id="nom"/> <mx:TextInput x="162" y="70" width="137" id="apa"/> <mx:TextInput x="162" y="96" width="137" id="ama"/> <mx:TextInput x="175" y="236" width="119" id="pago"/> <mx:Button x="149" y="279" label="Enviar" click="enviar();" width="89"/> </mx:Canvas> <mx:Canvaslabel="Datos capturados" width="100%" height="100%"> <mx:DataGrid x="10" y="10" width="733.1061" height="155.60605" id="registro"> <mx:columns> <mx:DataGridColumnheaderText="Nombre" dataField="0"/> <mx:DataGridColumnheaderText="A. Paterno" dataField="1"/> <mx:DataGridColumnheaderText="A. Materno" dataField="2"/> <mx:DataGridColumnheaderText="Departamento" dataField="3" width="100"/> <mx:DataGridColumnheaderText="Sexo" dataField="4"/> <mx:DataGridColumnheaderText="HorasTrabajadas" dataField="5" width="130"/> <mx:DataGridColumnheaderText="Sueldo" dataField="6"/> <mx:DataGridColumnheaderText="SueldoNeto" dataField="7"/> </mx:columns> </mx:DataGrid> </mx:Canvas>

</mx:TabNavigator> <mx:RemoteObject id="remoteObject" destination="GenericDestination" source="select" showBusyCursor="true" fault="falla(event)"> <mx:method name="seleccionar" result="resultados(event)"/> <mx:method name="insertar"/> </mx:RemoteObject>

<mx:Script> <![CDATA[ importmx.rpc.events.FaultEvent; importmx.rpc.events.ResultEvent; importmx.rpc.*; importmx.collections.ArrayCollection; importmx.controls.Alert; importmx.controls.Alert; privatevarEjemplo_Alerta:Alert; publicvar cadena2:Array; publicvarcadena:String; publicvartotal:String; publicvars_neto:String; publicvar A1:ArrayCollection = newArrayCollection( [ {label:"Sistemas", data:1}, {label:"Redes", data:2}, {label:"Soporte", data:3}, {label:"Asesores", data:4}, {label:"Desarrollo", data:5} ]);

publicvar A2:ArrayCollection = [ {label:"35", data:1}, {label:"36", {label:"37", {label:"38", {label:"39", {label:"40", {label:"41", {label:"42", {label:"43", {label:"44", {label:"45", ]);

newArrayCollection( data:2}, data:3}, data:4}, data:5}, data:6}, data:7}, data:8}, data:9}, data:10}, data:11}

publicfunctionenviar(): void {

if(mas.selected==true) cadena="masculino" else cadena="femenino" if(Number(tiempo.selectedLabel)>40) { total=String(40*Number(pago.text)); s_neto=String(((Number(tiempo.selectedLabel)40)*1.5*100) + Number(total)); } else { total=String(Number(tiempo.selectedLabel)*Number(pago.text)); s_neto=total; }

remoteObject.insertar(cve.text,nom.text,apa.text,ama.text,depa.s electedLabel,cadena,tiempo.selectedLabel,total,s_neto);

publicfunctioncarga():void{ remoteObject.seleccionar(); } publicfunctionresultados(event:ResultEvent):void{ cadena2= event.resultas Array; registro.dataProvider=cadena2; } publicfunctionfalla(event:FaultEvent):void{ Alert.show(event.fault.faultString,"error"); }

]]> </mx:Script> </mx:Application>

Quedar una interfaz algo parecida a lo siguiente

Si todo anduvo bien durante todo este proceso; lo nico que queda es ejecutar la aplicacin FLEX y verificar que de esta manera se hacen inserciones mediante el formulario y selecciones mediante el objeto Data Grid.

El lector podr concluir que para una aplicacin desarrollada en FLEX se necesit en este proyecto de Objetos JAVA ,los cuales fueron, por nombrarlo as, compartidos por el servidor WEBorb para que Flex mediante objetos tipo Object Romote pudiera acceder a estos mtodos que a su vez generaban una consulta en la Base de datos.

Documentado por: ING. Nayeli del Roci Daz Reyes ING. Prez Romero Eduardo Nay96@live.com.mx olal_mol@hotmail.com 10/12/10

Potrebbero piacerti anche