50
FACULTAD DE CIENCIAS FÍSICO-MATEMÁTICAS SISTEMAS OPERATIVOS Luz Elena Galindo Gamboa Mat. 1383659 Gabriela Elizabeth Torres Melchor Mat. 1395578

SOLARIS 10

Embed Size (px)

Citation preview

Page 1: SOLARIS 10

FACULTAD DE CIENCIAS FÍSICO-MATEMÁTICAS SISTEMAS OPERATIVOS

Luz Elena Galindo Gamboa Mat. 1383659

Gabriela Elizabeth Torres Melchor Mat. 1395578

Page 2: SOLARIS 10

1

Índice

Introducción 2 I. Historia (1982-1990) 2

II Versiones 3

III. Usos comerciales, aplicaciones y ventajas 5

IV. Limitantes de su instalación (requerimientos) 5

V. Descripción de la configuración del SO 6

VI. Aplicaciones y Limitantes 23 VII. Empresas que lo usan 23 VIII. Programa Fuente 24

Nomina0App.java 25 Nomina0View.java 26 Nomina.class 43

IX. Manual de Usuario 47

X. Fuentes 49

Page 3: SOLARIS 10

2

Introducción Solaris es un sistema operativo de tipo Unix desarrollado desde 1992 inicialmente por Sun Microsystems y actualmente por Oracle Corporation como sucesor de SunOS. Es un sistema certificado oficialmente como versión de Unix. Funciona en arquitecturas SPARC y x86 para servidores y estaciones de trabajo. Scott McNeally, presidente de Sun Microsystems, ha decidido apostar por un nuevo modelo de negocio con el lanzamiento de su nuevo Solaris 10, la última versión de su sistema operativo Unix utilizado por grandes centros de datos en bancos, empresas de telecomunicaciones y gobiernos, entre otros, y que calificó como el lanzamiento más importante de la compañía en los últimos diez años. “No queremos hacer dinero por las ventas de licencias del sistema operativo. Nuestros ingresos vendrán por la venta de servicios de soporte y mantenimiento asociados al sistema” explica Pedro Montarelo, director de marketing en Sun Ibérica.

I. Historia (1982-1990) La historia comienza en Silicon Valley en febrero de 1982 fecha en la que nace la empresa Sun Microsystems fundada por el alemán Andy Bechtolsheim y los norteamericanos Vinod Khosla, Bill Joy, y Scott McNealy En el mismo año de su fundación Sun comercializa su primera estación y fue bautizada como Sun-1, dicha máquina estaba gobernada por un microprocesador Motorola a 6 MHz, tenía un 1 mb de RAM y un disco duro de 60 mbyte. El sistema operativo al mando era el SunOS 1 basado en BSD 4.1 (1981) incorporando TCP/IP. SunOs 1 está basado en BSD pero ¿Qué es BSD? La empresa AT&T creadora de las primeras versiones de Unix autorizó a la Universidad de California en Berkeley a realizar cambios en el código fuente para poder adaptarlo a sus necesidades; este conjunto de cambios dio lugar a una nueva variante de Unix llamada BSD (Berkeley Software Distribution). En el año 1984 Sun desarrolla el Sistema de archivos de red NFS (Network File System) que permite a cualquier máquina conectada a la red acceder a discos remotos como si estuvieran en la máquina local. La tecnología NFS fue licenciada gratuitamente para la industria estableciendo un nuevo estándar que incorporan en su nueva versión de sistema SunOs 2 en el año 1985. Un año más tarde con la salida de la versión de SunOS 3 (1986) se introducen utilidades de System V y coincide en el tiempo con el lanzamiento de la estación Sun-3 que todavía continúa basándose en un micro Motorola a 25 MHz y 32 mbyte de RAM. Ya en 1987 se produce un cambio importante en con el lanzamiento la serie Sun-4 que adopta por primera vez la arquitectura SPARC V7 RISC. SunOS 4 (1989) es la primera versión del sistema operativo que soporta la nueva arquitectura Sparc de la serie Sun-4 que continua basada en BSD 4.3 pero con cambios hacia la arquitectura System V. Con la versión SunOs 4.1.1 finaliza una primera etapa del sistema operativo a la que Sun Microsystem denomina Solaris 1 y utilizara este nombre para referirse al sistema SunOs desde 1982 a 1990.

Page 4: SOLARIS 10

3

A continuación podemos ver la evolución Solaris 1 SunOs de 1982 a 1989:

Fecha Versión de SunOs

1982 Febrero SunOS 1.0 basada en BSD

1984 Abril SunOS 1.1 basada en BSD

1985 Enero SunOS 1.2 basada en BSD

1985 Mayo SunOS 2.0 basada en BSD

1986 Febrero SunOS 3.0 Introduce utilidades de System V

1986 Septiembre SunOS 3.2 Introduce utilidades de System V

1988 SunOS 3.5 Introduce utilidades de System V

1989 SunOS 4.0 Soporte microprocesador Sparc/ arquitectura System V STREAMS I/O

1990 Noviembre Solaris 1.0 (SunOS 4.1.1)

Solaris 2 (1990-2006) En Julio de 1991 se produce el lanzamiento de SunOS 5.0 que incorpora importantes cambios:

Pasa a denominarse Solaris 2

Se basa en System V Release 4

Se introduce CDE (Common Desktop Environment) como escritorio estándar aunque conserva OpenWindows.

Soporte de Multiprocesamiento Simétrico (SMP) que posibilita el uso de múltiples CPUs.

II. Versiones Desde 1991 se produce un rápido avance de versiones de Solaris hasta la actual Solaris 10, la siguiente lista es un breve resumen de la evolución de Solaris y las tecnologías que ha incorporado al sistema:

Page 5: SOLARIS 10

4

Versión en desarrollo La base de código subyacente de Solaris ha estado bajo desarrollo continuo desde que el trabajo empezó a finales de los años 1980 en lo que fue con el tiempo liberado como Solaris 2.0. Cada versión como Solaris 10 se basa en una instantánea (snapshot) de este tren de desarrollo, tomada cerca del momento de su liberación, que es después mantenida como un proyecto derivado. Las actualizaciones a ese proyecto son construidas y entregadas varias veces al año hasta que sale la siguiente versión oficial. Solaris 10 Solaris 10 es la versión más reciente del sistema operativo desarrollado por Sun Microsystems. Solaris es en sí software propietario y ahora la parte principal del sistema operativo se ha liberado como un proyecto de software libre denominado OpenSolaris. Esto es novedad para Sun, pues todas las versiones anteriores eran cerradas. Plantearon distribuir su producto bajo la licencia CDDL Common development and distribution license. Sun solaris se ejecuta sobre la arquitectura SPARC en 32 y 64 bits (más conocida como Ultra Sparc) o sobre procesadores x86 (incluidos Intel y AMD). A comienzos del 2005, Sun Microsystems ha sacado a la luz la version 10 (5.10) de su sistema operativo Solaris con nuevas características. Predictive Self-Healing Sun ha insertado en el núcleo del sistema operativo solaris un sistema denominado "Tecnología preventiva de auto recuperación" (PSH, Predictive Self-Healing). Con esta tecnología se reducen los riesgos y aumenta la disponibilidad del equipo, además PSH permite tomar medidas (diagnosticar, aislar, y recuperar las fallas existentes en los dispositivos de E/S o zonas en la memoria) para reducir daños por futuros peligros que puedan causar el caos en los sistemas y como resultado reducir los tiempos de caída, lo cual significa ahorrar tiempo y dinero. Ventajas de las características del PSH del sistema operativo

Disponibilidad de servicio y sistema mejorado a través de un diagnostico y aislamiento de los componentes defectuosos.

Diagnostico automático y reinicio de componentes de hardware y software en milésimas de segundo.

Administración simplificada para administrar servicios. DTrace Denominado también rastreo dinámico, que busca el fondo y llega a la raíz de los problemas de rendimiento en tiempo real. Dicha herramienta trabaja utilizando sondas inteligentes del sistema que pueden acceder a áreas de más lento rendimiento o con cuellos de botella, estas sondas están dispersadas por todo el sistema, que ilumina cada rincón oscuro del sistema Solaris. Y además permite visualizar mejor la actividad del núcleo y de la aplicación. Y a la vez ofreciendo una visión operativa y una ganancia operativa no superada aun por otro sistema operativo. Solaris Containers Permite la creación de muchos ambientes privados de ejecución y una sola instancia de solaris. Cada ambiente tiene su propia identidad, independiente del hardware subyacente aunque se comporta como si se estuviera ejecutando en su propio sistema, permitiendo así que la consolidación sea un proceso sencillo, confiable y seguro. Y dado que los recursos del sistema están virtualizados, los administradores pueden incrementar la utilización del hardware, al tiempo que satisfacen los altos picos de demanda. ZFS, Zettabyte File System Es un nuevo sistema de archivos dinámico del sistema operativo Solaris. Ofrece una administración sencilla que automatiza y consolida complicados conceptos de almacenamiento y por otro lado protege todos los datos con sumas de 64 bits que detectan y corrigen el daño de datos silenciosos. Es el primer sistema de archivos de 128 bits, ofrece una capacidad de 16.000 millones de veces superior a la de los sistemas de 32 o 64 bits, virtualmente es el único sistema de archivos con capacidad de almacenamiento prácticamente ilimitada.

Page 6: SOLARIS 10

5

Process rigths management Solaris 10 ofrece una solución para el modelo de usuario "todo o nada" mediante la integración de mínimos privilegios de seguridad directamente dentro de la base del sistema operativo. Gracias a esta nueva función, Solaris se mantiene como el único sistema operativo UNIX que ofrece este modelo de seguridad completamente integrado dentro de sus componentes del núcleo del sistema operativo, cada aplicación Solaris tiene una lista cerrada de los privilegios especificos impuestos por el núcleo, en lugar de un solo privilegio de raíz todopoderoso. Adicionalmente cada servicio Solaris ha sido convertido para que utilice sólo los privilegios mínimos necesarios, lo cual hace aún más difícil violar el sistema y utilizar los servicios. Los administradores pueden asignar grupos de privilegios por funciones para diferentes tipos de administradores y desarrolladores. Libre de virus por más de 20 años, Solaris incluye la tecnología del Trusted Solaris ampliamente utilizada por el gobierno de los Estados Unidos para garantizar la seguridad de sus sistemas. Sun Update Connection Utilizando Solaris 10 los usuarios disponen de un servicio de actualizaciones que les permitirá estar al día con las innovaciones y el entorno del nuevo ambiente operativo. Compatibilidad garantizada Se asegura las aplicaciones escritas en versiones previas de Solaris pueden correr en Solaris 10 extendiendo la cobertura de compatibilidad hasta la versión de Solaris 2.6 la cual es una garantía sin precedentes en más de 7 años de lanzamiento de sistemas operativos en la industria. Además es capaz de correr la mayoría de las aplicaciones para GNU/Linux de forma nativa.

III. Usos comerciales, aplicaciones y ventajas Solaris ofrece tres ventajas: el tiempo de desarrollo, el costo y la confiabilidad sin obligar a las empresas a sacrificar una por otra. Con Solaris, las compañías pueden comenzar en pequeña escala, con una complejidad limitada, lo cual les ayuda a sacar tecnologías al mercado rápidamente. Estos pasos iniciales pueden realizarse en hardware de bajo costo, el cual las empresas pueden actualizar con el tiempo. Además, todo esto se puede lograr, utilizando el mismo código de aplicación, sin costos ocultos (mantenimiento y capacitación). Solaris siempre ha sido excelente en el procesador y ha sido optimizado para procesadores de una, dos y cuatro vías utilizados en los conjuntos de chips de AMD e Intel. Esto significa que el sistema operativo proporciona una solución completa para los niveles de bases de datos y presentaciones. Solaris de código abierto también ha contribuido con la posibilidad a largo plazo del sistema operativo, ya que ha aumentado la velocidad de desarrollo y ha mejorado la interoperabilidad con tecnologías fundamentales de código abierto.

IV. Limitantes de su instalación (requerimientos) 256 MB RAM 2 GB de espacio disponible en disco. Para procesadores SPARC 250-MHz mínimo Para procesadores x64- o x86 120-MHz mínimo

Page 7: SOLARIS 10

6

V. Descripción de la configuración del SO Configuración de VirtualBox e instalación de Solaris10. La instalación del Sistema Operativo fue realizada sobre una máquina virtual. A continuación se muestran los pasos desde la configuración del VirtualBox (Máquina virtual) hasta la instalación de Solaris10.

Page 8: SOLARIS 10

7

Page 9: SOLARIS 10

8

Page 10: SOLARIS 10

9

Page 11: SOLARIS 10

10

Page 12: SOLARIS 10

11

Page 13: SOLARIS 10

12

Page 14: SOLARIS 10

13

Page 15: SOLARIS 10

14

Page 16: SOLARIS 10

15

Page 17: SOLARIS 10

16

Page 18: SOLARIS 10

17

Page 19: SOLARIS 10

18

Page 20: SOLARIS 10

19

Page 21: SOLARIS 10

20

Page 22: SOLARIS 10

21

Page 23: SOLARIS 10

22

Instalación de Guest Additions. Ya que no se configuró el acceso a internet, para poder instalar nuestro ambiente de desarrollo así como el lenguaje de programación, instalamos los Guest Additions que nos permitirían, entre varias cosas, compartir carpetas entre nuestro sistema operativo guest y host para poder así tener acceso a los archivos necesarios para la instalación de Java y Netbeans. A continuación se muestran los pasos de la instalación de los Guest Additions.

1. Ir a los dispositivos y seleccione la opcion Guest Additions. Automáticamente se montará el disco.

2. Abrir la terminal y ubicarnos en la dirección del cd-room y escribir lo siguiente:

pkgadd -G -d ./VBoxSolarisAdditions.pkg 3. Escoger 1 y confirmar la instalación del paquete.

4. Reiniciar la MV.

5. Ir de nuevo a los dispositivos y seleccionar Shared Folders…

Page 24: SOLARIS 10

23

6. Crear una nueva carpeta compartida seleccionando la ruta de la carpeta en nuestro sistema

operativo host.

7. Crear una carpeta en nuestro sistema operativo guest 8. Abrir la terminal y escribir:

mount -f vboxfs <nombrecarpeta S.O. host> <ruta carpeta compartida S.O. guest>

Ejemplo:

mount -f vboxfs Downloads /Documents/Shared

VI. Aplicaciones y Limitantes (de lenguajes de programación, hardware y software) Estabilidad (Muy Alta) Probablemente se pueda calificar de indestructible, en el sentido de que avisa de posibles problemas de manera muy completa a través de los registros del sistema. Sus código de error permiten la consulta de dónde y porqué se produce el fallo Funcionalidad como Servidor (Muy Alta) No sólo incorpora los servicios de red más importantes, sino que la variedad de subsistemas físico disponibles es elevada y altamente funcional. Es posible incluir una tarjeta de 4 puertos ethernet adicionales, lo que la convierte de repente en un completo cortafuegos, o incluso un encaminador. Aunque este ordenador usa discos IDE, es posible ponerle una tarjeta controladora SCSI para que controle un grupo de discos externos y opere así como servidor de datos. Funcionalidad como estación de trabajo (Muy Alta) Aunque Sun tiene una variada oferta actual de sistemas de, ya no es necesario recurrir a sistemas Sun para tener una estación de trabajo. En efecto, cualquier sistema x86 o x64 con Solaris 10 y Sun Studio 11 (ahora también gratuito) se convierte en un sistema de desarrollo profesional de altas prestaciones. Funcionalidad como puesto de trabajo empresarial (Alta) En un entorno empresarial los requisitos son diferentes que en desarrollo, pero con las herramientas incorporadas, pocas empresas se podrán quejar. Eso sí: si nuestros usuarios son amigos de instalarse utilidades, digamos, menores, probablemente lo tendrán más difícil. Pero esto lo único que hace es facilitar la tarea de mantener limpios nuestros sistemas. Funcionalidad como sistema de experimentación o educación (Alta) Si lo que buscamos es comprender las cualidades de este sistema, cualquier ordenador que ya tengamos y que cumpla los requisitos mínimos nos servirá. Funcionalidad como sistema doméstico (Baja) El soporte de dispositivos en x86 no está lo bastante maduro aún comparado con el excelente soporte para sistemas SPARC. Dado que la mayor parte de la gente no va a cambiar de ordenador sólo para experimentar con un nuevo sistema operativo, mi recomendación en este caso es que, a menos que sus exigencias sean similares a las de un entorno corporativo, esperen a posteriores desarrollos. Lenguajes C/C++, Java, JavaScript, PHP, Ruby, Python, etc.

VII. Empresas que lo usan En estos momentos, las 10 compañías más importantes del mundo en los sectores de Telecomunicaciones, Gobierno y Banca utilizan el sistema operativo Oracle Solaris. Por Ejemplo:

Banco Santander

Banco de America

Sina: un proveedor muy grande en China

Mansion.com: una compañía europea de juegos en línea.

Page 25: SOLARIS 10

24

Viacom: es un conglomerado de medios de comunicación estadounidenses de intereses mundiales por cable y satélite (MTV Networks y BET) y la producción de películas (Paramount Pictures y DreamWorks).

J&J: es una empresa estadounidense fabricante de dispositivos médicos, productos farmacéuticos, productos de aseo personal, perfumes y productos para bebés.

Boeing: empresa aeronáutica y de defensa, es uno de los principales fabricantes de aviones y equipos aeroespaciales del mundo.

Sears: es una cadena de tiendas departamentales

BT: es el operador de telecomunicaciones privatizado del Reino Unido.

United Utilities: es una organización que brinda servicios de agua, drenaje y telecomunicaciones en Inglaterra.

Exel: es una cadena de suministro y operación de la empresa de logística en América del Norte

Gobierno Vasco: es el gobierno autonómico del País Vasco (España).

Entre otros

VIII. Programa Fuente Se divide en 4 partes:

Nomina0App.java

Nomina0View.java

Nomina.class

Page 26: SOLARIS 10

25

Nomina0App.java package nomina0; import org.jdesktop.application.Application; import org.jdesktop.application.SingleFrameApplication; import java.sql.*; /** * Clase Main. */ public class NOMINA0App extends SingleFrameApplication { /** * Crea y muestra la pantalla principal de la aplicacion. */ @Override protected void startup() { show(new NOMINA0View(this)); } /** * Este metodo inicializa la pantalla insertando los recursos. */ @Override protected void configureWindow(java.awt.Window root) { } /** * Obtenemos una instancia de NOMINA0APP */ public static NOMINA0App getApplication() { return Application.getInstance(NOMINA0App.class); } /** * Método Main que inicia la aplicación. */ public static void main(String[] args) { try { Class.forName("org.apache.derby.jdbc.ClientDriver"); Connection conexion = DriverManager.getConnection("jdbc:derby://localhost:1527/Nomina","root","ROOT"); launch(NOMINA0App.class, args); } catch (SQLException exceptionSql) { } catch (ClassNotFoundException noEncontroClase) { } } }

Page 27: SOLARIS 10

26

Nomina0View.java package nomina0; import org.jdesktop.application.Action; import org.jdesktop.application.ResourceMap; import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.FrameView; import org.jdesktop.application.TaskMonitor; import org.jdesktop.application.Task; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.persistence.RollbackException; import javax.swing.Timer; import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.jdesktop.beansbinding.AbstractBindingListener; import org.jdesktop.beansbinding.Binding; import org.jdesktop.beansbinding.PropertyStateEvent; /** * Pantalla principal de la aplicacion. */ public class NOMINA0View extends FrameView { public NOMINA0View(SingleFrameApplication app) { super(app); initComponents(); // Inicializacion de status bar, idle icon and busy animation, etc ResourceMap resourceMap = getResourceMap(); int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout"); messageTimer = new Timer(messageTimeout, new ActionListener() { public void actionPerformed(ActionEvent e) { statusMessageLabel.setText(""); } }); messageTimer.setRepeats(false); int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate"); for (int i = 0; i < busyIcons.length; i++) { busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]"); } busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { public void actionPerformed(ActionEvent e) { busyIconIndex = (busyIconIndex + 1) % busyIcons.length; statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

Page 28: SOLARIS 10

27

} }); idleIcon = resourceMap.getIcon("StatusBar.idleIcon"); statusAnimationLabel.setIcon(idleIcon); progressBar.setVisible(false); // Conecta acciones al status bar a traves del TaskMonitor TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext()); taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { String propertyName = evt.getPropertyName(); if ("started".equals(propertyName)) { if (!busyIconTimer.isRunning()) { statusAnimationLabel.setIcon(busyIcons[0]); busyIconIndex = 0; busyIconTimer.start(); } progressBar.setVisible(true); progressBar.setIndeterminate(true); } else if ("done".equals(propertyName)) { busyIconTimer.stop(); statusAnimationLabel.setIcon(idleIcon); progressBar.setVisible(false); progressBar.setValue(0); } else if ("message".equals(propertyName)) { String text = (String)(evt.getNewValue()); statusMessageLabel.setText((text == null) ? "" : text); messageTimer.restart(); } else if ("progress".equals(propertyName)) { int value = (Integer)(evt.getNewValue()); progressBar.setVisible(true); progressBar.setIndeterminate(false); progressBar.setValue(value); } } }); // Detectar que elemento se selecciono de la tabla masterTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { firePropertyChange("recordSelected", !isRecordSelected(), isRecordSelected()); } }); // Detectar cambios a guarder bindingGroup.addBindingListener(new AbstractBindingListener() { @Override public void targetChanged(Binding binding, PropertyStateEvent event) { // save action observes saveNeeded property setSaveNeeded(true); }

Page 29: SOLARIS 10

28

}); entityManager.getTransaction().begin(); } public boolean isSaveNeeded() { return saveNeeded; } private void setSaveNeeded(boolean saveNeeded) { if (saveNeeded != this.saveNeeded) { this.saveNeeded = saveNeeded; firePropertyChange("saveNeeded", !saveNeeded, saveNeeded); } } public boolean isRecordSelected() { return masterTable.getSelectedRow() != -1; } @Action public void newRecord() { nomina0.Nomina n = new nomina0.Nomina(); entityManager.persist(n); list.add(n); int row = list.size()-1; masterTable.setRowSelectionInterval(row, row); masterTable.scrollRectToVisible(masterTable.getCellRect(row, 0, true)); setSaveNeeded(true); } @Action(enabledProperty = "recordSelected") public void deleteRecord() { int[] selected = masterTable.getSelectedRows(); List<nomina0.Nomina> toRemove = new ArrayList<nomina0.Nomina>(selected.length); for (int idx=0; idx<selected.length; idx++) { nomina0.Nomina n = list.get(masterTable.convertRowIndexToModel(selected[idx])); toRemove.add(n); entityManager.remove(n); } list.removeAll(toRemove); setSaveNeeded(true); } @Action(enabledProperty = "saveNeeded") public Task save() { return new SaveTask(getApplication()); } private class SaveTask extends Task {

Page 30: SOLARIS 10

29

SaveTask(org.jdesktop.application.Application app) { super(app); } @Override protected Void doInBackground() { try { entityManager.getTransaction().commit(); entityManager.getTransaction().begin(); } catch (RollbackException rex) { rex.printStackTrace(); entityManager.getTransaction().begin(); List<nomina0.Nomina> merged = new ArrayList<nomina0.Nomina>(list.size()); for (nomina0.Nomina n : list) { merged.add(entityManager.merge(n)); } list.clear(); list.addAll(merged); } return null; } @Override protected void finished() { setSaveNeeded(false); } } /** * Visualizar el progreso de las interacciones con la base de datos */ @Action public Task refresh() { return new RefreshTask(getApplication()); } private class RefreshTask extends Task { RefreshTask(org.jdesktop.application.Application app) { super(app); } @SuppressWarnings("unchecked") @Override protected Void doInBackground() { try { setProgress(0, 0, 4); setMessage("Rolling back the current changes..."); setProgress(1, 0, 4); entityManager.getTransaction().rollback(); Thread.sleep(1000L); // remove for real app setProgress(2, 0, 4); setMessage("Starting a new transaction..."); entityManager.getTransaction().begin(); Thread.sleep(500L); // remove for real app setProgress(3, 0, 4); setMessage("Fetching new data...");

Page 31: SOLARIS 10

30

java.util.Collection data = query.getResultList(); for (Object entity : data) { entityManager.refresh(entity); } Thread.sleep(1300L); // remove for real app setProgress(4, 0, 4); Thread.sleep(150L); // remove for real app list.clear(); list.addAll(data); } catch(InterruptedException ignore) { } return null; } @Override protected void finished() { setMessage("Done."); setSaveNeeded(false); } } @Action public void showAboutBox() { if (aboutBox == null) { JFrame mainFrame = NOMINA0App.getApplication().getMainFrame(); aboutBox = new NOMINA0AboutBox(mainFrame); aboutBox.setLocationRelativeTo(mainFrame); } NOMINA0App.getApplication().show(aboutBox); } /** Metodo llamado por el constructor para inicializar los componentes de * la pantalla. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); mainPanel = new javax.swing.JPanel(); masterScrollPane = new javax.swing.JScrollPane(); masterTable = new javax.swing.JTable(); nombreLabel = new javax.swing.JLabel(); apellidoLabel = new javax.swing.JLabel(); direccionLabel = new javax.swing.JLabel(); curpLabel = new javax.swing.JLabel(); sueldoLabel = new javax.swing.JLabel(); puestoLabel = new javax.swing.JLabel(); departamentoLabel = new javax.swing.JLabel(); nombreField = new javax.swing.JTextField(); apellidoField = new javax.swing.JTextField(); direccionField = new javax.swing.JTextField(); curpField = new javax.swing.JTextField(); sueldoField = new javax.swing.JTextField();

Page 32: SOLARIS 10

31

puestoField = new javax.swing.JTextField(); departamentoField = new javax.swing.JTextField(); saveButton = new javax.swing.JButton(); refreshButton = new javax.swing.JButton(); newButton = new javax.swing.JButton(); deleteButton = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); menuBar = new javax.swing.JMenuBar(); javax.swing.JMenu fileMenu = new javax.swing.JMenu(); javax.swing.JMenuItem newRecordMenuItem = new javax.swing.JMenuItem(); javax.swing.JMenuItem deleteRecordMenuItem = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JSeparator(); javax.swing.JMenuItem saveMenuItem = new javax.swing.JMenuItem(); javax.swing.JMenuItem refreshMenuItem = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JSeparator(); javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem(); javax.swing.JMenu helpMenu = new javax.swing.JMenu(); javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem(); statusPanel = new javax.swing.JPanel(); javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator(); statusMessageLabel = new javax.swing.JLabel(); statusAnimationLabel = new javax.swing.JLabel(); progressBar = new javax.swing.JProgressBar(); org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(nomina0.NOMINA0App.class).getContext().getResourceMap(NOMINA0View.class); entityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory(resourceMap.getString("entityManager.persistenceUnit")).createEntityManager(); // NOI18N query = java.beans.Beans.isDesignTime() ? null : entityManager.createQuery(resourceMap.getString("query.query")); // NOI18N list = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(query.getResultList()); mainPanel.setName("mainPanel"); // NOI18N masterScrollPane.setName("masterScrollPane"); // NOI18N masterTable.setAutoCreateRowSorter(true); masterTable.setName("masterTable"); // NOI18N org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, list, masterTable); org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${numeronomina}")); columnBinding.setColumnName("Numeronomina"); columnBinding.setColumnClass(Integer.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nombre}")); columnBinding.setColumnName("Nombre");

Page 33: SOLARIS 10

32

columnBinding.setColumnClass(String.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${apellido}")); columnBinding.setColumnName("Apellido"); columnBinding.setColumnClass(String.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${direccion}")); columnBinding.setColumnName("Direccion"); columnBinding.setColumnClass(String.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${curp}")); columnBinding.setColumnName("Curp"); columnBinding.setColumnClass(String.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${sueldo}")); columnBinding.setColumnName("Sueldo"); columnBinding.setColumnClass(Integer.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${puesto}")); columnBinding.setColumnName("Puesto"); columnBinding.setColumnClass(String.class); columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${departamento}")); columnBinding.setColumnName("Departamento"); columnBinding.setColumnClass(String.class); bindingGroup.addBinding(jTableBinding); masterScrollPane.setViewportView(masterTable); nombreLabel.setText(resourceMap.getString("nombreLabel.text")); // NOI18N nombreLabel.setName("nombreLabel"); // NOI18N apellidoLabel.setText(resourceMap.getString("apellidoLabel.text")); // NOI18N apellidoLabel.setName("apellidoLabel"); // NOI18N direccionLabel.setText(resourceMap.getString("direccionLabel.text")); // NOI18N direccionLabel.setName("direccionLabel"); // NOI18N curpLabel.setText(resourceMap.getString("curpLabel.text")); // NOI18N curpLabel.setName("curpLabel"); // NOI18N sueldoLabel.setText(resourceMap.getString("sueldoLabel.text")); // NOI18N sueldoLabel.setName("sueldoLabel"); // NOI18N puestoLabel.setText(resourceMap.getString("puestoLabel.text")); // NOI18N puestoLabel.setName("puestoLabel"); // NOI18N departamentoLabel.setText(resourceMap.getString("departamentoLabel.text")); // NOI18N departamentoLabel.setName("departamentoLabel"); // NOI18N nombreField.setName("nombreField"); // NOI18N org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.nombre}"), nombreField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null);

Page 34: SOLARIS 10

33

bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), nombreField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); nombreField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { nombreFieldKeyTyped(evt); } }); apellidoField.setName("apellidoField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.apellido}"), apellidoField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), apellidoField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); apellidoField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { apellidoFieldKeyTyped(evt); } }); direccionField.setName("direccionField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.direccion}"), direccionField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), direccionField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); curpField.setName("curpField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_

Page 35: SOLARIS 10

34

WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.curp}"), curpField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), curpField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); curpField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { curpFieldKeyTyped(evt); } }); sueldoField.setName("sueldoField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.sueldo}"), sueldoField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), sueldoField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); sueldoField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { sueldoFieldKeyTyped(evt); } }); puestoField.setName("puestoField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.puesto}"), puestoField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), puestoField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); puestoField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) {

Page 36: SOLARIS 10

35

puestoFieldKeyTyped(evt); } }); departamentoField.setName("departamentoField"); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.departamento}"), departamentoField, org.jdesktop.beansbinding.BeanProperty.create("text")); binding.setSourceUnreadableValue(null); bindingGroup.addBinding(binding); binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ, masterTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement != null}"), departamentoField, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); departamentoField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { departamentoFieldKeyTyped(evt); } }); javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(nomina0.NOMINA0App.class).getContext().getActionMap(NOMINA0View.class, this); saveButton.setAction(actionMap.get("save")); // NOI18N saveButton.setName("saveButton"); // NOI18N refreshButton.setAction(actionMap.get("refresh")); // NOI18N refreshButton.setName("refreshButton"); // NOI18N newButton.setAction(actionMap.get("newRecord")); // NOI18N newButton.setName("newButton"); // NOI18N deleteButton.setAction(actionMap.get("deleteRecord")); // NOI18N deleteButton.setName("deleteButton"); // NOI18N jScrollPane1.setName("jScrollPane1"); // NOI18N jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {"SISTEMAS", null}, {"RECURSOS HUMANOS", null}, {"PRODUCCION", null}, {"VENTAS", null}, {"ADMINISTRACION", null}, {"TOTAL", null} }, new String [] { "DEPARTAMENTO", "COSTO"

Page 37: SOLARIS 10

36

} ) { Class[] types = new Class [] { java.lang.String.class, java.lang.Double.class }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } }); jTable1.setName("jTable1"); // NOI18N jScrollPane1.setViewportView(jTable1); jTable1.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("jTable1.columnModel.title0")); // NOI18N jTable1.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("jTable1.columnModel.title1")); // NOI18N jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N jButton1.setName("jButton1"); // NOI18N jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton1MouseClicked(evt); } }); javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); mainPanel.setLayout(mainPanelLayout); mainPanelLayout.setHorizontalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout.createSequentialGroup() .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() .addComponent(newButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(deleteButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(refreshButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(saveButton)) .addGroup(mainPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(nombreLabel) .addComponent(apellidoLabel) .addComponent(direccionLabel) .addComponent(curpLabel) .addComponent(sueldoLabel) .addComponent(puestoLabel) .addComponent(departamentoLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(nombreField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE)

Page 38: SOLARIS 10

37

.addComponent(apellidoField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) .addComponent(direccionField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) .addComponent(curpField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) .addComponent(sueldoField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) .addComponent(puestoField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE) .addComponent(departamentoField, javax.swing.GroupLayout.DEFAULT_SIZE, 426, Short.MAX_VALUE))) .addGroup(mainPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(masterScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 522, Short.MAX_VALUE))) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(mainPanelLayout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton1) .addGap(20, 20, 20)))) ); mainPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteButton, newButton, refreshButton, saveButton}); mainPanelLayout.setVerticalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE) .addComponent(masterScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE)) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(nombreLabel) .addComponent(nombreField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(apellidoLabel) .addComponent(apellidoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(direccionLabel) .addComponent(direccionField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

Page 39: SOLARIS 10

38

.addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(curpLabel) .addComponent(curpField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(sueldoLabel) .addComponent(sueldoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(puestoLabel) .addComponent(puestoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(departamentoLabel) .addComponent(departamentoField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(saveButton) .addComponent(refreshButton) .addComponent(deleteButton) .addComponent(newButton))) .addGroup(mainPanelLayout.createSequentialGroup() .addGap(14, 14, 14) .addComponent(jButton1))) .addContainerGap()) ); menuBar.setName("menuBar"); // NOI18N fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N fileMenu.setName("fileMenu"); // NOI18N newRecordMenuItem.setAction(actionMap.get("newRecord")); // NOI18N newRecordMenuItem.setName("newRecordMenuItem"); // NOI18N fileMenu.add(newRecordMenuItem); deleteRecordMenuItem.setAction(actionMap.get("deleteRecord")); // NOI18N deleteRecordMenuItem.setName("deleteRecordMenuItem"); // NOI18N fileMenu.add(deleteRecordMenuItem); jSeparator1.setName("jSeparator1"); // NOI18N fileMenu.add(jSeparator1); saveMenuItem.setAction(actionMap.get("save")); // NOI18N saveMenuItem.setName("saveMenuItem"); // NOI18N fileMenu.add(saveMenuItem); refreshMenuItem.setAction(actionMap.get("refresh")); // NOI18N

Page 40: SOLARIS 10

39

refreshMenuItem.setName("refreshMenuItem"); // NOI18N fileMenu.add(refreshMenuItem); jSeparator2.setName("jSeparator2"); // NOI18N fileMenu.add(jSeparator2); exitMenuItem.setAction(actionMap.get("quit")); // NOI18N exitMenuItem.setName("exitMenuItem"); // NOI18N fileMenu.add(exitMenuItem); menuBar.add(fileMenu); helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N helpMenu.setName("helpMenu"); // NOI18N aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N aboutMenuItem.setName("aboutMenuItem"); // NOI18N helpMenu.add(aboutMenuItem); menuBar.add(helpMenu); statusPanel.setName("statusPanel"); // NOI18N statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N statusMessageLabel.setName("statusMessageLabel"); // NOI18N statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N progressBar.setName("progressBar"); // NOI18N javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel); statusPanel.setLayout(statusPanelLayout); statusPanelLayout.setHorizontalGroup( statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 777, Short.MAX_VALUE) .addGroup(statusPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(statusMessageLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 593, Short.MAX_VALUE) .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(statusAnimationLabel) .addContainerGap()) ); statusPanelLayout.setVerticalGroup( statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(statusPanelLayout.createSequentialGroup() .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)

Page 41: SOLARIS 10

40

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(statusMessageLabel) .addComponent(statusAnimationLabel) .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(3, 3, 3)) ); setComponent(mainPanel); setMenuBar(menuBar); setStatusBar(statusPanel); bindingGroup.bind(); }// </editor-fold> private void nombreFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here: // VALIDAR QUE EL USUARIO INGRESE UNICAMENTE LETRAS O ESPACIO if (Character.isLetter(evt.getKeyChar())== false) if (Character.isSpaceChar(evt.getKeyChar()) == false) evt.consume(); } private void apellidoFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here: // VALIDAR QUE EL USUARIO INGRESE UNICAMENTE LETRAS O ESPACIO if (Character.isLetter(evt.getKeyChar())== false) if (Character.isSpaceChar(evt.getKeyChar()) == false) evt.consume(); } private void curpFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here: // VALIDAR QUE INGRESE UNICAMENTE 18 CARACTERES DIGITOS O LETRAS if (Character.isLetterOrDigit(evt.getKeyChar())==false) evt.consume(); if (curpField.getText().length()>17) evt.consume(); } private void puestoFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here: // VALIDAR QUE EL USUARIO INGRESE UNICAMENTE LETRAS O ESPACIO if (Character.isLetter(evt.getKeyChar())== false) if (Character.isSpaceChar(evt.getKeyChar()) == false) evt.consume(); } private void departamentoFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here:

Page 42: SOLARIS 10

41

// VALIDAR QUE EL USUARIO INGRESE UNICAMENTE LETRAS O ESPACIO if (Character.isLetter(evt.getKeyChar())== false) if (Character.isSpaceChar(evt.getKeyChar()) == false) evt.consume(); } private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: double suma = 0; for(int c = 0; c < jTable1.getRowCount();c++) { for(int i = 0; i < masterTable.getRowCount();i++) { if(masterTable.getValueAt(i, 7).equals(jTable1.getValueAt(c,0))) suma = suma + Double.valueOf(masterTable.getValueAt(i,5).toString()).doubleValue(); } jTable1.setValueAt(suma,c,1); suma = 0; } suma=0; for(int c=0;c<jTable1.getRowCount();c++) suma = suma + Double.valueOf(jTable1.getValueAt(c,1).toString()).doubleValue(); jTable1.setValueAt(suma,5,1); } private void sueldoFieldKeyTyped(java.awt.event.KeyEvent evt) { // TODO add your handling code here: // VALIDAR QUE EL USUARIO INGRESE UNICAMENTE LETRAS O ESPACIO if (Character.isDigit(evt.getKeyChar())== false) if (Character.isSpaceChar(evt.getKeyChar()) == false) evt.consume(); } // Variables declaration - do not modify private javax.swing.JTextField apellidoField; private javax.swing.JLabel apellidoLabel; private javax.swing.JTextField curpField; private javax.swing.JLabel curpLabel; private javax.swing.JButton deleteButton; private javax.swing.JTextField departamentoField; private javax.swing.JLabel departamentoLabel; private javax.swing.JTextField direccionField; private javax.swing.JLabel direccionLabel; private javax.persistence.EntityManager entityManager; private javax.swing.JButton jButton1; private javax.swing.JScrollPane jScrollPane1;

Page 43: SOLARIS 10

42

private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JTable jTable1; private java.util.List<nomina0.Nomina> list; private javax.swing.JPanel mainPanel; private javax.swing.JScrollPane masterScrollPane; private javax.swing.JTable masterTable; private javax.swing.JMenuBar menuBar; private javax.swing.JButton newButton; private javax.swing.JTextField nombreField; private javax.swing.JLabel nombreLabel; private javax.swing.JProgressBar progressBar; private javax.swing.JTextField puestoField; private javax.swing.JLabel puestoLabel; private javax.persistence.Query query; private javax.swing.JButton refreshButton; private javax.swing.JButton saveButton; private javax.swing.JLabel statusAnimationLabel; private javax.swing.JLabel statusMessageLabel; private javax.swing.JPanel statusPanel; private javax.swing.JTextField sueldoField; private javax.swing.JLabel sueldoLabel; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // End of variables declaration private final Timer messageTimer; private final Timer busyIconTimer; private final Icon idleIcon; private final Icon[] busyIcons = new Icon[15]; private int busyIconIndex = 0; private JDialog aboutBox; private boolean saveNeeded; }

Page 44: SOLARIS 10

43

Nomina.class package nomina0; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Transient; @Entity @Table(name = "NOMINA", catalog = "", schema = "ROOT") @NamedQueries({ @NamedQuery(name = "Nomina.findAll", query = "SELECT n FROM Nomina n"), @NamedQuery(name = "Nomina.findByNumeronomina", query = "SELECT n FROM Nomina n WHERE n.numeronomina = :numeronomina"), @NamedQuery(name = "Nomina.findByNombre", query = "SELECT n FROM Nomina n WHERE n.nombre = :nombre"), @NamedQuery(name = "Nomina.findByApellido", query = "SELECT n FROM Nomina n WHERE n.apellido = :apellido"), @NamedQuery(name = "Nomina.findByDireccion", query = "SELECT n FROM Nomina n WHERE n.direccion = :direccion"), @NamedQuery(name = "Nomina.findByCurp", query = "SELECT n FROM Nomina n WHERE n.curp = :curp"), @NamedQuery(name = "Nomina.findBySueldo", query = "SELECT n FROM Nomina n WHERE n.sueldo = :sueldo"), @NamedQuery(name = "Nomina.findByPuesto", query = "SELECT n FROM Nomina n WHERE n.puesto = :puesto"), @NamedQuery(name = "Nomina.findByDepartamento", query = "SELECT n FROM Nomina n WHERE n.departamento = :departamento")}) public class Nomina implements Serializable { @Transient private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "NUMERONOMINA") private Integer numeronomina; @Column(name = "NOMBRE") private String nombre; @Column(name = "APELLIDO") private String apellido; @Column(name = "DIRECCION") private String direccion; @Column(name = "CURP") private String curp; @Column(name = "SUELDO") private Integer sueldo;

Page 45: SOLARIS 10

44

@Column(name = "PUESTO") private String puesto; @Column(name = "DEPARTAMENTO") private String departamento; public Nomina() { } public Nomina(Integer numeronomina) { this.numeronomina = numeronomina; } public Integer getNumeronomina() { return numeronomina; } public void setNumeronomina(Integer numeronomina) { Integer oldNumeronomina = this.numeronomina; this.numeronomina = numeronomina; changeSupport.firePropertyChange("numeronomina", oldNumeronomina, numeronomina); } public String getNombre() { return nombre; } public void setNombre(String nombre) { String oldNombre = this.nombre; this.nombre = nombre; changeSupport.firePropertyChange("nombre", oldNombre, nombre); } public String getApellido() { return apellido; } public void setApellido(String apellido) { String oldApellido = this.apellido; this.apellido = apellido; changeSupport.firePropertyChange("apellido", oldApellido, apellido); } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { String oldDireccion = this.direccion; this.direccion = direccion; changeSupport.firePropertyChange("direccion", oldDireccion, direccion); }

Page 46: SOLARIS 10

45

public String getCurp() { return curp; } public void setCurp(String curp) { String oldCurp = this.curp; this.curp = curp; changeSupport.firePropertyChange("curp", oldCurp, curp); } public Integer getSueldo() { return sueldo; } public void setSueldo(Integer sueldo) { Integer oldSueldo = this.sueldo; this.sueldo = sueldo; changeSupport.firePropertyChange("sueldo", oldSueldo, sueldo); } public String getPuesto() { return puesto; } public void setPuesto(String puesto) { String oldPuesto = this.puesto; this.puesto = puesto; changeSupport.firePropertyChange("puesto", oldPuesto, puesto); } public String getDepartamento() { return departamento; } public void setDepartamento(String departamento) { String oldDepartamento = this.departamento; this.departamento = departamento; changeSupport.firePropertyChange("departamento", oldDepartamento, departamento); } @Override public int hashCode() { int hash = 0; hash += (numeronomina != null ? numeronomina.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Nomina)) { return false;

Page 47: SOLARIS 10

46

} Nomina other = (Nomina) object; if ((this.numeronomina == null && other.numeronomina != null) || (this.numeronomina != null && !this.numeronomina.equals(other.numeronomina))) { return false; } return true; } @Override public String toString() { return "nomina0.Nomina[numeronomina=" + numeronomina + "]"; } public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } }

Page 48: SOLARIS 10

47

IX. Manual de Usuario Alta de Usuarios Para dar de alta un nuevo usuario dar click en el botón New.

Al hacer esto, se habilitarán los campos de texto y podrá escribir en ellos. Cuando haya terminado de ingresar todos los datos dar click en el botón Save. Finalmente presione Refresh para actualizar los datos de la tabla.

Ordenar Usuarios Para ordenar los datos de la lista únicamente es necesario dar click en el recuadro superior del campo por el que desea que se ordenen los datos.

Page 49: SOLARIS 10

48

Baja de Usuarios Para dar de baja a un usuario debe seleccionarlo previamente de la lista. Posteriormente de click en el botón Delete. Finalmente presione Refresh para actualizar los datos de la tabla.

Modificación de usuarios Para modificar los datos de un usuario debe seleccionarlo previamente de la lista. Al hacer esto, se habilitarán los campos de texto y podrá escribir en ellos. Cuando haya terminado de modificar los datos dar click en el botón Save. Finalmente presione Refresh para actualizar los datos de la tabla.

Costos Para visualizar los costos por departamento y los costos totales de click en el botón Costos.

Page 50: SOLARIS 10

49

X. Fuentes VirtualBox Descarga: http://www.virtualbox.org/wiki/Downloads Manual: http://dlc.sun.com.edgesuite.net/virtualbox/3.2.8/UserManual.pdf Solaris10 Descarga: http://www.oracle.com/technetwork/server-storage/solaris/downloads/index.html Manual: http://www.scribd.com/doc/21387065/Manual-Instalacion-Solaris-10 JDK 6 Update 21 with NetBeans 6.9.1 http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html Otras fuentes: http://profesores.fi-b.unam.mx/sun/Downloads/Solaris/DavidGalan/1.historia.pdf http://es.wikipedia.org/wiki/Solaris_%28sistema_operativo%29 http://www.content4reprint.com/view/spanish-83913.htm http://www.eqsoft.net/blog/index.php?/archives/1527-Las-10-empresas-mas-grandes-del-mundo-usan-Software-Libre.html http://emeapressoffice.oracle.com/Press-Releases/ORACLE-INCORPORA-MEJORAS-EN-SOLARIS-10-156a.aspx http://www.sun.com/emrkt/innercircle/newsletter/latam/0307latam_feature.html http://nixpro.net/diario/articulos/solaris-10-primeras-impresiones http://www.youblisher.com/p/37172-solaris/