Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java
Contenidos
Clases, objetos e interfaces a Java Threads en Java Interfaces grficas en Java (GUI)
Realizacin de interfaces grficas con Jbuilder 2
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Sockets en Java Java-RMI Java y CORBA Applets Servlets Seguridad en Java Gestores de seguridad URLs JDBC
Joan Vila
Java
Qu es Java?
Lenguaje orientado a objetos. Amplio soporte para programacin en red, distribuida y web Se ejecuta sobre una mquina virtual que puede correr sobre:
El sistema operativo: el bytecode se carga de un fichero. Un navegador web: el bytecode se carga de la red (sistema de ficheros remoto) utilizando HTTP (Applets).
Java
Network
javac
File system
f.class
f.java
Program loader
HW
Java virtual machine
Joan Vila
Joan Vila
Java
Sistema ficheros
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Joan Vila
HW + SO
Procesamiento distribuido en Java 5
Introduccin a Java
Indice
Clases, objetos e interfaces
Herencia Declaracin de clases variables y mtodos Especificadores de acceso
Clase
Tipo abstracto de datos Puede manipularse a travs de una serie de mtodos bien definidos Mtodos
Joan Vila
Herencia
package Geometria; Paquete = Conjunto de clases
class Rectangulo {
int x, y, w, h; ... Rectangulo(int x, int y, int ancho, int alto){ ... } int area(){ ... } ... }
Cuadrado(int x, int y, int lado, int color){ super(x,y,lado,lado,color); } int area(){ return (super.w*super.w); } Method overriding
Joan Vila
10
Herencia
Clase Geometria.Rectangulo
Interfaces
Interfaz: coleccin de definiciones de mtodos sin implementacin y valores constantes
Multiple inheritance Multiple inheritance not supported not supported interface Collection { interface Collection { int MAXIMUM = 500; int MAXIMUM = 500; void add(Object obj); void add(Object obj); void delete(Object obj); void delete(Object obj); Object find(Object obj); Object find(Object obj); int currentCount(); int currentCount(); } } class FIFOQueue implements Collection { class FIFOQueue implements Collection { ...... void add(Object obj) { void add(Object obj) { ...... } } void delete(Object obj) { void delete(Object obj) { ...... } } Object find(Object obj) { Object find(Object obj) { ...... } } int currentCount() { int currentCount() { ...... } } } }
Joan Vila
Clase Geometria.Cuadrado = subclase de Geometria.RectanguloColor RectanguloColor RC = new RectanguloColor(0,0,2,3,35); Cuadrado C = new Cuadrado(4,3,5,0); Herencia de mtodos y variables RC.color(); RC.area(); RC.color = 5; RC.x = 7 C.imprimir(); C.area(); C.color(); C.h = 7;
Procesamiento distribuido en Java
Joan Vila
11
12
Interfaces
Utilizacin de interfaces
Para definir un protocolo de comportamiento que puede ser implementado por cualquier clase en cualquier lugar de la jerarqua. Permiten: Obligar a determinadas clases a implementar un cierto protocolo o conjunto de mtodos. Conocer el interfaz de una clase sin conocer los detalles de su implementacin. Capturar similaridades entre clases sin forzar la relacin jerrquica. Dar solucin a problemas de herencia mltiple, p.e.: class Reloj extends Applet implements Runnable
Interfaces
Utilizacin de interfaces
En general, no es obligatorio declarar el interfaz de un objeto En objetos distribuidos es obligatorio declarar su interfaz
package RMI.Echo; package RMI.Echo; public interface EchoIntRMI extends java.rmi.Remote { public interface EchoIntRMI extends java.rmi.Remote { String echo(String aString) throws java.rmi.RemoteException; String echo(String aString) throws java.rmi.RemoteException; } }
Joan Vila
13
Joan Vila
14
Declaracin de clases
Declaracin de clases [modifiers] class ClassName [extends [implements InterfacesNames] { ... }
Declaracin de variables
Declaracin de variables [accessSpecifier] [static] [final] [transient] [volatile]. type variableName.
static: la variable es variable de clase. Lo contrario es variable de instancia. final: la variable es una constante. volatile: variable que puede ser modificada asncronamente por threads concurrentes.
SuperClassName]
public: Puede ser utilizada por objetos fuera de su paquete. Por defecto, slo puede utilizarse en el paquete. abstract: Puede contener mtodos abstractos (sin implementacin). No se instancian, slo se subclasean. final: No pueden derivarse subclases.
Joan Vila
15
Joan Vila
16
Declaracin de mtodos
Declaracin de mtodos [accessSpecifier] [static] [abstract] [final] [native] [synchronized] returnType methodName ([paramList]) [throws exceptionList] {... }
static: el mtodo es mtodo de clase. Lo contrario es mtodo de instancia. abstract: no tienen implementacin; slo definen una interfaz. final: no puede ser superpuesto (overridden ) por un mtod de una subclase. native: la implementacin del mtodo est hecha en otro lenguaje de programacin, p.e. C. synchronized: ejecucin en exclusin mtua.
Procesamiento distribuido en Java
Joan Vila
Especificadores de acceso
package Arco; import java.io.*; Variable de instancia accesible a subclases Variable de clase privada class Rectangulo { protected int x, y, w, h; private static String nombreClase ="Rectangulo"; public Rectangulo(int x, int y, int ancho, int alto){ this.x=x; this.y=y; w=ancho; h=alto; } public int area(){ return (w*h); } public void mover(int arriba, int derecha){ x+=arriba; y+=derecha; } public String imprimir() { return "({" + Integer.toString(x) + "," + Integer.toString(y) + "},{" + Integer.toString(x+w) + "," + Integer.toString(y+h) + "})"; } public static String nombre(){ return nombreClase; }
Joan Vila
17
18
Especificadores de acceso
Especificador subclase paquete mundo clase *
El mtodo main
El mtodo main
El mtodo main de la clase cuyo nombre coincide con el nombre del fichero es el que inicia la ejecucin. Es static Recibe argumentos de tipo String en args[]
19
Joan Vila
20
El mtodo main
package Arco; import java.io.*;
Manejo de excepciones
byte[] buffer = new byte[80]; try { System.out.println("Teclee una cadena"); j = System.in.read(buffer); System.out.write(buffer,0,j); System.out.println("Teclee un entero"); j = dis.readInt(); dos.writeInt(j); dos.flush(); } catch (IOException e) { Lista excepciones capturadas Manejador excepcin
public class Ejemplo1{ static Rectangulo R = new Rectangulo(0,0,2,3); static Cuadrado C; public static void main(String args[]) { if (args.length < 4){ System.out.println("Uso: Ejemplo1 x y l c"); System.exit(1); } int[] i = new int[4]; int j = 0; for(j=0; j < i.length; j++) i[j] = Integer.parseInt(args[j]); C = new Cuadrado(i[0],i[1],i[2],i[3]);
Procesamiento distribuido en Java
Integer.parseInt(args[j]);
clase mtodo de clase
Operaciones de E/S
Ambito excepcin
Manejo de arrays }
Joan Vila
21
Joan Vila
22
La E/S: streams
package Arco; import java.io.*;
La E/S: streams
Lectura/escritura de bytes int count; int count; byte[] buffer = new byte[256]; Lectura/escritura de cadenas byte[] buffer = new byte[256]; is = System.in; //de clase InputStream (UNICODE) con buffer implcito is = System.in; //de clase InputStream os = System.out; //de clase OutputStream os = System.out; //de clase OutputStream os.write(buffer,0,count); os.write(buffer,0,count); BufferedReader br = BufferedReader br = count=is.read(buffer); count=is.read(buffer); new BufferedReader( new BufferedReader( os.close(); is.close(); os.close(); is.close(); new InputStreamReader(is)); new InputStreamReader(is)); PrintWriter pw = new PrintWriter(os); PrintWriter pw = new PrintWriter(os); String inputLine; Lectura/escritura de datos String inputLine; dos = new DataOutputStream(os); dos = new DataOutputStream(os); dis = new DataInputStream(is); dis = new DataInputStream(is); count=dis.readInt(); count=dis.readInt(); dos.close(); dis.close(); dos.close(); dis.close();
Joan Vila
public class Ejemplo1{ static Rectangulo R = new Rectangulo(0,0,2,3); static Cuadrado C; public static void main(String args[]) { ... C = new Cuadrado(i[0],i[1],i[2],i[3]);
System.out.println(...)
clase variable mtodo System.out.println(R.nombre()); de clase System.out.println(Rectangulo.nombre()); System.out: es de clase OutputStream System.out.println(R.imprimir()); System.in: es de clase InputStream System.out.println(C.imprimir()); } }
Procesamiento distribuido en Java 23
inputLine = br.readLine(); inputLine = br.readLine(); pw.println(inputLine); pw.println(inputLine); pw.flush(); pw.flush(); os.close(); os.close(); is.close(); is.close();
Joan Vila
24
Threads en Java
Indice
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia Procesamiento distribuido en Java
Joan Vila
26
Threads en Java
La clase Thread
La cualidad de hilo de ejecucin en Java se obtiene por herencia de la clase Thread Creacin: realizacin de subclases de Thread class Reloj extends Thread Cdigo a ejecutar: sobrecargar el mtodo run public void run() { ... } Otros mtodos que se pueden sobrecargar public void start() { ... } Se ejecuta al arrancar el thread.
Threads en Java
import java.text.*; import java.text.*; import java.util.*; import java.util.*;
class Reloj extends Thread {{ accomplished by class Reloj extends Thread accomplished by int cuenta=0; inheritance from the int cuenta=0; inheritance from the ... Thread class ... Thread class public void run() {{ public void run() for (int i i= 1; i i<= cuenta; i++) {{ for (int = 1; <= cuenta; i++) try {{ try sleep(1000); sleep(1000); }}catch (InterruptedException e) {} catch (InterruptedException e) {} System.out.println(getName() + ""::""+ (cuenta --i)); System.out.println(getName() + + (cuenta i)); }} System.out.println(getName() + "Riiinnnng!!!"); System.out.println(getName() + "Riiinnnng!!!"); }} }}
Procesamiento distribuido en Java
Joan Vila
Joan Vila
27
28
Threads en Java
Instancias e iniciacin de Threads
public class Relojes { public class Relojes { public static void main(String[] args){ public static void main(String[] args){ new Reloj("MotorOn",10).start(); new Reloj("MotorOn",10).start(); new Reloj("MotorOff",15).start(); new Reloj("MotorOff",15).start(); } } } }
Threads en Java
El interfaz Runnable
Se utiliza cuando no se puede heredar de la clase Thread por problemas de herencia mltiple. Solucin:
Implementar Runnable (obliga a sobrecargar run, ...) Crear una instancia de Thread y pasarle como agumento el objeto class X extends UnicastRemoteObject implements Runnable { Thread reloj= new Thread(this, "Reloj"); public void run(){ while(this !=null){ f(); try{ Thread.sleep(5); }catch(InterruptedException e){} } } }
Joan Vila
29
Joan Vila
30
Mtodos sincronizados
Cuando el control entra en un mtodo sincronizado (synchronized), el thread que lo invoc adquiere el monitor e impide que otros threads puedan ejecutar mtodos sincronizados del monitor.
Joan Vila
31
Joan Vila
32
} }
} }
33
34
class ProducerConsumerTest { class ProducerConsumerTest { public static void main(String[] args) { public static void main(String[] args) { CubbyHole cc= new CubbyHole(); CubbyHole = new CubbyHole(); Producer p1 = new Producer(c, 1); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1); Consumer c1 = new Consumer(c, 1); p1.start(); p1.start(); c1.start(); c1.start();
} }
} }
Joan Vila
36
Java - GUI
Indice
Componentes del AWT
Componentes bsicos Containers Layout managers
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Joan Vila
38
Java - GUI
Componetes del AWT (Abstract Window Toolkit) Componentes bsicos
Button Checkbox Choice List Label MenuItem TextField TextArea Canvas
Containers
Frame Dialog FileDialog
Layout Managers
Border Card Flow Grid GridBagLayout
Joan Vila
39
Joan Vila
40
Uso de Choice
choice = new Choice(); choice.addItem("ichi"); choice.addItem("ni"); choice.addItem("san"); choice.addItem("yon"); int i = choice.getSelectedIndex() String S = choice.getSelectedItem());
Procesamiento distribuido en Java
Joan Vila
41
Joan Vila
42
43
Joan Vila
44
Un ejemplo
45
Joan Vila
46
Utilizacin de Frames
public class UnFrame extends Frame implements WindowListener { // Declarar layout GridBagLayout gridBagLayout1 = new GridBagLayout(); // Declarar componentes Button botonEnviar = new Button(); Label label1 = new Label(); TextField textoHost = new TextField(); public UnFrame() { // Inicializar componentes botonEnviar.setLabel("SEND"); ... // Establecer un Layout this.setLayout(gridBagLayout1); // Aadir componentes al Frame this.add(botonEnviar, ...); this.add(label1, ...); this.add(textoHost, ...); }
Procesamiento distribuido en Java
Joan Vila
Utilizacin de Frames
public class UnFrame extends Frame implements WindowListener { ... public static void main(String[] args) { // Declarar un objeto de tipo Frame y visualizarlo UnFrame UnFrame1 = new UnFrame(); UnFrame1.addWindowListener(echoFrame1); UnFrame1.show(); } // Define window listeners. public void windowClosing( WindowEvent event ) {dispose(); System.exit(1);} public void windowOpened( WindowEvent event ) {} ...
}
47 Procesamiento distribuido en Java
Joan Vila
48
Manejo de eventos
Eventos
La pulsacin de un botn, retorno de carro en un campo de texto, etc..., produce eventos asncronos a los que se les puede declarar funciones para manejarlos. Estas funciones estn definidas en una serie de interfaces y clases del paquete java.awt.event
Manejo de eventos
Eventos
Un componente, como p.e. un Button puede generar dos tipos de eventos Bajo nivel: eventos no especficos del componente, como p.e., MouseEvent al ser visitado, abandonado o presionado por el ratn, etc... Alto nivel: evento con acciones especficas del componente como p.e., ActionEvent al ser presionado, que evita procesar eventos poco relevantes (semnticamente) como movimientos o clicks del ratn
El evento ActionEvent se propaga a cada objeto que implemente la interfaz ActionListener y que se haya registrado para recibir dicho evento, utilizando para ello el mtodo AButton.addActionListener(ActionListener l) del correspondiente componente. La interfaz ActionListener obliga a implementar un actionPerformed(ActionEvent e) que sirve para manejar el evento. mtodo
Joan Vila
49
Joan Vila
50
Manejo de eventos
Eventos: un ejemplo.
La pulsacin de un botn.
Button boton1 = new Button(); boton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { boton_manejador(e); } });
Joan Vila
51
Joan Vila
52
Cmo dibujar?
La manera ms fcil de dibujar es poner cdigo (sobrecaragar) el mtodo paint():
public void paint(Graphics g) {{ public void paint(Graphics g) Dimension d = size(); Dimension d = size(); g.drawRect(0,0, d.width --1, d.height --1); g.drawRect(0,0, d.width 1, d.height 1); }}
Procesamiento distribuido en Java
Joan Vila
53
54
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia 55
Codigo adicional
Joan Vila
57
Joan Vila
58
59
Joan Vila
60
Joan Vila
61
Joan Vila
62
63
Joan Vila
64
Sockets en Java
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Applets: Aplicaciones con interfaz grfica para visor de www. JDBC: API para tener acceso a bases de datos remotas y ejecutar desde Java sentencias SQL. Joe: Extensin de Java para proporcionar acceso desde Java a sistemas heterogneos de tipo CORBA: Procesamiento distribuido en Java
Joan Vila
66
Sockets en Java
Indice
Comunicacin orientada a conexin: Sockets TCP Datagramas: Sockets UDP Multicast
Sockets en Java
Sockets en Java
El API de Java a los sockets TCP/IP se fundamenta en las siguientes clases: Comunicacin con conexin: sockets TCP
clase Socket : la utilizan los clientes clase ServerSocket : la utilizan los servidores
Joan Vila
67
Joan Vila
68
Sockets en Java
Protocolos con conexin versus sin conexin
Sockets TCP
Sockets TCP: el cliente Sockets TCP: el cliente
Sin conexin
Origen
Destino
La clase socket La clase socket Socket s = new Socket(server, port); Socket s = new Socket(server, port); OutputStream os = s.getOutputStream(); OutputStream os = s.getOutputStream(); InputStream is = s.getInputStream(); InputStream is = s.getInputStream(); s.close(); s.close();
Con Conexin
Origen
Destino
Joan Vila
69
Joan Vila
70
Sockets TCP
Ejemplo: un cliente de eco TCP (i)
import java.io.*; import java.net.*; public class Echo { public static void main(String[] args) { if (args.length<2) { System.out.println("Uso: echo host port"); System.exit(1); } Socket echoSocket = null; OutputStream os = null; InputStream is = null; ...
Sockets TCP
Ejemplo: un cliente de eco TCP (ii)
public class Echo { public static void main(String[] args) { ... try { echoSocket = new Socket(args[0],Integer.parseInt(args[1])); os = echoSocket.getOutputStream(); is = echoSocket.getInputStream(); } catch (UnknownHostException e) { System.err.println("Don't know about host: "+args[0]); } catch (IOException e) { System.err.println("Couldn't get I/O for connection to: "+args[0]); }
Joan Vila
71
Joan Vila
72
Sockets TCP
Ejemplo: un cliente de eco TCP (iii)
public class Echo { public static void main(String[] args) { ... if (echoSocket != null && os != null && is != null) { try { byte[] bufferin = new byte[256]; byte[] bufferout = new byte[256]; int count; String salida; while ((count = System.in.read(bufferin)) != -1) { os.write(bufferin,0,count); count=is.read(bufferout); salida = new String(bufferout,0,count); System.out.print("echo: " + salida); if (salida.equals("Bye"+"\r\n")) break; Procesamiento} distribuido en Java
Sockets TCP
Ejemplo: un cliente de eco TCP (iv)
public class Echo { public static void main(String[] args) { ... if (echoSocket != null && os != null && is != null) { try { ... os.close(); is.close(); echoSocket.close(); } catch (IOException e) { System.err.println("I/O failed on connection to: "+args[0]); } } } }
Joan Vila
73
Joan Vila
74
Sockets TCP
Ejemplo: un servidor de eco TCP (i)
import java.net.*; import java.io.*; class EchoServer { public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(4444); } catch (IOException e) { System.out.println("Could not listen on port: " + 4444 + ", " + e); System.exit(1); } ...
Sockets TCP
Ejemplo: un servidor de eco TCP (ii)
class EchoServer { public static void main(String[] args) { ... Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.out.println("Accept failed: " + 4444 + ", " + e); System.exit(1); } ...
Joan Vila
75
Joan Vila
76
Sockets TCP
Ejemplo: un servidor de eco TCP (iii)
try { InputStream is = clientSocket.getInputStream())); OutputStream os = clientSocket.getOutputStream(); byte[] bufferin = new byte[256]; int count; String linea; while ((count = System.in.read(bufferin)) != -1) { os.println(bufferin); os.flush(); linea = new String(bufferin,0,count); if (linea.equals("Bye")) break; } os.close(); is.close(); clientSocket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } Procesamiento distribuido en Java }
Joan Vila
Sockets TCP
Un servidor de echo multi-hilo en Java (i)
class EchoMultiServer { public static void main(String[] args) { ServerSocket serverSocket = null; boolean listening = true; try { serverSocket = new ServerSocket(7); } catch (IOException e) { System.err.println("Could not listen on port: 7, " + e.getMessage()); System.exit(1); } System.out.println("EchoMultiServer listening on port: 7");
77
Joan Vila
78
Sockets TCP
Un servidor de echo multi-hilo en Java (ii)
class EchoMultiServer { public static void main(String[] args) { ... while (listening) { Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println("Accept failed on port: 7, " + e.getMessage()); continue; } new EchoMultiServerThread(clientSocket).start(); } try { serverSocket.close(); } catch (IOException e) { System.err.println("Could not close server socket." + e.getMessage()); } 79 Procesamiento distribuido en Java Joan Vila } }
Sockets TCP
Un servidor de echo multi-hilo en Java (iii)
class EchoMultiServerThread extends Thread { Socket clientSocket = null; EchoMultiServerThread(Socket socket) { super("EchoMultiServerThread"); clientSocket = socket; }
public void run() { try { BufferedReader is = new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); PrintWriter os = new PrintWriter(clientSocket.getOutputStream()); String inputLine;
Procesamiento distribuido en Java
Joan Vila
80
Sockets TCP
Un servidor de echo multi-hilo en Java (iv)
class EchoMultiServerThread extends Thread { ... public void run() { ... while ((inputLine = is.readLine()) != null) { os.println(inputLine); os.flush(); } os.close(); is.close(); clientSocket.close(); } catch (IOException e) { System.err.println("Error sending/receiving" + e.getMessage()); e.printStackTrace(); } } }
Procesamiento distribuido en Java
Joan Vila
Sockets UDP
Sockets UDP: el cliente
DatagramSocket socket = new DatagramSocket(); // send packet byte[] msg = {'H', 'e', 'l', 'l', 'o'}; port = Integer.parseInt(args[1]); address = InetAddress.getByName(args[0]); DatagramPacket packet = new DatagramPacket(msg, lenght, address, port); socket.send(packet); // receive packet byte[] buf = new byte[4096]; packet = new DatagramPacket(buf, 256); socket.receive(packet); socket.close();
Procesamiento distribuido en Java
Joan Vila
81
82
Joan Vila
83
Joan Vila
84
JAVA-RMI
JAVA-RMI: Java Remote Method Invocation
Sistema de invocacin de mtodos remotos que (a diferencia de CORBA) asume un entorno homogneo de Mquina Virtual Java. Proporciona un modelo de objetos distribuidos similar al de Java, integrndolo en el lenguaje de manera natural. En este sentido permite:
Invocar mtodos de interfaces remotas Pasar una referencia a un objeto remoto en una invocacin (local o remota) Soportar callbacks de servidores a Applets.
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Los argumentos no remotos de la invocaciones y los resultados siempre se pasan por copia, nunca por referencia. Los objetos remotos se pasan por referencia no por copia Existen excepciones adicionales que pueden ocurrir durante una RMI.
Procesamiento distribuido en Java
Joan Vila
86
Java-RMI
Arquitectura de JAVA-RMI
Java-RMI
Concurrencia en Java-RMI
Cuando varios clientes invocan mtodos concurrentemente sobre un objeto servidor son, en general, ejecutados por diferentes hilos.
Server object
Client object
Invocaciones de clientes diferentes son siempre ejecutadas en hilos diferentes. Invocaciones del mismo cliente pueden no ser ejecutadas por hilos diferentes dependiendo de la implementacin de la mquina virtual.
Client object Server object
Stubs
Joan Vila
87
Joan Vila
88
Java-RMI
Generacin de stubs y skeletons
Generados automticamente por un preprocesador llamado rmic Se generan a partir del fichero de implementacin del objeto servidor (no a partir de su interfaz)
Java-RMI
Client
Server Interface
Server
Servicio de nombres
Los nombres no son transparentes a la ubicacin: //host/objectName Se accede a travs de la clase java.rmi.Naming
Cliente: Remote ref = Naming.lookup("//" +host + "/NombreObjeto"); Servidor: Naming.rebind("//" + myURL + "/NombreObjeto", obj); javac
lookup rebind
javac
Client Stub
rmi registry
Server Skeleton
En todo host donde residan servicios, debe ejecutarse un servidor de nombres, llamado rmiregistry. Este servidor slo mantiene entradas de servicios locales.
Procesamiento distribuido en Java
Joan Vila
rmic
Procesamiento distribuido en Java
Joan Vila
89
90
Java-RMI
Objetos como argumentos en invocaciones
Los objetos se pueden pasar por valor o por referencia en las invocaciones a mtodos remotos. Paso por valor: los objetos locales se pasan por valor (migration) Pass by reference: los objetos remotos se pasan por referencia Serializacion de objetos: Java-RMI dispone de un sofisticado mecanismo de serializacin que permite convertir objetos en secuencias de bytes aptos de ser enviados por un OutputStream como,p.e., un socket. Los objetos pasados por valor deben implementar la interfaz Serializable.
class aClass implements java.io.Serializable; aclass X; ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream()); os.writeObject(x);
Procesamiento distribuido en Java
Joan Vila
Java-RMI
Clases e interfaces RMI
java.rmi and java.rmi.server java.rmi and java.rmi.server
Interfaces
Remote RemoteObject Defined in packages Defined in packages
Classes
IOException
RemoteServer
RemoteException extends
UnicastRemoteObject
Implements
Joan Vila
91
92
Java-RMI
Clases e interfaces RMI
Todos los objetos servidores RMI deben declarar un interfaz. Este interfaz debe ser subclase de java.rmi.remote.
Oblifga a propagar excepciones de comunicacin en la declaracin de mtodos.
proporciona
La clase UnicastRemoteObject es una especializacin de la anterior que proporciona soporte para invocar objetos (no replicados).
Joan Vila
93
Joan Vila
94
El cliente de echo
EchoRMI.java
go alo Cat
Joan Vila
95
public class EchoRMI { { public class EchoRMI public static void main(String[] args) { { public static void main(String[] args) if (args.length<1) { { if (args.length<1) System.out.println("Usage: Echo <host>"); System.exit(1); System.out.println("Usage: Echo <host>"); System.exit(1); }} try { { try EchoIntRMI obj = (EchoIntRMI) Naming.lookup("//"+args[0]+"/EchoObject"); EchoIntRMI obj = (EchoIntRMI) Naming.lookup("//"+args[0]+"/EchoObject"); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String input,output; String input,output; while ((input = stdIn.readLine()) != null) { { while ((input = stdIn.readLine()) != null) output = obj.echo(input); output = obj.echo(input); System.out.println("echo: ""+ output); System.out.println("echo: + output); }} } }catch (Exception e) { { catch (Exception e) System.out.println("EchoRMI exception: ""+ e.getMessage()); System.out.println("EchoRMI exception: + e.getMessage()); }} }} }} Procesamiento distribuido en Java Joan Vila
96
97
Joan Vila
98
JAVA-RMI
Migracin de objetos
La aplicacin ComputeEngine
Enviar Tarea ComputePi Cliente Compute Engine
Devolver resultado
Joan Vila
99
Joan Vila
100
ComputeEngine.java
a de Hered teObject o tRem s Unica
Implementa Compute
Joan Vila
101
Joan Vila
102
ComputeEngine.java
ComputePi.java
package client; import java.rmi.*; import java.math.*; import compute.*;
ar public class ComputePi { stal er e in ear Manag public static void main(String args[]) { Cr ity ur Se c if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } ...
103
Joan Vila
104
ComputeEngine.java
Pi.java
package client; import compute.*; import java.math.*; public class Pi implements Task { ... Imp private int digits; le public Pi(int digits) { this.digits = digits; } public Object execute() { return calculatePi(digits); }
Procesamiento distribuido en Java Implementa el mtodo execute
Joan Vila
o public class ComputePi { jet ob de public static void main(String args[]) { ar dor sc vi ... s Bu ser bre try { en nom String name = "//" + args[0] + "/Compute"; Compute comp = (Compute) Naming.lookup(name); Instancia Pi task = new Pi(Integer.parseInt(args[1])); de task BigDecimal pi = (BigDecimal) (comp.executeTask(task)); System.out.println(pi); Invoca } catch (Exception e) { r obje to System.err.println("ComputePi exception: " + e.getMessage()); e.printStackTrace(); } } } Procesamiento distribuido en Java Joan Vila 105
m de T enta ask
106
Hello CORBA!
JAVA y CORBA
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia Procesamiento distribuido en Java
Joan Vila
108
La interfaz IDL
Procesamiento de interfaces
El procesador idltojava
Hello.java
Hello.idl module HelloApp { module HelloApp { interface Hello { interface Hello { // Methods // Methods string sayHello(); string sayHello(); }; }; }; };
_HelloImplBase.java
Esqueleto del servidor. Es una clase abstracta que proporciona la funcionalidad CORBA bsica para el servidor. Implementa la interfaz Hello.java. La clase del servidor HelloServant extiende _HelloImplBase.
_HelloStub.java
Stub del cliente. Implementa la interfaz Hello.java.
Joan Vila
109
Joan Vila
110
Procesamiento de interfaces
El procesador idltojava (ii)
y tambin los siguientes ficheros: HelloHelper.java
Clase final que proporciona funcionalidad extra, fundamentalmente el mtodo narrow para convertir referencias CORBA a su cooresponidentes tipos.
HelloHolder.java
Clase final que contiene una instancia de Hello. Proporciona operaciones para los argumentos out e inout de CORBA que no se ajustan fcilemente a la semntica de Java
Joan Vila
111
112
Invocar la operacin
String Hello = helloRef.sayHello();
Joan Vila
113
Joan Vila
114
Joan Vila
115
Joan Vila
116
117
Joan Vila
118
Compilando ...
Compile HelloClient.java:
javac HelloClient.java HelloApp\*.java
Compile HelloServer.java:
javac HelloServer.java HelloApp\*.java
Ficheros:
HelloServer.java
Procesamiento distribuido en Java
Joan Vila
119
Joan Vila
120
... y ejecutando
From an MS-DOS system prompt (Windows) or command shell (UNIX), start the Java IDL name server: tnameserv -ORBInitialPort 1050 From a second system prompt or shell, start the Hello server: java HelloServer -ORBInitialPort 1050 From a third prompt or shell, run the Hello application client: java HelloClient -ORBInitialPort 1050 The client prints the string from the server to the command line: Hello world!!
Applets
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia Procesamiento distribuido en Java
Joan Vila
121
Applets
Qu es un Applet ?
xaloc.es
Cliente WWW Servidor WWW
Applets
Applets
Son subclases de la clase Applet Son objetos grficos (subclases de Component) que se pueden ejecutar en el entorno de un browser de red (siempre que este incluya la mquina virtual). El sistema grfico AWT es representable por el browser de red. Se lanzan desde un fichero en HTML: sto hace migrar el cdigo del URL remoto al browser de red. Tienen algunas limitaciones de seguridad en el acceso a ficheros y recursos de la mquina a la que migran.
123 Procesamiento distribuido en Java
Joan Vila
N
http://xaloc.es/echo.html
echoClient. class
Joan Vila
124
Applets
Ciclo de vida de un Applet: milestones
public class Simple extends Applet {{ public class Simple extends Applet StringBuffer buffer; StringBuffer buffer; public void init() {{ public void init() buffer = new StringBuffer(); buffer = new StringBuffer(); addItem("initializing... "); addItem("initializing... "); }} public void start() {{ public void start() addItem("starting... "); addItem("starting... "); }} public void stop() {{ public void stop() addItem("stopping... ") addItem("stopping... ") }} public void destroy() {{ public void destroy() addItem("prepar. for unloading..."); addItem("prepar. for unloading..."); }} Procesamiento distribuido en Java
Applets
Mtodos para dibujo y manejo de eventos
Se utilizan as mismas clases y mtodos que en AWT Dibujo: sobrecargar el mtodo paint de la clase Component o los propios de cada componente. Manejo de eventos: utilizar las interfaces y clases del paquete java.awt.event
void addItem(String newWord) {{ void addItem(String newWord) System.out.println(newWord); System.out.println(newWord); buffer.append(newWord); buffer.append(newWord); repaint(); repaint(); }} public void paint(Graphics g) {{ public void paint(Graphics g)
//Draw aaRectangle //Draw Rectangle // around the applet's display area // around the applet's display area
//Draw the current string inside the rectangle. //Draw the current string inside the rectangle.
Joan Vila
125
Joan Vila
126
Applets
La etiqueta APPLET en HTML
<HTML> <HTML> <HEAD> <HEAD> <!-- Generated by Kawa IDE --> <!-- Generated by Kawa IDE --> <TITLE>Echo Applet</TITLE> <TITLE>Echo Applet</TITLE> </HEAD> </HEAD> <BODY> <BODY> <H1>Hello World</H1> <H1>Hello World</H1> <HR> <HR> <APPLET CODEBASE="../.." <APPLET CODEBASE="../.." CODE="examples.echo.EchoApplet" CODE="examples.echo.EchoApplet" WIDTH=300 HEIGHT=300> WIDTH=300 HEIGHT=300> <PARAM NAME = maquina VALUE="localhost"> <PARAM NAME = maquina VALUE="localhost"> </APPLET> </APPLET> <HR> <HR> </BODY> </BODY> </HTML> </HTML>
Procesamiento distribuido en Java
Joan Vila
Applets
Hello.htm
El Applet echo
package examples.eco; package examples.eco; import java.awt.*; import java.awt.*; import java.rmi.*; import java.rmi.*;
EchoApplet.java
127
public class EchoApplet extends java.applet.Applet public class EchoApplet extends java.applet.Applet {{ String message = Beep, Beep. Funciona el eco "; String message = Beep, Beep. Funciona el eco "; public void init() public void init() {{ try {{ try String maquina = null; String maquina = null; maquina = getParameter("maquina"); maquina = getParameter("maquina"); EchoIntRMI obj = (EchoIntRMI) Naming.lookup("//"+maquina+ "/EchoObject"); EchoIntRMI obj = (EchoIntRMI) Naming.lookup("//"+maquina+ "/EchoObject"); message = obj.echo(); message = obj.echo(); }}catch (Exception e) {{ catch (Exception e) System.out.println(EchoApplet exception: ""+ System.out.println(EchoApplet exception: + e.getMessage()); e.getMessage()); }} }} Procesamiento distribuido en Java Joan Vila 128
Applets
El Applet echo
EchoApplet.java
package examples.eco; package examples.eco; public class EchoApplet extends java.applet.Applet public class EchoApplet extends java.applet.Applet ... ... public void paint(Graphics g) public void paint(Graphics g) {{ g.drawString(message, 25, 50); g.drawString(message, 25, 50); }} }}
Applets
Restricciones de seguridad
La mayoria de los visores imponen restricciones de ejecucin sobre Applets no confiables. Provocan SecurityException s. Las restricciones son: No puede cargar bibliotecas (excepto java.*) y mtodos nativos. No puede leer o escribir ficheros sobre el host que ejecuta el Applet. No puede establecer conexiones de red excepto al host del que proviene. No puede ejecutar un programa en el host que ejecuta el Applet. No puede obtener demasiadas propiedades del sistema Las ventanas de los applets traen son de apariencia diferente a las ventanas del sistema (directorio de trabajo, directorio de usuario, nombre usuario,..) La forma de declarar un Applet confiable es dependiente del visor (a travs de firmas o URLs vlidos, ...)
Joan Vila
129
Joan Vila
130
Servlets
Qu es un servlet?
Son una forma de realizar CGIs en Java (server side programming) Tiene capacidades para manipular peticiones y respuesta a formularios HTML No tienen una interfaz grfica (a diferencia de los Applets)
Servlets
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia Procesamiento distribuido en Java
Joan Vila
132
Servlets
Arquitectura javax.Servlet del paquete
Servlets
Arquitectura del paquete javax.Servlet
La clase ServletRequest proporciona:
Acceso a las variables CGI y a los parmetros definidos por la peticin del cliente. Acceso al input stream ServletInputStream, a travs del cual el servlet obtiene datos de clientes que utilizan protocolos de aplicacin tales como los mtodos POST y PUT de HTTP u otros ms especficos.
Las interfaces Servlet y HttpServlet proporcionan mtodos para gestionar el Servlet y manejar las comunicaciones con los clientes. Cuando un servlet acepta una peticin de un cliente recibe dos objetos
ServletRequest: encapsula comunicacin del cliente al servlet ServletResponse: encapsula comunicacin del servlet al cliente la la
Joan Vila
133
Joan Vila
134
Servlets
Un ejemplo de servlet
public BookServlet extends HttpServlet { public BookServlet extends HttpServlet { doGet(HttpServletRequest request, HttpServletResponse response) doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException throws ServletException, IOException { ... { ... // set content-type header before accessing the Writer // set content-type header before accessing the Writer response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); // then write the response // then write the response out.println("<html>" + "<head><title>Book Description</title></head>" + ...); out.println("<html>" + "<head><title>Book Description</title></head>" + ...); //Get the identifier of the book to display //Get the identifier of the book to display String bookId = request.getParameter("bookId"); String bookId = request.getParameter("bookId"); if (bookId != null) { if (bookId != null) { // and the information about the book and print it // and the information about the book and print it ... ... } } out.println("</body></html>"); out.println("</body></html>"); out.close(); out.close();
Joan Vila
Servlets
Manejo de mtodos GET y POST Sobrecargar los mtodos doGet y doPost de HttpServlet Aspectos de multithreading Los servlets atienden clientes concurrentemente. Para atenderlos secuencialmente:
public class BookServlet extends HttpServlet implements SingleThreadModel
Ciclo de vida de un servlet Algunos mtodos de la clase HttpServlet son invocados automticamente a lo largo de su ciclo de vida:
init: cuando un servlet es cargado por el servidor. Se puede sobrecargar. destroy: cuando un servlet es descargado por el servidor. Se puede sobrecargar. service: cada vez que se procesa una peticin de un cliente. Slo se suele sobrecargar para poner un contador de clientes.
135
Joan Vila
136
Servlets
Ejemplo de cmo sobrecargar el mtodo service
public ShutdownExample extends HttpServlet { public ShutdownExample extends HttpServlet { private int serviceCounter = 0; private int serviceCounter = 0; //Access methods for serviceCounter //Access methods for serviceCounter protected synchronized void enteringServiceMethod() protected synchronized void enteringServiceMethod() { serviceCounter++; } { serviceCounter++; } protected synchronized void leavingServiceMethod() { serviceCounter--; } protected synchronized void leavingServiceMethod() { serviceCounter--; } protected synchronized int numServices() { return serviceCounter;} protected synchronized int numServices() { return serviceCounter;} } } protected void service(HttpServletRequest req, HttpServletResponse resp) protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException throws ServletException, IOException { { enteringServiceMethod(); enteringServiceMethod(); try { try { super.service(req, resp); super.service(req, resp); } finally { } finally { leavingServiceMethod(); leavingServiceMethod(); } } } } Procesamiento distribuido en Java
Servlets
Informacin de estado
Existen dos opciones bsicas Sessions: mantenida por el servidor Cookies: mantenida por el cliente
Sessions
Sirven para establecer sesiones con un cliente web. Permiten;
Crear una sesin. Almacenar/Obtener datos Invalidar una sesin.
Cookies
Permiten a un servidor enviar informacin codificada a un cliente para recuperarla ms tarde sin alterar.
Joan Vila
137
Joan Vila
138
Servlets
Sessions
public class CatalogServlet extends HttpServlet {{ public class CatalogServlet extends HttpServlet public void doGet (HttpServletRequest request, HttpServletResponse response) public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {{ throws ServletException, IOException // Get the user's session and shopping cart // Get the user's session and shopping cart HttpSession session = request.getSession(true); HttpSession session = request.getSession(true); ShoppingCart cart = ShoppingCart cart = (ShoppingCart) session.getValue(session.getId()); (ShoppingCart) session.getValue(session.getId()); // If the user has no cart, create aanew one // If the user has no cart, create new one if (cart == null) {{ if (cart == null) cart = new ShoppingCart(); cart = new ShoppingCart(); }} session.putValue(session.getId(), cart); session.putValue(session.getId(), cart); ... ...
Joan Vila
Servlets
Sessions
public void doGet (HttpServletRequest request, HttpServletResponse response) public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {{ throws ServletException, IOException HttpSession session = request.getSession(true); HttpSession session = request.getSession(true); ShoppingCart cart = (ShoppingCart)session.getValue(session.getId()); ShoppingCart cart = (ShoppingCart)session.getValue(session.getId()); ... ... // Check for pending adds to the shopping cart // Check for pending adds to the shopping cart String bookId = request.getParameter("Buy"); String bookId = request.getParameter("Buy"); //If the user wants to add aabook, add it and print the result //If the user wants to add book, add it and print the result String bookToAdd = request.getParameter("Buy"); String bookToAdd = request.getParameter("Buy"); if (bookToAdd != null) {{ if (bookToAdd != null) BookDetails book = database.getBookDetails(bookToAdd); BookDetails book = database.getBookDetails(bookToAdd);
Aadir Informacin estado
}}
139
140
Servlets
Sessions
public class ReceiptServlet extends HttpServlet {{ public class ReceiptServlet extends HttpServlet public void doPost(HttpServletRequest request, HttpServletResponse response) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {{ throws ServletException, IOException ... ... scart = (ShoppingCart)session.getValue(session.getId()); scart = (ShoppingCart)session.getValue(session.getId()); ... ... // Clear out shopping cart by invalidating the session // Clear out shopping cart by invalidating the session session.invalidate(); session.invalidate(); // set content type header before accessing the Writer // set content type header before accessing the Writer response.setContentType("text/html"); response.setContentType("text/html"); out = response.getWriter(); out = response.getWriter(); ... ... }} }} Procesamiento distribuido en Java
Joan Vila
Servlets
Cookies
Crear un cookie (un cookie asociado a cada libro):
Cookie getBook = new Cookie(Buy, bookId)
Enviar un cookie:
response.addCookie(getBook);
Invalidar sesin
Recuperar cookies:
Cookie[] cookies = request.getCookies();
141
Joan Vila
142
Seguridad en Java
Modelo de seguridad de la plataforma JDK 1.0
Seguridad en Java
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia Procesamiento distribuido en Java
Joan Vila
144
Seguridad en Java
Modelo de seguridad de la plataforma JDK 1.1
Seguridad en Java
Modelo de seguridad de la plataforma JDK 1.2
Joan Vila
145
Joan Vila
146
Seguridad en Java
Modelo de seguridad de la plataforma JDK 1.2
Todo el cdigo (independientemente de si es local o remoto) est sujeto a una poltica de seguridad. Una poltica de seguridad define un conjunto de permisos diponibles para cdigo segn sea:
Su URL de origen Su firma
Seguridad en Java
Modelo de seguridad de la plataforma JDK 1.2
Se pueden aadir nuevas polticas de seguridad:
Mediante parmetros para la mquina virtual: $ java -Djava.security.policy=C:/ajava.policy Mediante una nueva entrada en /jre/lib/security/java.security policy.url.1=file:${java.home}/lib/security/java.policy policy.url.2=file:${user.home}/.java.policy policy.url.3=file:C:/ajava.policy
El soporte de ejecucin organiza el cdigo en dominios cada uno de los cuales agrupa una serie de clases cuyas instancias son concedidas dichos permisos. Los permisos por defecto son equivalentes a los de la plataforma 1.1 y se definen en el fichero: ... /jre/lib/security/java.policy
Joan Vila
147
Joan Vila
148
Seguridad en Java
Clases Java para seguridad
java.lang.SecurityManager: permite desarrollar implementan una determinada poltica de seguridad. java.security: aplicaciones que
Seguridad en Java
Aplicaciones Java para seguridad
Son herramientas escritas en Java para controlar la seguridad. policytool: permite crear y modificar los ficheros que definen las polticas de una determinada aplicacin. keytool: permite crear pares de claves pblicas y privadas, importar y visualizar cadenas de certificados, exportar certificados, generar certificados autofirmados X.509v1, generar peticiones para ser enviadas a autoridades de certificacin. jarsigner: permite firmar ficheros JAR y verificar la autenticidad de la firma.
Define clases relacionadas con permisos y polticas Proporciona soporte para firmas digitales, incluyendo implementaciones de:
Algoritmos de resumen MD5 (RFC1321) y SHA-1 Certificados en diversos formatos. En particular soporta certificados X.509 Factora de certificados: utilizada para generar certificados y listas de revocacin de certificados.
149
Joan Vila
150
Joan Vila
151
Joan Vila
152
Ficheros JAR
Caractersticas archivos JAR
Los archivos JAR permiten empaquetar en un nico fichero las aplicaciones Java: ficheros .class y recursos auxiliares. Se utiliza tpicamente para applets. Seguridad: se pueden firmar digitalmente. Los receptores puede otorgar privilegios de ejecucin si reconocen la firma. Compresin: permite ahorrar espacio. Mejora tiempo de descarga: slo requieren una interccin HTTP. Empaquetamiento de extensiones: las extensiones son una forma de ampliar la funcionalidad de la plataforma Java. Por ej. Java-3D, Java-Mail Sellado de paquetes: se obliga a las aplicaciones a utilizar las clases definidas en el paquete (asegurar consistencia de versiones). Meta-informacin: incorporan un fichero de manifiesto en el que, ademas de la informacin sobre ficheros contenidos, figura informacin sobre vendedor, versin, etc. Portabilidad: el mecanismo JAR es estndar de la plataforma Java.
Joan Vila
153
Joan Vila
154
Ficheros JAR
Manejo de ficheros JAR
To create a JAR file To view the contents of a JAR file To extract the contents of a JAR file To extract specific files from a JAR file To run an application packaged as a JAR file (version 1.1) To run an application packaged as a JAR file (version 1.2 -- requires manifest header) To invoke an applet packaged as a JAR file jar cf jar-file input-file(s) jar tf jar-file jar xf jar-file jar xf jar-file archived-file(s) jre -cp app.jar MainClass java -jar app.jar <applet code=AppletClassName.class archive="JarFileName.jar" width=width height=height> </applet>
Joan Vila
155
Joan Vila
156
-sigfile file
158
Adicionalmente, se genera un fichero de bloque de firma con la firma digital del JAR creada con la clave privada y el certificado con la clave pblica.
Procesamiento distribuido en Java
Joan Vila
159
Joan Vila
160
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia 161
Gestores de seguridad
Gestores de seguridad
Son subclases de Security Manager Sobrecargan mtodos checkXXX que son invocados por las bibliotecas Java antes de realizar operaciones potencialmente peligrosas.
class ASecurityManager extends SecurityManager {{ class ASecurityManager extends SecurityManager public void checkRead(String filename) {{ public void checkRead(String filename) if (!accessOK()) throw new SecurityException("No Way!"); if (!accessOK()) throw new SecurityException("No Way!"); }} public void checkRead(String filename, Object executionContext) {...} public void checkRead(String filename, Object executionContext) {...} public void checkWrite(FileDescriptor filedescriptor) {...} public void checkWrite(FileDescriptor filedescriptor) {...} }} public void checkWrite(String filename) {...} public void checkWrite(String filename) {...}
Joan Vila
Gestores de seguridad
Gestores de seguridad
These methods are called by various methods in the Java libraries before those methods perform certain potentially sensitive operations. The invocation of such a check method typically looks like this:
SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkXXX(argument, . . . ); }
The security manager is thereby given an opportunity to prevent completion of the operation by throwing an exception. The special method checkPermission(java.security.Permission) determines whether an access request indicated by a specified permission should be granted or denied.
163
Joan Vila
164
Gestores de seguridad
Gestores de seguridad
checkConnect public void checkConnect(String host, int port)
Throws a SecurityException if the calling thread is not allowed to open a socket connection to the specified host and port number. A port number of -1 indicates that the calling method is attempting to determine the IP address of the specified host name. This method calls checkPermission with the:
SocketPermission(host+":"+port,"connect") permission (port != -1) SocketPermission(host,"resolve") permission (port = -1)
Gestores de seguridad
RMISecurityManager
Provides an example security manager for use by RMI applications that use downloaded code. RMI's class loader will not download any classes from remote locations if no security manager has been set. RMISecurityManager does not apply to applets, which run under the protection of their browser's security manager.
If you override this method, then you should make a call to super.checkConnect at the point the overridden method would normally throw an exception.
Joan Vila
165
Joan Vila
166
Gestores de seguridad
Un ejemplo de gestor de seguridad
Acceso a ficheros con contrasea
Gestores de seguridad
Un ejemplo de gestor de seguridad
Acceso a ficheros con contrasea
class PasswordSecurityManager extends SecurityManager {{ class PasswordSecurityManager extends SecurityManager . .. .. . private boolean accessOK() {{ private boolean accessOK() int c; int c; DataInputStream dis = new DataInputStream(System.in); DataInputStream dis = new DataInputStream(System.in); String response; String response; System.out.println(" Password?"); System.out.println(" Password?"); try {{ try response = dis.readLine(); response = dis.readLine(); if (response.equals(password)) return true; if (response.equals(password)) return true; else return false; else return false; }}catch (IOException e) {{ return false; }} catch (IOException e) return false; }} . SIGUE! . SIGUE!
Joan Vila
class PasswordSecurityManager extends SecurityManager {{ class PasswordSecurityManager extends SecurityManager . .. .. . PasswordSecurityManager(String password) {{ PasswordSecurityManager(String password) super(); super(); this.password = password; this.password = password; }} . SIGUE! . SIGUE!
167
Joan Vila
168
Gestores de seguridad
Un ejemplo de gestor de seguridad
Acceso a ficheros con contrasea
public void checkRead(String filename) {{ public void checkRead(String filename) if (!accessOK()) throw new SecurityException("No Way!"); if (!accessOK()) throw new SecurityException("No Way!"); }} public void checkRead(String filename, Object executionContext) {{ public void checkRead(String filename, Object executionContext) if (!accessOK()) throw new SecurityException("Forget It!"); if (!accessOK()) throw new SecurityException("Forget It!"); }} public void checkWrite(FileDescriptor filedescriptor) {{ public void checkWrite(FileDescriptor filedescriptor) if (!accessOK()) throw new SecurityException("Not!"); if (!accessOK()) throw new SecurityException("Not!"); }} public void checkWrite(String filename) {{ public void checkWrite(String filename) if (!accessOK()) throw new SecurityException("Not Even!"); if (!accessOK()) throw new SecurityException("Not Even!"); }} }}
Procesamiento distribuido en Java
Joan Vila
Gestores de seguridad
Un ejemplo de gestor de seguridad
Acceso a ficheros con contrasea Instalacin
try {{ try System.setSecurityManager(new PasswordSecurityManager("Booga Booga")); System.setSecurityManager(new PasswordSecurityManager("Booga Booga")); }}catch (SecurityException se) {{ catch (SecurityException se) System.out.println("SecurityManager already set!"); System.out.println("SecurityManager already set!"); }}
169
Joan Vila
170
Gestores de seguridad
Gestores de seguridad:
qu mtodos sobrecargar?
sockets checkAccept(String host, int port) sockets checkAccept(String host, int port) checkConnect(String host, int port) checkConnect(String host, int port) checkConnect(String host, int port, Object executionContext) checkConnect(String host, int port, Object executionContext) checkListen(int port) checkListen(int port) threads threads checkAccess(Thread thread) checkAccess(Thread thread) checkAccess(ThreadGroup threadgroup) checkAccess(ThreadGroup threadgroup)
Gestores de seguridad
Gestores de seguridad
qu mtodos sobrecargar?
system commands checkExec(String command) system commands checkExec(String command) interpreter checkExit(int status) interpreter checkExit(int status) package checkPackageAccess(String packageName) package checkPackageAccess(String packageName) checkPackageDefinition(String packageName) checkPackageDefinition(String packageName) properties checkPropertiesAccess() properties checkPropertiesAccess() checkPropertyAccess(String key) checkPropertyAccess(String key) checkPropertyAccess(String key, String def) checkPropertyAccess(String key, String def) networking checkSetFactory() networking checkSetFactory() windows checkTopLevelWindow(Object window) windows checkTopLevelWindow(Object window)
171 Procesamiento distribuido en Java
Joan Vila
class loader checkCreateClassLoader() class loader checkCreateClassLoader() file system checkDelete(String filename) file system checkDelete(String filename) checkLink(String library) checkLink(String library) checkRead(FileDescriptor filedescriptor) checkRead(FileDescriptor filedescriptor) checkRead(String filename) checkRead(String filename) checkRead(String filename, Object executionContext) checkRead(String filename, Object executionContext) checkWrite(FileDescriptor filedescriptor) checkWrite(FileDescriptor filedescriptor) checkWrite(String filename) checkWrite(String filename) Procesamiento distribuido en Java Joan Vila
172
URLs
Qu es un URL? Universal Resource Locator.
URLs en Java
Proporciona informacin de la ubicacin de un recurso en Internet. Tiene 3 partes: Protocolo utilizado para acceder la informacin
ftp://javasoft.com/docs http://sop.upv.es/so/srd/transparencias.html file:/home/jvila/docs/tutorial.html
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
Informacin del host. Puede incluir, adems del nombre del host, el port, el login y el password.
http://sop.upv.es http://sop.upv.es:80/so/srd/index.html http://sop.upv.es.jvila.hola123/so/srd/index.html
Procesamiento distribuido en Java
Ruta de acceso
Joan Vila
174
URLs
Clases y mtodos para trabajo con URLs Clase URL Permite abrir conexiones y lecturas directas.
URL() : constructor getHost(), getFile(), : analizadores de URL openConnection() : Abre una conexin a un URL y retorna un URLConnection openStream() : Abre una conexin al URL y retorna un InputStream para lectura
URLs
Clases y mtodos para trabajo con URLs Clase URLConnection Permite lecturas y escrituras y una forma de operacin mas general con URLs
URLConnection() : constructor getInputStream() : retorna un InputStream para lectura getOutputStream() : retorna un ouputStream para escritura
Joan Vila
175
Joan Vila
176
URLs
import java.net.*; import java.io.*;
URLs
Lectura directa de un URL
import java.net.*; import java.io.*; class OpenStreamTest { public static void main(String[] args) { try { URL yahoo = new URL("http://www.yahoo.com/"); BufferedReader dis = new BufferedReader new InputStreamReader(yahoo.openStream())); String inputLine; while ((inputLine = dis.readLine()) != null) { System.out.println(inputLine); } dis.close();
class ParseURL { public static void main(String[] args) { URL aURL = null; try { aURL = new URL( "http://java.sun.com:80/tutorial/intro.html#DOWNLOADING"); System.out.println("protocol = " + aURL.getProtocol()); System.out.println("host = " + aURL.getHost()); System.out.println("filename = " + aURL.getFile()); System.out.println("port = " + aURL.getPort()); System.out.println("ref = " + aURL.getRef()); } catch (MalformedURLException e) { System.out.println("MalformedURLException: " + e); } } }
Joan Vila
177
Joan Vila
178
URLs
Lectura directa de un URL
import java.net.*; import java.io.*; class OpenStreamTest { public static void main(String[] args) { try { ... } dis.close(); } catch (MalformedURLException me) { System.out.println("MalformedURLException: " + me); } catch (IOException ioe) { System.out.println("IOException: " + ioe); } } }
Procesamiento distribuido en Java
Joan Vila
URLs
Conexin a un URL
import java.net.*; import java.io.*; class ConnectionTest { public static void main(String[] args) { try { URL yahoo = new URL("http://www.yahoo.com/"); URLConnection yahooConnection = yahoo.openConnection(); BufferedReader is = new BufferedReader( new InputStreamReader(yahooConnection.getInputStream())); PrintWriter os = new PrintWriter( new IbufferedOutputStream(yahooConnection.getOutputStream())); String inputLine; } dis.close(); } catch (MalformedURLException me) { System.out.println("MalformedURLException: " + me); } catch (IOException ioe) { System.out.println("IOException: " + ioe); } 179 } Procesamiento distribuido en Java }
Joan Vila
180
JDBC
Qu es JDBCTM?
NO es el acrnimo de Java DataBase Conectivity (aunque lo parezca) Es un API para ejecutar sentencias SQL desde Java: permite enviar sentencias SQL a cualquier base de datos relacional (no importa que sea Oracle, Informix, ) en cualquier plataforma, aunque sea remota. Ejemplo de qu se puede hacer: pgina de web con una applet que utiliza informacin sobre una base de datos remota.
JDBC
Joan Vila
DISCA / UPV Departament dInformtica de Sistemes i Computadors Universitat Politcnica de Valncia
1.- Establecer una conexin con una base de datos 2.- Enviar sentencias SQL 3.- Procesar los resultados.
Procesamiento distribuido en Java
Joan Vila
182
JDBC
JDBC: un ejemplo
Connection con = DriverManager.getConnection (( Connection con = DriverManager.getConnection "jdbc:odbc:wombat", "login", "password"); "jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, ccFROM Table1"); ResultSet rs = stmt.executeQuery("SELECT a, b, FROM Table1"); while (rs.next()) {{ while (rs.next()) int xx= getInt("a"); int = getInt("a"); String ss= getString("b"); String = getString("b"); float ff= getFloat("c"); float = getFloat("c"); }}
Establecimiento de la conexin
JDBC
Qu queda por hacer?
JDBC es un API de muy bajo nivel el que se tienen que invocar directamente sentencias SQL con execute. Por llo, se encuentra en desarrollo: SQL empotrado para Java Mapeo directo de tablas de base de datos relacional a clases Java
Joan Vila
183
184
JDBC
Drivers para JDBC
Aplicacin Java JDBC driver manager
Driver de red JDBC Driver del puente JDBC-ODBC Driver ODBC
JDBC
EL JDK componentes: incluye tres
URLs de JDBC
Proporcioana una base de datos de manera que se seleccione el driver adecuado y se establezca una conexin con l. Un URL para JDBC consta de tres partes: jdbc:<subprotocolo>:<subnombre>
jdbc es el protocolo. Siempre es jdbc <subprotocolo> es normalmente el driver o el mecnismos de conectividad que puede ser soportado por uno o ms drivers. Un caso especial es odbc que permite especificar fuentes de datos al estilo odbc y tiene la caracterstica de poder especificar atributos. La sintaxis odbc es:
API JDBC
Driver A
Driver B
Drivers JDBC
JDBC driver manager: conecta aplicaciones Java al driver correcto de JDBC: puede seleccionar entre varios tipos de driver: Puente JDBC-ODBC Driver especfico de DBMS Protocolo de red independiente de DMS JDBC test suite: comprueba si un driver cumple con los requisitos JDBC JDBC-ODBC bridge: Permite drivers ODBC ser utilizados como JDBC Joan Vila 185
jdbc:odbc:<data-source-name>[;<nombre-atributo>=<valor atributo>]*
Ejemplos: jdbc:odbc:wombat jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
Procesamiento distribuido en Java
Joan Vila
186
JDBC
URLs de JDBC
<subnombre> permite identifcar la base de datos. En el caso anterior, wombat es suficiente porqu utiliza ODBC. Una base de datos requiere negeneral ms informacin: //hostname:port/subsubname
Ejemplo: jdbc:dbnet://wombat:356/fred
(1)
La correcin de errores debe La correcin de errores debe hacerse en el script del hacerse en el script del servidor. HTML no lo permite servidor. HTML no lo permite La aplicacin consume tiempo La aplicacin consume tiempo de proceso en el servidor de proceso en el servidor El servidor se convierte en El servidor se convierte en cuello de botella potencial cuello de botella potencial
CGI
Script para procesado fichas
(3) (7)
187
188
(2)
JDBC
El applet hace el procesamiento de El applet hace el procesamiento de la ficha yyde los errores. la ficha de los errores. El applet comunica directamente El applet comunica directamente con la base de datos. con la base de datos. Procesamiento totalmente Procesamiento totalmente realizado por el cliente realizado por el cliente
189