<
Información de la Plataforma desde una aplicación escrita en Java.
Cordial saludos para todos, disculpen mi larga ausencia, casi dos meses sin volver a escribir artículos en mi sitio estaba desesperando, espero de corazón que hayan trabajado, estudiado y disfrutado mucho todos estos meses, yo he hecho lo mismo pero con muy poca oportunidad de descansar y disfrutar, debido a que he estado muy ocupado con mis nuevos estudios de postgrado.
Bueno esta vez he preparado un artículo muy interesante, en el cual les enseñare varias cosas importantes entre las que se encuentran:
Diseñar y crear componentes.
Permitir que nuestras aplicaciones escritas en Java puedan interactuar con otras aplicaciones.
Uso de componentes para construir otros componentes o aplicaciones.
Principios básicos del uso de componentes y aplicaciones de software libre para crear nuevos componentes y aplicaciones.
Seguir con el aprendizaje de Netbeans para la construcción de software escritos con Java.
Para lograr estos objetivos he ideado la construcción de un componente que podrá ser reutilizado por otras cualquier tipo de aplicación Java, permitiéndoles obtener información propia del PC como por ejemplo:
- Información sobre la CPU, marca, modelo, velocidad, arquitectura, fabricante
- Información sobre los dispositivos de almacenamiento, tipo dispositivo, nombre de la partición, serial de la partición, total despacio, especio ocupado, espacio libre, si es de escritura o de solo lectura.
- Información sobre el sistema operativo, fabricante, versión, modelo, usuario que inicio sesión, carpeta del usuario, tiempo de inicio del sistema.
- Información sobre la memoria RAM del PC y de la Maquina Virtual Java, cantidad total, ocupada y disponible.
- Información de los procesos que se ejecutan sobre el Sistema Operativo, nombre del ejecutable, uso de la CPU, uso de la memoria y sesión en la que se ejecuta.
Algunos de estos datos los vamos a obtener mediante el uso de un componente de Software Libre (de ahora en adelante en este articulo Software Libre lo llamare SL) llamado Sigar, sellada bajo la magnífica y siempre glorificada GNU -GPL (General Public License) o Licencia Publica General, este componente es una librería de clases escritas en lenguaje Java, acompañadas de otro conjunto de librerías escritas en lenguaje C, compiladas en varios sistemas operativos entre los cuales se encuentra Windows, varias distribuciones de GNU/Linux y otras de GNU/Unix y otros Unix como Solaris y FreeBSD, en su página oficial se puede descargar Sigar para ser utilizada en muchos lenguajes de programación, entre ellos por supuesto Java, que es el que les traigo a colación.
¿Por qué un componente Java para obtener información sobre la plataforma?
Java al ser un lenguaje multiplataforma, posee grandes ventajas frente otros lenguajes de programación nativos como VBA, C++, entre otros, pero irónicamente la multiplataformidad también es culpable de muchos de los problemas que agobian a este excelente lenguaje, esto se debe a que los programas escritos en Java utilizan un programa llamado Maquina Virtual o JVM para compilación y posterior ejecución, el cual simula la plataforma de un PC, es decir su CPU y su Sistema Operativo, elementos con los que interactúan normalmente cualquier programa, sobre todo los que están escritos en lenguajes nativos, se les llama nativos porque al utilizarlos para construir nuestros programas, su compilación genera código binario o ejecutable especifico para la plataforma en la que fueron compilados, obligándonos entonces a tener que recompilar y generar ejecutables de nuestros programas en todas las versiones que hay de cada sistemas operativos, de tal forma que el usuario pueda seleccionar y escoger las compilaciones adecuadas a sus plataformas, esta situación permite a los programas escritos en lenguajes nativos tener acceso directo a memoria, a las librerías del SO para E/S, dispositivos de almacenamiento, gestión del núcleo y hardware (win32 en el caso de Windows y kernel en el caso de GNU/Linux), incluso violar las reglas de presentación, registro y ejecución supervisada por el SO, como por ejemplo los virus.
Los programas escritos 100% en Java no poseen algunos de los privilegios o permisos de ejecución descritos anteriormente, porque al similar virtualmente la plataforma mediante la JVM, al compilar código fuente Java se genera código ejecutable llamado ByteCode diseñado especialmente la plataforma virtual y no para la plataforma real, como si ocurre con los lenguajes nativos, por ende, al ser ejecutados los programas Java, es necesario tener instalada la JVM sobre la plataforma real de nuestros PC, aunque la JVM simule ser la verdadera plataforma del PC, en realidad es y se ejecuta como cualquier otro programa corriendo sobre el verdadero SO, RAM y CPU, como ventanaje principal permite ejecutar cualquier programa escrito y compilado con Java en cualquier PC que tenga la JVM instalada, sin tener que recopilar varias veces el mismo programa para todas las plataformas existentes, es decir, escribimos nuestros programas, lo compilamos una sola vez y lo podemos ejecutar en cualquier PC que tenga la JVM instalada, como desventajas tenemos que los programas Java:
- No tienen ninguna comunicación directa con la plataforma real, de hecho, los programas Java desconocen al SO y a l CPU real, para ellos solo existe la JVM como plataforma (Mini Plataforma), por ende todas las operaciones que realizan las hacen sobre ella.
- Al ser JVM un programa cómo cualquier otro en ejecución sobre la plataforma, no podemos escribir aplicaciones 100% en código Java para manipular el comportamiento de ciertos aspectos del SO, ya que la JVM no tiene permisos para realizar estas operaciones sobre el SO, para evitar que las aplicaciones Java se salgan del control del SO y de la JVM, pudiendo desestabilizar la plataforma real del PC, como consecuencia a estas restricciones Java no puede generar código maquina, muy útil para realizar tareas como:
- Cambiar la forma rectangular de una ventana, solo mediante un truco de transparencia e imágenes.
- Colocar un programa Java en el registro de Windows, ya que el sistema operativo no lo identifica como un programa mas, solo identifica a la JVM que lo ejecuta, para el SO la JVM es el programa y cada programa Java ejecutándose sobre la JVM es tan solo un subproceso ejecutado por dicha maquina virtual, si se termina el proceso de la JMV, se terminara con la ejecución de todos los programas Java ejecutados en el PC.
- Conocer los dispositivos de almacenamiento del PC y sus respectivos sistemas de archivos o particiones.
- Conocer que otros programas o procesos se están ejecutando en el PC junto a la JVM o junto a nuestros programas Java.
- Saber la versión, marca, velocidad, arquitectura y modelo del CPU.
- Conocer información propia de la memoria RAM del PC, los programas Java solo pueden saber la cantidad de memoria RAM que el sistema operativo le a la JVM para que actué como falsa plataforma para sus procesos, los cuales están representados por nuestros programas Java.
- Interactuar directamente con los puertos de entrada y de salida, como el serial, paralelo o USB.
- Color nuestros programas Java en el administrador de instalación y desinstalación de aplicaciones del SO, este no las ve como otras aplicaciones mas, sino como subprocesos ejecutados por la JVM.
- los programas escritos en Java son más lentos que otros programas escritos en lenguajes nativos, esto se debe a que su ejecución está limitada a la velocidad procesamiento de la JVM, el código compilado bytecode de los programas Java tiene que ser procesado y ejecutado primero por la JVM, para luego ser interpretado y ejecutado como código ejecutable nativo para la plataforma en la que se está ejecutando la JVM, algo que no es necesario en los programas escritos con lenguajes nativos.
- La JVM ejecuta un subprograma denominado Garbage Collector o Recolector de Basura, el cual reprocesa constantemente los todos nuestros programas Java mientras estos están en ejecución, con el único objetivo de liberar la memoria RAM de la JVM que ya no está uso por los programas Java y que aun tiene información no útil, considerada basura por la JVM, esto disminuye aun más la velocidad de ejecución de nuestros programas Java.
La solución
Para dar solución a los problemas descritos anteriormente, Java posee la gran capacidad de poder integrarse con muchos lenguajes de programación, entre ellos los lenguajes nativos como C y C++, PHP. VBA y todos los lenguajes de la familia .NET Framework, esto permite a los desarrolladores Java utilizar las bondades (velocidad, permisos al núcleo o kernel del SO, código binario a nivel de máquina) que poseen el resto de lenguajes de programación, escribiendo aplicaciones en estos lenguajes e integrarlas o ejecutarlas desde código Java, pasándole parámetros de entrada y recibiendo parámetros de salida emitida por dichas aplicaciones, tambien se puede hacer el proceso contrario, realizando aplicaciones Java y ser ejecutadas desde otros lenguaje, como vemos Java pone en práctica dos proverbios muy sabios como lo son:
Si no puedes con el enemigo hazte amigo de él
Si no puedes hacer algo, simplemente delega a otros esa función.
A esta capacidad de java se le conoce como JNI o Métodos Nativos de Java, que consiste en escribir partes de un mismo programa en lenguajes diferente a Java o lenguajes Nativos (en teoría se puede utilizar cualquier lenguaje, pero en la práctica solo se ha desarrollado ampliamente y de forma satisfactoria con el lenguaje C y C++, VB.NET, C#, Python y Rubi y PHP), compilarlos por separado y escribir código Java que realice las llamadas a las funciones y clases compiladas en los otros lenguajes, normalmente empaquetados en librerías y repositorios (.dll, .cab, .exe y .lib para Windows, .os y .bin para Linux, .dylib para MacOS).
Existen muchas iniciativas y proyectos hace y están haciendo uso exhaustivo de esta característica de Java, entre ellos el componente de Software Libre Sigar, que tratare de mostrarles de forma básica en este articulo, otros ejemplos de aplicaciones Java Nativas son:
- JavaComm: es SL (Software libre) que nos permite trabajar con los puertos seriales (com y usb) y el puerto paralelo.
- JavaforUSB: es SL igual que el anterior pero especialista en puerto USB.
- JavaPos y JPos: son SL para trabajar con dispositivos vinculados a un punto de venta (impresoras POS y Fiscales, Display, Cajas Registradoras, balanzas, Lectores de Barras, Lector de Tarjetas de dinero, etc)
- gstreamer-java: es SL para capturar video por cámaras.
- DJ Project Native Swing: es SL para integrar el navegador web, el reproductor y flash dentro de aplicaciones java y otras utilerías
- jflash: es SL para interactuar para interactuar Flash con Java y viceversa
- JFlashPlayer: no SL igual que JFlash
- JNIEasy: es SL y permite realizar de forma muy simple aplicación java y convertirlas por debajo en código C++, no hay que saber C.
- Entre otras..
Aplicación de ejemplo para este Articulo
Se trata de realizar un componente utilizado para obtener información importante sobre algunos elementos físicos del PC, como la memoria, el disco duro y la CPU, del mismo modo obtendremos información sobre destalles específicos del S.O como su versión, arquitectura, fabricante, modelo y datos sobre el usuario que lo inicio y por ultimo le añadiremos a nuestro componente funcionalidad para manipular los procesos que se ejecutan sobre el sistema operativo, tal y como lo hace el administrador de de tareas, sacar alguna información poco muchas veces hemos querido que el software que escribimos pueda mostrar información sobre la arquitectura y algunos elementos de Hardware del PC donde se instalan, esta información para muchos fines benéficos, el más común de todos es verificar si el PC donde se instala nuestro software cuenta con las características (algunas veces llamados requerimientos no funcionales) necesarias para poder ejecutar el aplicativo, otro objetivo igualmente popular pero menos agradable para el usuario, es evitar en alto nivel que el software sea instalado más un PC al mismo tiempo, esta fue una de las muchas estrategias que utilizo Microsoft para evitar instalaciones ilegales (un forma de piratería de software) de sus productos, la cual consiste en leer información propia del hardware del PC, por ejemplo el serial de formateo que tiene una partición del disco duro, e mas serial de la RAM, el serial, marca , modelo y velocidad del CPU, espacio total de la partición, serial, modelo y marca de la tarjeta madre, etc, luego esta información es enviada vía internet a un servidor Web de la compañía dueña del software instalado, junto a ella se envían otros datos, como por ejemplo los datos de la persona que compro legalmente la copia de uso (licencia comercial) del software y el numero serial o clave de instalación incluido en la copia original, todos estos datos se almacenan en una base de datos, esto sirve para llevar un control de las ventas y por supuesto de las copias instaladas, notificando en cada instalación si la copia del software es legal o ilegal, al comparar los datos del PC y de instalación con los datos almacenados en la Base de datos, algunos software toman medidas como evitar la instalación o deshabilitar el uso del producto, otros simplemente notifican de la ilegalidad, informado las formas de adquirir una copia legal, y pueden incluso deshabilitar algunas funcionalidad es importantes del software.
Ejemplos del uso de este componente.
Algunas empresas que desean mantener registro de las características sobre los equipos de compto que utilizan, este componente permitirá que aplicaciones distribuidas se comuniquen entre enviándose periódicamente información específica sobre las características de cada uno, almacenarlas en una base de datos para su posterior seguimiento, ver los procesos y manipular en ejecución de una maquina remota, mediante el desarrollo de aplicaciones distribuidas escritas en Java que envíen de un punto a otro un listado de los procesos que en ellas se ejecutan, por ejemplo en un café internet, una sala de informática académica, supervisión de la ejecución de aplicaciones en una empresa y otro uso interesante será, llevar un seguimiento estadístico de las plataformas en las que se instalan las aplicaciones que desarrollamos con el fin de prestar un mejor soporte y servicio a nuestros usuarios y clientes, aun que se puede utilizar este componente para impedir que se instalen nuestras aplicaciones en más de una maquina de forma simultánea, utilizando para ellos la información de la plataforma en la que se esta instalando el software y compararla con la información sobre la ultima instalación realizada por el usuario, acompañada por sus datos y una clave de registro, característica propia de algunos software propietarios o no libres, legalmente no se está permitido el uso de este componente para tal fin, esto se debe a que voy a utilizar el componente de SL Sigar y por ende se violaría una de las reglas primordiales de la licencia GNU-GPL bajo la cual está sellada.
Que es GNU-GPL de Software Libre.
Sin importar cual sea el uso que le darán a este componente que voy a crear en este articulo, quien utilice software o construye software debería leer la importante licencia GNU-GPL, si aun no la conocen pueden leerla de su sitio oficial GNU licencias GPL, en este articulo no voy a tratar este tema porque perdería el objetivo inicial, pero si les cuento que esta licencia cuenta con todo el fundamento legislativo que puede tener un contrato de servicios, es decir, su violación puede ocasionar graves conflictos penales, especialmente para los profesionales en informática y empresas que se dedican a ofrecer servicios y desarrollo de soluciones informáticas.
GPL básicamente estipula que todo producto digital (software, documentos, página Web, obra musical, obra multimedia como videos, presentaciones, etc.) que desee utilizar esta licencia como contrato de uso, deberá cumplir con los cuatro los pilares del software libre, que en palabras de Richard Stallman pionero y fundador del movimiento internacional GNU:
- Un programa es libre si puede ser ejecutado y usado de todas las formas en que uno quiera, a diferencia de los privativos tienen limitaciones por medio de la licencia de uso o incluidas en el código.
- El código debe permitir el estudio y cambio haciéndose público.
- La copia y distribución debe ser libre.
- El software libre debe permitir la distribución de copias modificadas por un programador, inclusive permitir su venta.
Repito, hablare en otro artículo con detalle al respecto de cada punto, por ahora solo basta con decirles que muchas personas con mente retorcidas y e cree más astutos que todos nosotros, llamadas piratas, piensan que pueden utilizar estos cuatro estatutos del software libre para sacar provecho del trabajo que otros han realizado, de esta manera es muy fácil pensar por ejemplo, que podemos utilizar código fuente o código compilado de un software libre para crear un nuevo software que no sea libre, es decir negar al menos una de las cuatro libertades y así sacar ventajas económicas o reconocimiento intelectual a costa del sacrificio, trabajo y conocimiento tecnológico de las personas que originalmente crearon el SL con toda la buena voluntad que los caracteriza, y lo han puesto a disposición de todos nosotros sin ninguna clase de restricción de uso, a estas personas sucias les llamo piratas de SL, o ladrones del pueblo, algunos títulos fanfarrones que tiene profesionales y de postgrado en informática realizan estas accesiones sucias, aun mas sabiendo perfectamente que es ilegal, desafortunadamente algunos los ven como grandes personas dentro de su contexto laboral, debe ser porque gozan de una suerte envidiable por muchas personas realmente serias, o porque no los conocen muy bien, a mi esas personas no me engañan, yo solo los veo como mediocres y charlatanes, discúlpeme, le juro que no es con usted querido lector o lectora, cualquier parecido con la realidad es simple pura coincidencia, excepto en el área en la que me desempeño laboralmente, siguiendo con SL es importante notar que es aquí donde la licencia GPL entra a tomar un papal más que protagónico, yo diría heroico, porque dentro de los términos y condiciones de la Licencia Publica General en los artículos 2 y 3 para ser mas especifico, se indica explícitamente que cualquier modificación del código fuente o cualquier vinculación del producto con otro producto de software diferente, ya sea de forma parcial o total, obliga de forma automática al producto subyacente que sea liberado mediante la misma licencia GPL, en cualquiera de sus presentaciones, ya sea un nuevo producto, actualizaciones del mismo o mejora del software libre utilizado durante el proceso, esto incluye cualquier tipo de uso del Software Libre GPL, no solamente su código fuente, sino también el código compilado, es de decir, imaginemos por ejemplo que construimos un programa que utilice como SMBD a MySQL que es SL GPL, entonces estamos obligados a liberar nuestro programa con la licencia GPL, de no ser así, cometeríamos un delito informático conocido como piratería de Software Libre, así es amigos, como lo están imaginado en estos momentos, la licencia GPL es viral, todo producto sea un sistema competo, un componente que utilice para funcionamiento o beneficio, al menos una línea de código fuente o compilada con esta licencia, también deberá ser liberado como GNU-GPL o alguna otra licencia derivada o compatible con ella, tal y como se indica en su sitio http://www.gnu.org/licenses/license-list.es.html , es por esto que debemos leer muy bien los términos de las licencias de un software en cualquiera de sus tipo (SO, utilidad, herramienta de trabajo, librería o script de código fuente) domo instalador o código fuente y recordar que si es una licencia de software libre, para nosotros lo menos importante es el código fuente de nuestro proyecto y debemos respetar las cuatro libertades básicas del SL.
Explicado lo anterior, podemos continuar con nuestro proyecto,
Bajo este principio fue precisamente como se creó la librería Sigar, con el fin de obtener información propia del SO y hardware del PC desde el lenguaje Java.
Manos a la Obra.
Primero que todo descargamos la librería Sigar desde si sitio oficial de descarga http://support.hyperic.com/display/SIGAR/Home, luego descomprimimos el archivo en nuestro directorio de trabajo preferido, entramos a la carpeta creado y podemos ver un directorio llamado sigar-bin, allí se encuentran los archivos necesario para utilizar en nuestros proyectos, si no usamos un buen IDE como NetBeans o Eclipse, debemos colocar esta carpeta dentro de la ruta de la variable de entrono ClassPath de Java, para más información pueden ver este otro articulo
Aun que Sigar ofrece clases para obtener casi toda la información que deseamos al respecto, parte de la intención que tengo con este artículo es enseñarles como utilizar Java para comunicarnos con aplicaciones (.exe, .bat, .sys) desde el SO DOS, en este caso para obtener el serial de cada partición y obtener información sobre los procesos ejecutándose sobre la plataforma, es importante anotar que los comandos que utilizare son los de DOS, aunque pueden existir comandos equivalentes en otros SO, el código lo escribiré solo para procesar la salida generada por estos comandos, de tal forma que muy probablemente esta función no podrá ser de utilidad al ejecutar el programa en otras plataformas.
El proyecto está diseñado de la siguiente forma:
- Crearemos un componente que devuelva información del la plataforma solo con el uso de la librería Siglar.
- Luego le daremos la capacidad al componente para que pueda obtener el nombre y serial de las particiones.
- Por último haremos que el componente devuelva información sobre los procesos ejecutándose sobre la plataforma.
- Todo esto lo haremos solo programando en Java sobre el IDE NetBeans y por supuesto con el uso de algunas utilidades del sistema operativo, en este caso MS Windows.
Herramientas utilizar.
JSDK 1.6: El Standard Developer kid Para Java que a la fecha en la que escribí este articulo, se encontraba en la versión 1.6u18.
NetBeans IDE: El entorno Integrado de Desarrollo de mi preferencia para Desarrollar aplicaciones en Java, que a la fecha en la que escribí este articulo se encontraba en la versión 6.7 estable y 7.0 beta.
Sigar: Librería de SL escrito para múltiples lenguajes de programación entre ellos Java, la cual nos permite extraer información importante sobre la plataforma operativa de un PC, estos datos normalmente solo pueden ser consultados mediante librerías especiales escritas en lenguajes híbridos de bajo y lato nivel como por ejemplo C (es el más común), ensamblador, Basic, pascal, etc, el objetivo de Sigar es abstraer al programador de instrucciones de bajo nivel o de aprender otros lenguajes de programación para poder información sobre la plataforma desde sus programas.
SO Microsoft Windows Vista Home Basic (se puede utilizar cualquiera de las versiones de Windows), solo indispensable para desarrollar la segunda parte de este articulo, después de terminado el componente se puede utilizar cualquier sistema operativo para probar el componente.
TaskList: Software de MS (Microsoft) que se ejecuta como un comando entregado en el SO D.O.S (Disk Operation System), el cual permite ver una lista de los procesos que se ejecutan sobre el sistema operativo, este comando cuenta con muchos parámetros que permiten obtener información relevante sobre procesos en ejecución, el tipo de procesos si es aplicación cliente o servicio, el consumo de la RAM de dicho proceso etc.
Vol: Software de MS (Microsoft) que se ejecuta como un comando entregado en el SO D.O.S (Disk Operation System), el cual permite ver información sobre una determinada partición, esta información consiste en el Serial de particionado y el nombre de la partición.
Para más información sobre el uso de Netbean puede ver este artículo.
Crear un proyecto nuevo en Netbean
1. ir a menú archivo à clic en nuevo proyecto

2. Seleccionar en Categoría Java y Proyecto Biblioteca de clases Java, pulsar siguiente.

3. Colocar un nombre al proyecto (recordar las reglas de nombres de Proyectos, Paquetes, Clases, Interfaces, Enumeraciones, Métodos y Variables),
4. Colocar el nuevo proyecto en una ruta conocida, por ejemplo dentro de la ruta por defecto de los proyectos de NB.
5. Si se desea otra ruta pulsar el botón examinar y escoger la ruta deseada.
6. Notar que se crea un nuevo directorio con el nombre del proyecto (recordar que esta directorio tiene una carpeta llamada SRS, BNPROYECT, TEST, BUILD y DIST estos dos últimos se crean al compilar y compilar y generar el proyecto).
Verificar que se ha creado el nuevo proyecto
- Ir al panel de Proyectos de NB y notar que no se crea un paquete raíz con el nombre del proyecto, tal y como si ocurre cuando creamos un proyectos tipo Aplicaciones Java o Aplicaciones de Escritorio Java, el resto de la estructura es igual a los otros dos tipos de proyectos.

Crear un nuevo paquete en el proyecto
1. Luego nos colocamos en sobre el árbol del Proyectos en el ítem paquete predeterminado, el cual se encuentra vacio (de color gris), pulsamos clic derecho sobre dicho paquete y creamos un nuevo Paquete Java, tal como lo muestra la figura, este paquete será utilizado para almacenar la clase que será compartida entre el cliente y el servidor.

2. Damos un nombre l paquete (recordar las reglas de nombrado de paquetes Java ), note que se crea un nuevo directorio con el mismo nombre del paquete, este nuevo directorio será colocado dentro del directorio SRC, recordar que en java los paquetes representan directorios donde se colocan las clases organizadas según su funcionalidad.

3. Ir al panel de Proyectos y ver que se ha creado un nuevo paquete con el nombre que escogimos (el nombre del paquete es irrelevante, se pude escoger cualquiera que cumpla con las reglas)

Crear las clases del proyecto
Ahora crearemos una nueva clase para colocar en ella el código fuente que será enviado por la red y ejecutado por el cliente o servidor una vez sea recuperado y reconstruido a su tipo original,
1. Nos colocamos sobre el paquete que hemos creado y pulsamos clic derecho sobre él, seleccionamos la opción nuevo, luego la opción Clase Java.

2. Colocamos un nombre a la nueva clase (Recordar las reglas Java para dar nombres a Clases), verificar que la nueva clase será colocada dentro del proyecto que estamos trabajando (el panel de proyectos puede tener más de un proyecto abierto y si no tenemos cuidado podemos confundirnos de proyecto ), de igual forma verificamos que la nueva clase sea guardada dentro del paquete que seleccionamos, notar que se creara nuevo archivo con el nombre de la clase y con extensión .java (en java los archivos de código fuente son almacenados con extensión JAVA), por ende NB lo coloca dentro del directorio SRC (abreviatura de Source, que en español significa fuente), aquí es donde se almacenan todos los archivos de código fuente java del proyecto que estemos trabajando.

3. Ir al panel de proyecto y ver que se ha creado un nuevo archivo de código fuente en el paquete correspondiente.

4. Repetir el proceso para crear las otras clases, una llamada ParticionDiscoDuro, otra llamada Proceso y otra llamada Principal
5. Ir al panel de proyectos y desplegar el paquete utilidad, y v remos que se han creado nuevas las nuevas clases.

Agregar librerías al nuestro proyecto
Para hacer uso de la librería SL Sigar hay que agregarla al proyecto, igual ocurre con todas las librerías que necesitemos utilizar.i
Para ver como agregar librerías al proyecto, podemos seguir los siguientes pasos
1. Crear una nuevo carpeta en el directorio principal del proyecto

2. Ir al panel de archivos y seleccionar el nuestro proyecto, dar clic derecho y seleccionar la opción nuevo, luego la opción Otros

3. En la ventana que aparece debemos seleccionar la categoría Otros, que se encuentra al final de la lista
4. luego seleccionamos el tipo de archivo carpeta que se encuentra igualmente al final de la lista.
5. Pulsamos siguiente.

6. Le damos un nombre cualquiera a la nueva carpeta, si lo deseamos podernos pulsar en examinar para seleccionar la ubicación de dicha carpeta dentro del proyecto, podemos observar que la ruta de la nueva carpeta se encuentra dentro de la ruta del proyecto.
7. Pulsamos siguiente.

8. Repetimos el mimo proceso para crear otra carpeta llamada singar dentro de la carpeta librerías que acabamos de crear.

9. Verificamos que se haya creado una nueva Carpeta en el proyecto.
10. Ahora solo tenemos que ubicar dentro del sistema operativo la carpeta donde descargamos o colocamos nuestra librería, en este caso la librería Singar.
11. Una vez ubicada esta carpeta, si la librería viene en un archivo de empaquetamiento .zip, .rar, .7z, .tar, o .gz, descomprimimos dicho archivo, entramos a la carpeta que se genera después de la descomprensión, ubicamos la carpeta lib, entramos a ella seleccionamos todos los archivos con extensión .jar que se encuentran ubicados dentro de dicha carpeta lib (en algunos cosos solo es necesario el archivo .jar que tiene el mismo nombre que la librería), en nuestro caso particular también debemos seleccionar todas las librerías con extensión .DLL, .OS, . DYLIB Y .LIB, esto se debe a que SL Sigar ofrece información del PC donde se está ejecutando el programa que la utiliza, nuestro programa está escrito en Java, significa que es multiplataforma, lo que quiere decir que SL Sigar debe obtener información sobre dicha plataforma, con el fin de ser compatible con la capacidad de multiplataformidad de Java, es por esta razón que el SL Sigar incluye en sus librerías un conjunto de archivos que contienen las bibliotecas de de código compilado nativo para muchas plataformas, entre las que se encuentran como lo había dicho anteriormente, la gran mayoría de distribuciones importantes o matrices de GNU/Linux (de las que se basan muchas otras distribuciones ), otras de GNU/Unix y por supuesto Windows
12. Damos clic derecho sobre los archivos seleccionado y escogemos la opción copiar, esto colocara una copia de los archivos en el porta-datos del sistema opetativo en el que estamos escribiendo nuestro software, en este caso Windows.

13. Luego volvemos a NetBeans y nos ubicamos nuevamente en el panel de Archivos, damos clic derecho sobre la carpeta que hemos creado y seleccionamos la opción pegar.

14. Verificamos que las librerías se han copiado físicamente dentro de la nueva carpeta creada.

15. Ahora vamos al panel de proyectos y seleccionamos nuestro proyecto en caso de que tengamos más de uno abierto,
16. Nos colocamos en la opción Biblioteca
17. Damos clic derecho escogemos la opción Agregar archivo JAR/Carpeta

18. Buscamos la carpeta de nuestro proyecto y entramos a la carpeta librerías donde colocamos nuestras librerías
19. Seleccionamos las librería necesarias o deseadas, en nuestro caso la librería singar.jar
20. Pulsamos abrir.

21. Verificamos que NetBeans haya colocado las librerías dentro de las bibliotecas del proyecto.

22. Repetimos estos mismo pasos por cada una de las bibliotecas externas que queremos agregar a nuestro proyecto.
23. De esta forma podremos utilizar en nuestro código fuente las clases compiladas que están dentro de las librerías agregadas al proyecto.
24. Las otras librerías que no son .jar debemos dejarlas siempre en la misma carpeta donde se encuentra la librería que las usa, en este caso la librería sigar.jar
Escribir el código de las clases necesarias.
Para escribir el código de las clases que harán parte del proyecto, solo tenemos que ir al panel de proyectos seleccionar el paquete deseado y seleccionar dando doble clic sobre el archivo de la clase que queremos editar, NetBeans nos proporciona un potente editor que nos facilita la generación de código de nuestras clases.
Como el código de las clases es algo extenso, explicare solo las funciones más importantes.
Estructura de la clase InformacionPC.java
Esta clase contiene un conjunto de atributos que almacenan información propia del PC, acerca del Sistema Operativo, de la CPU, de la Memora RAM y de los sistemas de Archivos de la plataforma en cualquier programa que utilice este componente.
Lo primero que hay que ver son las clases necesarias, aquí en esta grafica se pueden apreciar las clases que he utilizado, en primer lugar de la lista se encuentra:
- La Interfaz Serializable: la cual permite convertir nuestros objetos en un chorro de bits manipulables, haciendo posible el envió de dichos objetos por la red, almacenarlos en un archivo, etc.
- La clase SimpleDateFormat: utilizada para formatear fechas en formato Data a cadena y viceversa.
- La clase ArrayList: es una colección de objetos almacenados secuencialmente, se comporta exactamente igual que una lista y tiene muchas funciones para poder trabajar con los objetos que se encuentran referenciados en su interior
- La clase Calendar: se utiliza como base para trabajar con fechas en utilizando el calendario gregoriano.
- La clase Date: clase algo descontinuada para trabajar con fecha, en la actualidad solo se uso como objeto para almacenar los datos de una fecha, mas no para realizar operaciones con ellas.
- La clase GregorianCalendar: esta clase se diseño para ser la sucesora de Date, es la clase que se utiliza para realizar operaciones con fechas gregorianas.
- Las clases CpuInfo y CpuPerc: son clases que perteneces al componente Sigar, se utilizan para obtener información sobre el procesador de la plataforma.
- Las clases Mem y OperatingSystem:al igual que CpuInfo y CpuPerc pertenecen al componente Sigar, se utilizan para obtener información sobre la memoria RAM e información sobre el Sistema operativo respectivamente.
- La clases Sigar y SigarException: La primera es el núcleo de la librería Sigar, con ella se pueden optener cas todos los demás objetos de las clases que forman al componente, la ultima representa un error en tiempo de ejecución, posiblemente ocurrido por uno de varios motivos asociados a la plataforma

Las variables que utiliza la clase para guardar la información que obtiene sobre la plataforma

La función que recoge información sobre el sistema operativo

La función que recoge información sobre la CPU

La función que recoge información sobre la memoria RAM

La función que utiliza a la clase ParticionDiscoduro con el fin de hacer un llamado a su función datosDiscoDuro, para obtener información sobre las particiones de la plataforma

La función que imprime los datos recogidos sobre la plataforma al momento de representar un objeto de la clase InformacionPC como una cadena de caracteres imprimibles.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public String toString(){
SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
String fechaEncendidoS = formatoFecha.format(fechaEncendido);
String informacion =
"::: Datos del Equipo :::\n\n" +
"::: Datos del Sistema Operativo :::\n\n" +
"Sistema Operativo: "+nombreSO+"\n" +
"Arquitectura: "+arquitecturaSO+"\n" +
"Version: "+versionSO+"\n" +
"Nuemero de actualizaciones: "+numeroDeActualizaciones+"\n" +
"Fabricante: "+fabricante+"\n" +
"Descripcion: "+descripcionSO+"\n" +
"Año de fabrica: "+versionDeFabricaSO+"\n" +
"Uso de CPU : "+usoCPUSO+"\n" +
"Maquina: "+maquinaSO+"\n" +
"Codigo de fabrica: "+codigoFebrica+"\n" +
"Nombre de fabrica: "+nombreDeFabrica+"\n" +
"Fecha encendido: "+fechaEncendidoS+"\n\n" +
"::: Datos de la CPU ::: \n\n" +
"Marca CPU : "+fabricanteCPU+"\n" +
"Modelo CPU: "+modeloCPU+"\n" +
"Velocidad CPU: "+velocidadCPU+"MHz\n" +
"Consumo CPU: "+consumoCPU+"\n" +
"Tamaño de la Cache CPU: "+tamañoCacheCPU+"\n" +
"Total Nucleos: "+totalNucleos+"\n" +
"Total Socket CPU: "+totalSocketCPU+"\n" +
"Total Socket por Nucleo CPU: "+totalNucleosPorSocket+"\n" +
"Velocidad CPU: "+velocidadCPU+"\n";
int i = 1;
for (String consumo : consumoDeLosCPU) {
informacion += "CPU No." +i+ " tiene un consumo de "+consumo+"\n";
++i;
}
informacion += "\n::: Datos de la memoria RAM ::: \n\n" +
"RAM total: "+ramTotal+" Mb\n" +
"RAM Ocupada: "+ramOcupada+" Mb\n" +
"RAM Libre: "+ramLibre+" Mb\n\n"+
"::: Datos del Sistema de Archivos ::: \n\n" ;
for (MedioDeAlmacenamiento particion : listaPerticiones) {
informacion += "-- Paticion No."+(listaPerticiones.indexOf(particion)+1)+" --\n"+ particion;
}
return informacion;
} |
Por último se encuentra el constructor de la clase InformacionPC que se encarga de realizar el llamado a las funciones respectivas dando valores a sus variables atributos.

Estructura de la clase MedioDeAlmacenamiento.java
Esta clase le he diseñado para obtener información sobre las particiones de los medios de almacenamiento que se encuentran instalados en la plataforma, inicialmente utiliza la librería Sigar para obtener información del tamaño y tipo de medios, pero en la segunda parte de este articulo, le agregare mas funciones como por ejemplo que puede obtener el nombre y el serial del medio para plataformas Windows, esto lo realizare con el uso de unas utilidades de Windows.
Veamos cuales son las clases que utilizo para lograr mi objetivo.
La clase File: se utiliza para obtener información y realizar operaciones sobre uno o varios archivos de los sistemas de archivos que utiliza la plataforma.
Las clases FileSystem, FileSystemUsage, NfsFileSystem, SigarProxy, SigarProxyCache: pertenecen a la librería Sigar, las tres primeras representan una particiones de archivos de la plataforma, ejecutan código de bajo nivel escrito en C, para obtener información sobre las particiones, las dos últimas clases se utilizan para hacer conexiones con unidades de almacenamiento remoto, siempre y cuando la plataforma local tenga acceso a ellas.

Los atributos de la clase que almacenan los datos obtenidos sobre cada partición de archivos

Los constructores de la clase

Constructor que utiliza a Sigar para obtener los datos de las particiones

Constructor que utiliza la JVM para obtener los datos de las particiones

La función que realiza el trabajo de comunicarse con la plataforma y obtener la información utilizando Sigar y retorna una lista de particiones de la platadorma

Sobre escribiendo la función toString para que devuelva una cadena con información sobre la partición

Compilando y probando el componente
Para realizar una prueba simple solo creare un una clase más que llamare Principal, esta clase lo único que tendrá será el método public static void main(String ar[ ]), función que es detectada por la maquina virtual para iniciar la ejecución de los programas Java, esta función creara un objeto de la clase Información PC e imprimirá esta objeto por la consola del sistema operativo que se esté utilizando en la prueba, en este caso Windows.

Ustedes pueden ir adelantándose un poco e intentar imprimir estos datos en una ventana, para ellos no necesitan la clase Principal, solo crear un objeto de la clase Información PC y utilizar sus métodos getXXX para colocar los datos de la plataforma en una ventana, más o menos esto será lo que hare en la segunda parte de este articulo, pero utilizare otros componentes de SL para crear graficas estadísticas de forma dinámica y mostrar los datos de la plataforma de una manera más agradable, además de esto creare un adiestrador de tareas similar al de Windows, escrito en java utilizado este mismo componente que he escrito en este articulo.
Ahora compilamos
1. Un que este paso es opcional, es buena práctica hacerlo, Antes de compilar se puede verificar que este proyecto este configurado como proyecto principal, en caso de que tengan más de un proyecto abierto en NB, esto lo pueden hacer yendo al panel de proyectos y dando clic derecho sobre el proyecto, damos clic en establecer como proyecto principal.

2. clic en el botón compilar que se encuentra en la barra de herramientas de NB

Veamos la salida desde la consola de NB

He colocado aquí la salida completa para que la puedan apreciar mejor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| debug:
::: Datos del Equipo :::
::: Datos del Sistema Operativo :::
Sistema Operativo: Win32
Arquitectura: x86
Version: 6.0
Nuemero de actualizaciones: Service Pack 2
Fabricante: Microsoft
Descripcion: Microsoft Windows 2008
Año de fabrica: 2008
Uso de CPU : little
Maquina:
Codigo de fabrica: Longhorn Server
Nombre de fabrica: Windows 2008
Fecha encendido: 2009-12-09 09:52:02 AM
::: Datos de la CPU :::
Marca CPU : Intel
Modelo CPU: Core(TM)2 Duo CPU T6570 @ 2.10GHz
Velocidad CPU: 2094MHz
Consumo CPU: 1.6%
Tamaño de la Cache CPU: -1.0
Total Nucleos: 2
Total Socket CPU: 2
Total Socket por Nucleo CPU: 1
Velocidad CPU: 2094
CPU No.1 tiene un consumo de 9.4%
CPU No.2 tiene un consumo de null
Datos de la memoria RAM :::
RAM total: 3032.0 Mb
RAM Ocupada: 1.99604224E9 Mb
RAM Libre: 1.183203328E9 Mb
::: Datos del Sistema de Archivos :::
-- Paticion No.1 --
Nombre Unidad: C:\
Nombre Particion: C:\
Tipo de particion: NTFS
Dispositivo: local
Propiedades: Lectura y Escritura
Espacio Total : 218.0 GB
Espacio Ocupado: 137.0GB
Espacio Libre: 81.0GB
Porcentaje de Uso: 63.0%
-- Paticion No.2 --
Nombre Unidad: D:\
Nombre Particion: D:\
Tipo de particion: NTFS
Dispositivo: local
Propiedades: Lectura y Escritura
Espacio Total : 14.0 GB
Espacio Ocupado: 4.0GB
Espacio Libre: 10.0GB
Porcentaje de Uso: 28.0%
-- Paticion No.3 --
Nombre Unidad: E:\
Nombre Particion: E:\
Tipo de particion: cdrom
Dispositivo: cdrom
Propiedades: Lectura y Escritura
Espacio Total : 0.0 GB
Espacio Ocupado: 0.0GB
Espacio Libre: 0.0GB
Porcentaje de Uso: 0.0%
-- Paticion No.4 --
Nombre Unidad: F:\
Nombre Particion: F:\
Tipo de particion: cdrom
Dispositivo: cdrom
Propiedades: Lectura y Escritura
Espacio Total : 0.0 GB
Espacio Ocupado: 0.0GB
Espacio Libre: 0.0GB
Porcentaje de Uso: 0.0% |
Creando las librerías de nuestro componente
Ahora solo nos queda crear las librerías de nuestros componente para que pueda ser utilizado en cualquier aplicación Java, esta es una labor algo pesada si no se cuenta con un buen IDE como lo es NB, gracias a él esta operación se convierte en un simple clic, NB realiza todo el trabajo pesado y nos entrega las librerías lista.
1. dar clic en el botón Limpiar y Generar Proyecto que se encuentra en la barra de herramientas de NB

2. Ir al panel de Archivos de NB, notar que se ha creado una nueva carpeta llamada dist, este directorio es donde NB se ha colocado las librerías de nuestro componente o proyecto

3. Ahora hay que colocar en este directorio, más específicamente dentro del directorio lib, el resto de librerías nativas que son utilizadas por Sigar para realizar su labor a bajo nivel sobre las plataformas donde se utiliza, para ello nos colocamos en la carpeta librerías que creamos anteriormente, recordar que en ella se encuentran los componentes externos que conforman nuestro proyecto, en este caso la el componente Sigar y todas sus librerías y recursos (archivos), luego entramos a la carpeta sigar y copiamos todos el contenido de esta capeta, a excepción del archivo sigar.jar, el cual ya hemos colocado anteriormente dentro del proyecto.

4. Volvemos al directorio dist y nos colocamos sobre la carpeta lib, aquí pegamos tos archivos que anteriormente hemos copiado, esto con el fin de agregar las librerías que necesita sigar (también conicidad como dependencias) y puedan estad disponibles junto a nuestro componente.

Así quedaría nuestro componente final

Ya debemos ofrecer a todos nuestro proyecto, para ellos lo hacemos en tres presentaciones:
- El proyecto de codigo Fuente (solo el proyecto de NetBeans con los recursos necesarios para su compilación), si no se asusten, saben bien esta es una obligación moral, ética, social y legal, no podemos apropiarnos del esfuerzo y la buena voluntad de otras personas, las cuales han estudiando y trabajado muy duro para ofrecernos sus proyectos como Software Libre, facilitándonos muchas labores a veces algo complejas.
- El proyecto de compilado (solo la carpeta dist con el código binario muy cerca del enlace para descargar el proyecto de código fuente)
- El proyecto de código fuente y el compilado (un empaquetado de toda la capeta de trabajo donde tenemos guardado el proyecto de código fuente y la carpeta dist)
- Lo importante es que el código fuente este siempre disponible con las cuatro libertades que exige la licencia GNU-GPL.
Los animo a ir adelantándose un poco e intentar imprimir estos datos en una ventana, solo tienen que agregar una clase tipo Formulario para la ventana de la aplicación, ir al diseñador de GUI de NB agregar los componentes de deseados en dicha ventana, crear un objeto de la clase Información PC y utilizar sus métodos getXXX para colocar los datos de la plataforma en una ventana, ir a la clase Principal y crear un objeto de la Ventana diseñada, centrarla en la pantalla del PC y hacerla visible, más o menos esto será lo que hare en la segunda parte de este articulo, pero utilizare otros componentes de SL para crear graficas estadísticas de forma dinámica y mostrar los datos de la plataforma de una manera más agradable, además, creare un administrador de tareas similar al de Windows, escrito en Java utilizado este mismo componente que he escrito en este articulo nny nuevas cosas que les enseñare en esta próxima entrega.
Feliz navidad para todos y prospero año nuevo.
Que el nuevo año los inunde de ganas por estudiar, por trabajar, de salir adelante y sobre todos de hacer el bien siempre, pase lo que pase.
Mil bendiciones para todos.
365 Visitas hoy