Archivo

Archive for 27 julio 2009

Comunicar Java (Applet) y JavaScript (Comunicación Web)

Hoy ,dia domingo y aun de vacaciones , estaba aburrido a no poder mas. y para no perder mi tiempo intente conectar a Java (Applet) con JavaScript, Habia visto JavaScript conectado con Flash pero no Java con JavaScript. Por lo que Busque y busque alguna forma de conectarlos y encontre esto.

En JCreator cree un proyecto “Basic Java Applet” y me Genero Automaticamente este codigo:

JavaJavaScript.java

import java.awt.*;
import java.applet.*;
public class JavaJavaScript extends Applet {
public void init() {
}
public void paint(Graphics g) {
g.drawString("Welcome to Java!!", 50, 60 );
}
}

a ese codigo le agregue un metodo holaMundo() que me devolviera un String ( se supone que despues quiero llamar a ese metodo desde javascript , por lo tanto debe devolverme alguna cosa)

import java.awt.*;
import java.applet.*;
public class JavaJavaScript extends Applet {
public void init() {
}
public void paint(Graphics g) {
g.drawString("Welcome to Java!!", 50, 60 );
}
public String holaMundo() {
return "Fui llamado desde JavaScript :D";
}
}
}

luego de eso compile y me genero un archivo lamado JavaJavaScript.class.

Despues de hacer eso cree un pequeño plugin JavaScript usando jQuery

(function($) {
var idApplet = null;
var returnData = null;
jQuery.initApplet = function( id ){
idApplet = id;
return this;
}
jQuery.callMethod = function( metodo,parametros ){
if(parametros != null)
return eval('document.all["'+idApplet+'"].'+metodo+'("'+parametros+'")');
else
return eval('document.all["'+idApplet+'"].'+metodo+'()');
}
})(jQuery);

La forma de usarlo es:

$.initApplet(NOMBRE_DEL_APPLET).callMethod(METODO_A_LLAMAR,[PARAMETROS_DEL_METODO]);

Despues de hacer eso ya estaba listo para testear el codigo usando HTML.


	
	
	

	
	
		

<a href="#">Testear</a>

	

Al hacer Click en el link “Testear” llama al metodo del Applet, el applet retorna datos y esos datos son tomados nuevamente por javascript y los muestra por alert

Como ven no es tan complicado.

Utilidades:
– Los Applet son muy feo esteticamente, pero tiene la fortaleza de ser una aplicacion java. Al poder comunicar Javascript con Java se podrian hacer diseños utilizando CSS y Javascript pero corriendo por abajo Java.

– El ancho de Banda mensual en los hostings es siempre un punto en contra al querer utilizar recursos de otras webs. Usando java se ahorra esa transferencia al ser utilizado por el lado del cliente (El usuario usa su ancho de banda y recuersos para conectarse). Por lo que se podria hacer una web que utilice recursos de otras webs con Java pero manipulados con JavaScript

Aqui hice un Ejemplo que conecto a mi Twitter desde un applet y los datos descargados de twitter son manipulados por javascript

Aca el ejemplo:
Codigo Java (Applet)

/**
 * @(#)JavaJavaScript.java
 *
 * JavaJavaScript Applet application
 *
 * @author Esteban Fuentealba
 * @version 1.00 2009/7/27
 */

import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.Scanner;
public class JavaJavaScript extends Applet {
	private HttpURLConnection con;
	private String link="";
	private URL url;
	public void init() {
		this.link = getParameter("urlLink");
		try {
			url = new URL(this.link);
		} catch(Exception ex) {

		}
	}
	public void paint(Graphics g) {
		g.drawString("Welcome to Java!!", 50, 60 );
	}
	public String getMiWeb() {
		System.getSecurityManager().checkPermission(new SocketPermission(url.getHost(), "connect"));
		StringBuffer sb = new StringBuffer();
		try {

		con = (HttpURLConnection)this.url.openConnection();
		con.connect();
		Scanner scan = new Scanner(con.getInputStream());

		while(scan.hasNext()) {
			sb.append(scan.nextLine());
		}
				} catch(Exception ex) {
					sb.append(ex.getMessage());
				}
    	return(sb.toString());
    }
}

Codigo HTML – JavaScript

	
	
	
		(function($) {
			var idApplet = null;
			var returnData = null;
			jQuery.initApplet = function( id ){
				idApplet = id;
				return this;
			}
			jQuery.callMethod = function( metodo,parametros ){
				if(parametros != null)
					return eval('document.all["'+idApplet+'"].'+metodo+'("'+parametros+'")');
				else
					return eval('document.all["'+idApplet+'"].'+metodo+'()');
			}
		})(jQuery);

		//Metodo JavaScript que Llama al metodo getMiWeb Java
		function onOpen() {
			var obj = $.initApplet('test').callMethod('getMiWeb');
			$(obj).find('item').each(function(){
				$('#resultados').append($(this).find('title').text()+"<br />");
			});
		}
	
	
	
		
			<h1>Ejemplo Java (Applet) a JavaScript</h1>
			<br />
				
				<!-- Le paso como parametro al applet mi link RSS de twitter -->
					
				
			<a href="#">Carga Datos de mi Twiter</a>
			<!-- Div contendra la informacion -->
			<div id="resultados"></div>
		
	

Aca el Ejemplo Funcionando:
http://estebanfuentealba.net/ejemplos/JavaJavaScript/classes/JavaJavaScript.htm

PD: Testeado en Firefox 3.5.1

Espero que a alguien le sirva o le paresca interesante

Saludos!

Mp3Spider Version 2.0 en Java

Ultimo post antes que me corten el servicio de hosting ya que no lo he pagado xD

es un adelanto, una screen shot de Mp3Spider prgramado en java

IMG:

http://img36.imageshack.us/img36/3558/mp3spiderjava.png

Pronto espero terminarlo.

Examen Transversal Programacion de Base de Datos (OCA DEVELOP)

Hoy fue dia de examenes, este es el “Examen” de programacion de base de datos, una burla de examen comparado con el Certamen II de la misma asignatura =/

Pregunta 1

  • A) Construya una tabla f, con campos a numericos y b alfanumerico variable
  • CREATE TABLE f (
    	a NUMBER,
    	b VARCHAR(50)
    );
  • B) Inserte 5 valores en f con los numeros 5 al 9 y los nombres de los numeros en texto
  • BEGIN
    	FOR i IN 5..9 LOOP
    		IF i = 5 THEN
    			INSERT INTO f VALUES(i,'Cinco');
    		ELSIF i = 6 THEN
    			INSERT INTO f VALUES(i,'Seis');
    		ELSIF i = 7 THEN
    			INSERT INTO f VALUES(i,'Siete');
    		ELSIF i = 8 THEN
    			INSERT INTO f VALUES(i,'Ocho');
    		ELSIF i = 9 THEN
    			INSERT INTO f VALUES(i,'Nueve');
    		END IF;
    
    	END LOOP;
    END;
    /
  • C) Construya un procedimiento en PL/SQL que seleccione los registros de la tabla (utilizando el esquema FOR UPDATE) y modifique los numeros cuya palabra tenga un largo de 5, dejando el valor al cuadrado
  • CREATE OR REPLACE PROCEDURE actualizaTodos
    IS
    	CURSOR datos_cursor IS
    		SELECT * FROM f
    		FOR UPDATE OF a;
    BEGIN
    	FOR iterador IN datos_cursor LOOP
    		IF LENGTH(iterador.b) = 5 THEN
    			UPDATE f
    			SET a = (iterador.a * iterador.a),
    				b = '('||iterador.b||')^2'
    			WHERE CURRENT OF datos_cursor;
    		END IF;
    	END LOOP;
    END;
    /

    Pregunta 2

  • A) Considere la tabla PRODUCTOS(CO_PRODUCTO,NO_PRODUCTO) que tiene el código y nombre del producto.
  • CREATE TABLE PRODUCTOS (
    	CO_PRODUCTO NUMBER,
    	NO_PRODUCTO VARCHAR(100),
    	CONSTRAINT pk_productos_CO_PRODUCTO PRIMARY KEY(CO_PRODUCTO)
    );
  • B) Considere la tabla PRECIOS_PRODUCTOS(CO_PRODUCTO,PRECIO,FECHA_ACTUALIZACION).
  • CREATE TABLE PRECIOS_PRODUCTOS (
    	CO_PRODUCTO NUMBER,
    	PRECIO NUMBER,
    	FECHA_ACTUALIZACION DATE,
    	CONSTRAINT fk_PP_CO_PRODUCTO FOREIGN KEY(CO_PRODUCTO) REFERENCES PRODUCTOS(CO_PRODUCTO)
    );
  • C) Construya un TRIGGER que cada vez que se inserte un registro en PRODUCTOS inserte un registro en PRECIOS_PRODUCTOS con un valor inicial de 100.
  • CREATE OR REPLACE TRIGGER trigg_precioAlProducto
    AFTER INSERT ON PRODUCTOS
    FOR EACH ROW
    BEGIN
    	INSERT INTO PRECIOS_PRODUCTOS (CO_PRODUCTO,PRECIO,FECHA_ACTUALIZACION)
    	VALUES(:NEW.CO_PRODUCTO,100,SYSDATE);
    END;
    /
  • D) Realice un ejemplo de uso del TRIGGER
  • /* Creo una sequencia */
    CREATE SEQUENCE seq_productos
    				MINVALUE 1
    				START WITH 1
    				INCREMENT BY 1;
    /* Ingreso algunos datos */
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Pantalon');
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Zapatos');
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Comida');
    /* Selecciono los datos */
    SELECT 	PRODUCTOS.CO_PRODUCTO,
    		PRODUCTOS.NO_PRODUCTO,
    		PRECIOS_PRODUCTOS.PRECIO,
    		PRECIOS_PRODUCTOS.FECHA_ACTUALIZACION
    FROM PRODUCTOS  INNER JOIN PRECIOS_PRODUCTOS ON PRODUCTOS.CO_PRODUCTO = PRECIOS_PRODUCTOS.CO_PRODUCTO;

    Ese fue el ‘examen’… parece que lo hicieron a ultima hora y a la mala XD

    Saludos!.

    Categorías:ORACLE, PL/SQL Etiquetas: , , , ,

    Introduction To Oracle9i – PL/SQL – Student Guide

    Examen Transversal LENGUAJE DE PROGRAMACION II (MS NET)

    Esto es lo que escribi del examen de ayer

    Enunciado:

    Examen Transversal

    Se debe construir una aplicacion web que consta de 5 páginas utilizando el modelo de capas , la cual se
    utilizará para el registro de órdenes de trabajo y su respectivo detalle, para una empresa que repara vehículos.

    Descripcion de las páginas y su funcionalidad

    Default.aspx
    Permite la autenticación Basandose en los usuarios existentes en la tabla Usuarios y restringiendo el acceso a todas las
    páginas mientras no se haya iniciado sesión o esta se haya cerrado, considere además un menú para la navegación.

    Pagina1.aspx
    Permite almacenar una orden en la tabla Orden.

    Restricciones:

    • El valor de la mantención debe ser mayor a 0.
    • El kilometraje debe ser múltiplo de 5000.

    Pagina2.aspx
    permite agregar un nuevo servicio en la tabla Servicios.

    Restricciones

    • Descripcion debe tener al menos 6 caracteres

    Pagina3.aspx
    Permite consultar las órdenes de servicio, utilizando un control GridView paginado y seleccionable. Al Seleccionar
    una orden se muestran sus detalles asociados en un DetailsView.

    Pagina4.aspx
    Permite agregar o actualizar un nuevo usuario con la función “user” o “admin”, para ambos casos debe utilizar un servicio web como
    capa intermedia, la cual se comunica con procedimientos almacenados. Recuerde que solo los administradores pueden agregar nuevos usuarios.

    Script SQL Proporcionado:

    Forma_A.sql

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Servicios]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Servicios](
    	[cod_servicio] [nchar](10) NOT NULL,
    	[Descripcion] [varchar](50) NOT NULL,
     CONSTRAINT [PK_Servicios] PRIMARY KEY CLUSTERED
    (
    	[cod_servicio] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usuarios]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[usuarios](
    	[rut] [char](10) NOT NULL,
    	[password] [char](10) NOT NULL,
    	[habilitado] [char](2) NOT NULL,
    	[funcion] [char](10) NOT NULL,
     CONSTRAINT [PK_usuarios] PRIMARY KEY CLUSTERED
    (
    	[rut] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Orden]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Orden](
    	[nroOrdenTrabajo] [nchar](10) NOT NULL,
    	[Patente] [char](6) NOT NULL,
    	[RutCliente] [char](10) NOT NULL,
    	[valorMantencion] [int] NOT NULL,
    	[kilometraje] [int] NOT NULL,
     CONSTRAINT [PK_Orden] PRIMARY KEY CLUSTERED
    (
    	[nroOrdenTrabajo] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DetalleOrden]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[DetalleOrden](
    	[nroOrdenTrabajo] [nchar](10) NOT NULL,
    	[cod_servicio] [nchar](10) NOT NULL
    ) ON [PRIMARY]
    END
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Orden]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
    ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Orden] FOREIGN KEY([nroOrdenTrabajo])
    REFERENCES [dbo].[Orden] ([nroOrdenTrabajo])
    GO
    ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Orden]
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Servicios]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
    ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Servicios] FOREIGN KEY([cod_servicio])
    REFERENCES [dbo].[Servicios] ([cod_servicio])
    GO
    ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Servicios]
    

    Mi Solucion:
    ETLDP3501-Fuentealba-Esteban.rar