Un vistazo al desarrollo de aplicaciones en la plataforma Java utilizando NetBeans 6 Ezequiel Aranda Sun Campus Ambassador - UNICEN Ezequiel.Aranda@Sun.com Agenda La plataforma Java NetBeans 6.0 Java FX Certificaciones - SAI ¿Por dónde empezar? ¿Qué es Java? • Java es un lenguaje de programación orientado a objetos desarrollado a principios de los años 90. • El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel. • Es independiente de la plataforma . Las primeras implementaciones de Java rezaban:“write once, run anywhere”. • Posee un sistema de administración de memoria automático, el Garbage Collector. Un poco de historia • Java se creó originalmente como una herramienta de programación para un proyecto set-top-box conocido como *7. • Fue realizado por un equipo de 13 personas, dirigidas por James Gosling. • Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Un poco de historia (II) • En un principio, el sistema *7 no encontró un lugar en el mercado. • Gosling y su equipo se reunieron y notaron que “la nueva y popular Internet” tenia exactamente el tipo de configuración de red que ellos habían visionado para la industria de la TV por cable. • Con esto en mente, crearon el navegador WebRunner y realizaron un demo que mostraba una molécula animada en una reunión de profesionales de la industria del entretenimiento e Internet. • Todos sabemos historia…. como termina esta ¿Porqué Java? • El lenguaje se denominó inicialmente ”Oak‘ . Luego pasó a denominarse ”Green‘ tras descubrir que Oak era ya una marca comercial registrada. • El término ”JAVA‘ fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. • No está claro si es un acrónimo o no, algunas hipótesis indican que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otras abogan por “Just Another Vague Acronym”. La plataforma Java • Una plataforma es el ambiente de software o hardware en el que corre un programa. • La plataforma Java consta de dos componentes > La máquina virtual de Java > La API de Java (Application Programming Interface) • La API de Java es una vasta colección de componentes de software que proveen un conjunto de funciones útiles. La plataforma Java (II) • En Java el código fuente se escribe en un archivo de texto plano con extensión .java. • Luego, el código es compilado a archivos .class . Un archivo .class no contiene código nativo a un tipo de procesador, en cambio contiene bytecodes . • Finalmente, la aplicación es compilada Just in Time por la maquina virtual de Java, transformando los bytecodes en código nativo en tiempo de ejecución. La plataforma Java (III) • El bytecode es lenguaje nativo de cualquier implementación de la máquina virtual de Java. De esta forma se logra que un programa Java corra en cualquier plataforma que disponga de una JVM. La plataforma Java (IV) • La mayoría de los sistemas operativos modernos proveen grandes cantidades de código reusable. • Generalmente, este código es provisto en forma de bibliotecas dinámicas . • Dado que la plataforma Java no depende de ningún sistema operativo especifico, las aplicaciones no pueden depender de bibliotecas existentes. • En cambio, la plataforma provee un conjunto de bibliotecas de clases estándar . La plataforma Java (V) • Las bibliotecas de clases Java tienen tres propósitos dentro de la plataforma: > Proveer un conjunto de funciones para tareas comunes (parsing de strings, mantener listas, etc) > Proveer interfaces abstractas a tareas que dependen fuertemente del sistema operativo y/o hardware (acceso a redes y archivos, por ejemplo) > Proveer emulación para características que no están presentes en una plataforma, o al menos chequeos que nos permitan saber si una característica esta o no presente La plataforma Java (VI) • Se han producido otros compiladores para la máquina virtual de Java. • Algunos de estos lenguajes existían previamente mientras que otros son extensiones del lenguaje Java. • Estos incluyen: > Groovy > Jython, intérprete Python que incluye jythonc, un compilador Python-a> > > > Java bytecode Scala JRuby, intérprete de Ruby Rhino, intérprete de JavaScript Kawa y SISC, intérpretes de Scheme La plataforma Java (VII) • Existen distintas “ediciones” de la plataforma Java: > Java ME (Micro Edition) > Java SE (Standard Edition) > Java EE (Enterprise Edition) ¿Qué es NetBeans? • Un IDE Java completo y modular > > > > Soporte “Out-of-box” para Java SE, Java EE, Java ME Gran conjunto de mólulos de terceros (plug-in's) Desarrollo intuitivo con drag-and-drop Debugger, Profiler, Refactoring, etc... • Gratuito y open-source > Open source desde Junio de 2000 > Extensa comunidad de usuarios y desarrolladores • Completa plataforma para construir aplicaciones > Aplicaciones cliente > Framework de ventanas, menús, barras de herramientas, etc Novedades de NetBeans 6.0 • Mejoras al editor de código • Soporte para Ruby, JRuby, y Ruby on Rails • Sencilla instalación y actualización • Data binding en componentes SWING • Profiling integrado, “puntos de profiling” • Características para el desarrollo de aplicaciones web visuales • Creador de juegos para dispositivos móviles • Mejoras en SOA y UML • Mejoras en la plataforma Netbeans Debugging y Profiling • Debugging visual (breakpoints, watchpoints) • Debugging remoto de un proceso • Modificación de código al vuelo • Debugging de JSP, Servlets, monitor de trafico HTTP • Ver, suspender y resumir threads • Monitor de actividad de Threads • Datos visuales de tiempo de CPU y llamadas a métodos • Vista centrada en objetos: allocated, live, age • Telemetría de JVM: uso de heap, garbage collection Developer Collaboration • Desarrollo de aplicaciones en forma colaborativa • Sistema de mensajes sensible a cambios en el código • El ambiente de desarrollo completo es compartido • Edición multi-party • Revisiones de código • Debugging colaborativo • Servidor público en share.java.net Matisse • Problemas que surgen al construir una GUI (sin Matisse): > Lidiar con APIs Swing > Por ejemplo GridBagLayout > Cambiar de tamaño y alinear los elementos > Crear aplicaciones con diferentes locales > Comportamiento dependiendo del SO > Binding de datos a los elementos de GUI • Matisse resuelve estos problemas Java DB • Distribución soportada por Sun de Apache Derby • Ideal para desarrollo y ejecución de aplicaciones Java > basada en estándares: 100% Java, SQL, JDBC, Java SE, EE, ME CDC > Sofisticado: stored procedures, triggers, tipos de datos definidos por el usuario > Pequeño: 2MB! > Seguro: encriptación on-disk, passwords > Soporte: Soporte 24/7 de Sun • Donde está Java DB? > En Java Enterprise system, Portal Server, Application Server, Glassfish > Soportado en NetBeans, Java Studio Creator, y Java Studio Enterprise > Java SE 6! demo Java EE • La plataforma Java EE esta construida sobre la plataforma Java SE. • Provee un API y un ambiente de ejecución para desarrollar y ejecutar aplicaciones en red de gran magnitud, multi-tiered, escalables, confiables y seguras (comúnmente llamadas Enterprise ). Java EE (II) • En una aplicación multi-tiered la funcionalidad es dividida en areas funcionales aisladas, llamadas tiers. Java EE (III) • APIs de Java EE Java EE en NetBeans 6 • • • • • • • • Desarrollo de aplicaciones Web Soporte Java EE 5 Debugging, testing, profiling Struts y JavaServer Faces (JSF) JBoss 4, WebLogic 9, WebSphere Desarrollo de web services (cliente + servicio) Desarrollo de aplicaciones AJAX EJB Java ME • La plataforma Java ME provee una API y una máquina virtual reducidas. • La API de Java ME es un subconjunto de la de Java SE junto con bibliotecas especiales útiles para el desarrollo de aplicaciones para dispositivos pequeños • Frecuentemente las aplicaciones Java ME son clientes de servicios de aplicaciones Java EE. Java ME (II) • Java ME se divide en: > Configuraciones: especificaciones que detallan una VM y un conjunto de bibliotecas para dispositivos dentro de un determinado rango (CDC y CLDC son las disponibles actualmente). > Perfiles: complementan las configuraciones añadiendo APIs de alto nivel (por ejemplo MIDP – profile para teléfonos celulares). > Paquetes opcionales: funciones especiales para tecnologías no incluidas originalmente (BD especificas, gráficos 3D, etc). Java ME (III) CLDC • Connected, Limited Device Configuration • El propósito de CLDC es estandarizar una plataforma altamente portable y con un mínimo consumo de memoria para el desarrollo de aplicaciones Java para dispositivos con recursos limitados, pero con capacidades de conexión. • Ejemplos: teléfonos celulares, pagers, PDAs, set-topboxes para TVs, algunos electrodomesticos, etc... Mobile Information Device Profile (MIDP) • Perfil para dispositivos móviles de datos • Una aplicación MIDP es conocido como MIDlet • Trabaja sobre CLDC • Se enfoca en: > Ciclo de vida de la aplicación > Seguridad > Almacenamiento en red y persistencia > Sonido, temporizadores, UI Sun Wireless Toolkit for Java • Implementacion de CLDC y MIDP > incluye... WMA, MMAPI, JTWI, J2ME Web Services, PDAP, Bluetooth and OBEX, Mobile 3D Graphics • • • • • Emulador Soporte OTA Encriptador Ofuscador Pre-verificador NetBeans Mobility Pack • Usa Sun Wireless Tooklit for Java • Creación de interfaces gráficas con Drag-anddrop • Soporte para fragmentación MIDP 2.0 Gaming APIs • API de alto nivel > Implementaciones en código nativo > Reduce el tamaño de la aplicación • GameCanvas permite dibujar y consultar estados de las teclas • Los Sprites y TiledLayers son los elementos visuales > Los sprites pueden animarse, transformarse, moverse y detectar colisiones. > Los TiledLayers son grillas que contienen imágenes. > Los TiledLayers se utilizan para generar grandes áreas virtuales (por ejemplo, escenarios con desplazamientos) > Los TiledLayers pueden contener piezas estáticas o animadas demo JavaFX • JavaFX es una nueva familia de tecnologías Java anunciadas por primera vez en mayo de 2007 • Ideadas con el propósito de ser utilizadas para crear Rich Internet Applications (RIAs) • Actualmente compuesto por: > JavaFX MobileJavaFX Script > JavaFX Script JavaFX Mobile • JavaFX Mobile es un sistema operativo Java para la nueva generación de dispositivos moviles. • Proveé implementaciones de Java ME y Java SE corriendo sobre un kernel Linux. • Permite: > Mejorar la portabilidad y performance de las aplicaciones, proveyendo un middleware y un stack de aplicaciones implementadas en Java. > Funcionalidad on-device mas interesante, comunicando las aplicaciones a través de interfaces y tecnologias avanzadas. > Personalizar rapidamente los dispositivos a las distintas compañias. Diferencias entre el modelo tradicional y JavaFX Mobile Componentes JavaFX Mobile JavaFX Script • JavaFX Script es un lenguaje de scripting declarativo estáticamente tipado para la plataforma Java • Provee: > > > > > Data-binding automático Soporte completo para gráficos 2D Componentes Swing estándar Animación declarativa. Como esta construido sobre la plataforma Java, es sencillo utilizar cualquier clase Java en los scripts JavaFX. JavaFX Script - ¿Porqué? • Escribir GUIs es difícil (y molesto) > Matisse reduce el trabajo de crear GUis, pero todavía hay demasiados “listeners”. • Las interfaces por defecto son planas y aburridas > Un conjunto de cajas grises rectangulares (no solo en Java), no comparables con otras tecnologías web, como Flash. • Java 2D provee mucho de lo que se necesita > Pero es complicado de usar para este propósito y no posee un comportamiento “composicional” • JavaFX combina widgets de tipo Swing con primitivas Java 2D en una sintaxis declarativa que soporta comportamiento composicional y transformaciones avanzadas como translaciones, rotaciones,clipping, shearing, etc JFX Script – Ejemplos de Código class HelloWorldModel { attribute saying: String; } Definición de la clase var model = HelloWorldModel { saying: "Hello Campus" }; Instancia de la clase HelloWorldModel var win = Frame { title: bind "{model.saying} JavaFX" width: 200 content: TextField { value: bind model.saying } visible: true }; Frame con un campo de texto. El titulo y el valor del campo están vinculados con el atributo de “model”. JFX Script – Ejemplos de Código (II) var x = [1,2,3]; insert 10 into x; insert 12 before x[1]; delete x[. == 12]; delete x[. >= 3]; insert 5 after x[. == 1]; insert 13 as first into x; delete x; Inicialización x == [1, 2, 3, 10] x == [1, 12, 2, 3, 10] x == [1, 2, 3, 10] x == [1, 2] x == [1, 5, 2] x == [13, 1, 5, 2] x == [] function factors(n) { return select i from i in [1..n/2] where n % i == 0; } Queries para vectores! JFX Script – Ejemplos de Código (III) class X { attribute nums: Number*; } trigger on new X { insert [3,4] into this.nums; } Evento de creación Evento al insertar en vector Evento al cambiar valor trigger on insert num into X.nums { System.out.println("just inserted {num} into X.nums at position {indexof num}"); } trigger on X.num[oldValue] = newValue { System.out.println("X.num: just replaced {oldValue} with {newValue}"); } JFX Script – Ejemplos de Código (IV) import javafx.ui.canvas.*; import javafx.ui.*; Canvas para dibujar Canvas { content: Group { transform: [rotate(20,0,0)] content: [Rect { x: 20 y: 20 height: 80 width: 300 ... }, Ellipse { cx: 150 cy: 80 ... }, }] } } Agrupamiento de controles Grupo transformadas Declaración de gráfico 2D Opciones para ejecutar código JFX Script Corriéndolo con Java Web Start: • Java Web Start es la implementación de referencia de la especificación JNLP (Java Networking Launching Protocol) • Permite arrancar aplicaciones Java que están en un servidor web de aplicaciones comprobando previamente si el cliente tiene la versión actualizada de dicha aplicación (JRE) • El arranque de dichas aplicaciones puede ser efectuado mediante enlaces en una página web o bien a través de enlaces en el escritorio cliente. • Se asegura que una aplicación es distribuida siempre en su última versión. Opciones para ejecutar código JFX Script (II) Ejecutándolo desde un programa Java: public class FxScriptLauncher2 { public static void main(String[] args) { try { // set up script: ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByExtension("fx"); engine.put("now:java.util.Date", new Date()); InputStreamReader reader = new InputStreamReader(FxScriptLauncher2.class.getResourceAsStream("HelloWorld.fx")); engine.eval(reader); } catch (Exception e) { e.printStackTrace(); } } } import java.io.InputStreamReader; import java.util.Date; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; demo Netbeans 6.0: ¿Por dónde empezar? • Bajar Netbeans 6.0 • Unirse al proyecto Netbeans.org • Crear una cuenta de desarrollo colaborativo • Hacer los tutoriales • Participar en los foros • Escribir una aplicación de escritorio • Probar el módulo de colaboración con tus amigos http://www.netbeans.org • Bajar Java FX y el plug-in para Netbeans o Eclipse • Unirse al proyecto OpenJFX en Java.net • Hacer los tutoriales • Participar en los foros de JavaFX • Comenzar a adentrarse en las posibilidades de JavaFX http://openjfx.dev.java.net Java FX ¿Qué puedo Hacer? Acelera tu carrera profesional con SAI • Entrenamiento GRATIS vía web de JavaTM, SolarisTM y mas. > Página de la iniciativa: http://ar.sun.com/training/sai/index.jsp > Cursos en: http://learningconnection.sun.com • Company name: SAI-Universidad de La Punta • Company ID: CUS-0000116543 Acelera tu carrera profesional con SAI (II) • Incrementá tu potencial de obtener salarios mayores con certificaciones Sun > Sun Certified Associate/Programmer for the Java 2 Platform SE > Sun Certified Web Component Developer for Java EE > Sun Certified Mobile Application Developer for Java ME > Sun Certified System/Network Admin for Solaris Operating System • Exámenes de entrenamiento gratis • Exámenes oficiales rebajados de U$S 120-200 a U$S 40 ¿Preguntas? Muchas Gracias! Ezequiel Aranda Sun Campus Ambassador - UNICEN Ezequiel.Aranda@Sun.com blogs.sun.com/argentina_ambassador