Hola a todos nuevamente, anteriormente hice un tutorial para conectar Flex 3, Visual Basic .NET y SQL Server con WebORB, pero teniendo en cuenta la posibilidad de abrir nuestras mentes y conocer las múltiples alternativas que existen a la hora de hacer una RIA, quise escribir otro tutorial, pero esta vez, conectaremos Flex 3, Java y MySql con WebORB. A continuación detallaré los requerimientos y luego los pasos para que todo salga bien.
Requerimientos:
Procedimiento:
Paso 1: Vamos a crear una Base de datos "prueba" en mysql, la cual tendra 1 tabla con 3 campos: id, nombre y comentarios. Además vamos a insertar 3 registros. A continuación el Script:
CREATE TABLE `prueba` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `nombre` TEXT, `comentarios` TEXT, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; INSERT INTO `prueba` (`id`, `nombre`, `comentarios`) VALUES (1, 'Jorge', 'no te acerques'), (2, 'Juan', ':D'), (3, 'Julio', 'hola :D');
Paso 2: Vamos a crear nuestro archivo .jar el cual usaremos con weborb para la conexión con flex. Para eso abrimos el JCreator que previamente habíamos instalado:

Creamos un Basic Java Application:

Le asignamos un nombre y la ruta a la carpeta donde queremos guardarlo:

Seleccionamos la ruta donde hemos instalado el JDK 1.6, si es que no lo toma por defecto:

En la pestaña de Required Libraries agregamos un elemento nuevo, luego añadimos el archivo mysql-connector-java-5.0.8-bin.jar que descargamos anteriormente. Marcan la casilla del nuevo elemento añadido:

Luego Finish > Finish y se ha creado su proyecto:

A continuación el código que irá en la clase javaclientes:
package flex.javac; import java.sql.*; /* Clase para conectarnos a la BD */ public class javaclientes { static String bd = "prueba"; static String login = "tuUsuariodeBD"; static String password = "tuPassword"; static String url = "jdbc:mysql://localhost/"+bd; Connection conn = null; /* DbConnection */ public javaclientes() { try{ //obtenemos el driver para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("Conección a base de datos "+bd+" OK"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } /**Permite retornar la conexión*/ public Connection getConnection(){ return conn; } public void desconectar(){ conn = null; } }
Luego creamos otra clase llamada select:

Aquí el código:
package flex.javac; import java.sql.*; public class select { flex.javac.javaclientes cn; public select() { cn = new flex.javac.javaclientes(); } public Object[][] getClientes(){ int registros = 0; try{ Statement stm = cn.getConnection().createStatement(); PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" + " FROM prueba "); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("cont"); res.close(); }catch(SQLException e){ System.out.println(e); } Object [][] data = new Object[registros][2]; try{ Statement stm = cn.getConnection().createStatement(); PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT nombre, " + " comentarios " + " FROM prueba " + " ORDER BY id "); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ String estCodigo = res.getString("nombre"); String estNombre = res.getString("comentarios"); data[i][0] = estCodigo; data[i][1] = estNombre; i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } }
Ahora creamos el archivo .jar
Vamos al menú Configure>>Options>>Tools y agregamos Create Jar File

Ahora sí podemos crear nuestros archivos .jar fácilmente desde el menú Tools>>Create Jar File o presionando ctrl+1, los archivos se guardan en la carpeta classes ubicada en la carpeta del proyecto.
Paso 3: Luego de descomprimir el Weborb for Java, coloquen la carpeta en la raíz de su partición principal, en este caso yo la tengo en el disco C, de preferencia allí para que sea más fácil acceder a ella.

Luego vamos a editar el archivo weborb.bat que se encuentra en la carpeta bin del weborb, sólo den click derecho Editar, y verificamos que este igual al siguiente:

Luego de editar el archivo weborb.bat, lo ejecutamos y dejamos la ventana del bat abierta, ya que si la cerramos se perderá la conexión con el servidor de java. Ahora ya podemos acceder a la consola del weborb con nuestro navegador tipeando lo siguiente: http://localhost:8070/

Una vez que estamos en la consola de weborb, accedemos a la pestaña de Management y Subimos nuestro jar creado con el botón upload, luego podemos invocar la función getClientes que está dentro de nuestro paquete flex.javac.select y vemos que nos devuelve los valores de nuestra BD:

Paso 4: Ahora les dejo el código de flex con el cual mediante un RemoteObject acceden a la función getClientes, agradezcan porque he sufrido, hay unas diferencias bien duras entre el de .Net y Java, yo pensé que la conexión era igual pero no, así que aquí tienen el código funcionando:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FFFFFF]" creationComplete="carga();"> <mx:Label text="Porque nunca me gustaron los ejemplos del tipo HolaMundo!!" horizontalCenter="0" verticalCenter="-141" fontWeight="bold" fontSize="15" color="#3B8603"/> <mx:DataGrid horizontalCenter="0" verticalCenter="17" width="234" height="236" id="mydg"> <mx:columns> <mx:DataGridColumn headerText="Nombre" dataField="0"/> <mx:DataGridColumn headerText="Comentarios" dataField="1"/> </mx:columns> </mx:DataGrid> <mx:RemoteObject id="remoteObject" destination="GenericDestination" source="flex.javac.select" showBusyCursor="true" fault="onFault(event)"> <mx:method name="getClientes" result="getClientes_Result(event)"/> </mx:RemoteObject> <mx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.*; import mx.collections.ArrayCollection; import mx.controls.Alert; public var cadena:Array; public function carga():void{ remoteObject.getClientes(); } public function getClientes_Result(event:ResultEvent):void{ cadena= event.result as Array; mydg.dataProvider=cadena; } public function onFault(event:FaultEvent):void{ Alert.show(event.fault.faultString,"error"); } ]]> </mx:Script> </mx:Application>
Ahora en el navegador:

Y eso es todo.
Si tienes alguna pregunta de este tutorial; puedes hacerla aqui en los foros