Está en la página 1de 30

Contenido

Contenidos del curso ..................................................................................................................... 2 JDBC ............................................................................................................................................... 3 Drivers ....................................................................................................................................... 3 Operaciones con JDBC............................................................................................................... 4 Carga de drivers..................................................................................................................... 4 Conectar/desconectar a BD .................................................................................................. 4 Enviar rdenes a la BD. Sentencias ....................................................................................... 8 Sentencias preparadas ....................................................................................................... 12 Procedimientos almacenados ............................................................................................. 13 Tansaciones ......................................................................................................................... 14 Optimizaciones y otras mejoras .................................................................................................. 15 Porcentaje de carga: ............................................................................................................... 15 Actualizaciones en modo bach ................................................................................................ 15 Nuevos tipos de resultSet ....................................................................................................... 16 No asist a clase . ................................................................................................................. 17 EntityManager ......................................................................................................................... 18 Creaccin de las clases URM en un proyecto con un modelo de datos existente.................. 18 Queryes con nombre. Anotaciones......................................................................................... 22 Patrones de diseo. DAO ............................................................................................................ 23 Persistencia de relaciones entre clases ....................................................................................... 24 Aplicaciones WEB ........................................................................................................................ 28 Curiosidades ................................................................................................................................ 30

INDRA | Programacin java II

Lunes 14 Junio
Contenidos del curso
Dos bloques claramente distinguidos: JDBC (acceso a base d edatos) y URM (mapeadores de objeto relacin)

JDBC

APLICACIN WEB

AD (acceso datos)

A Web (aplicacin web)

Clsica (desktop)

Orientacin objetos

JSP

Servlet

Libro: Web development with Java que cubre la parte de aplicaciones Web El blog del profe: http://formanntt.blogspot.com/ Sobre la tecnologa del curso: La herramienta sobre la que trabajaremos es NetBeans 6.8, que es la versin estable. Gua de referencia rpida de JDBC: C:\MCSE\Lunes 14 de junio de 2010\Documentacin\Manual Jdbc.htm El directorio de los ejemplos se guardarn en: C:\MCSE\Lunes 14 de junio de 2010\Ejemplos Necesitamos una base de datos que puede ser cualquiera por ejemplo: Derby, MySQL Para nosotros ser MySQL que la encontramos en: Inicio> Progarmas > MySQL Clave: root

INDRA | Programacin java II

Cuanto ms actualizada este la versin que utilicemos de java podremos hacer el mismo trabajo pero trabajando menos. (JSE v6.0 Edicin Standard java, JEE v.6.0 versin Enterprice de java y JME tecnologa de mviles en java) La primera tecnologa que veremos en el curso que forma parte de la edicin Estndar es la JDBC (Conectividad para bases de datos en java) y por tanto es aplicable a cualquier aplicacin java. JDBC es un API (interface para la creacin de aplicaciones, biblioteca de clases para facilitarnos los accesos a datos), i.e, es una especificacin de cmo se debe acceder a la base de datos y adems es una implementacin.

JDBC
[ver 2.1] La arquitectura de esta herramienta sigue el siguiente esquema: Este primer nivel es el cdigo que nosotros escribimos JBDC para el Acceso a datos Los drivers son los nicos que saben que estn hablando con una BD. Son los que nos van a dar la conexin a la BD. Son las BD a las que se accede n ap

JDBC Drivers 1 BDOracle Drivers 2 BD2

Drivers
[ver 2.3] Para funcionar nicamente necesita java. Todas las aplicaciones que actualmente existen en java tiene los drivers para ejecutarlos de tipo 4. 3 Un driver es una clase java con la diferencia que el driver debe implementar la interface, DRIVER, para que java reconozca que es un driver.

INDRA | Programacin java II

Los drivers traducen cualquier sentencia SQl de forma que la BD a la que vaya a acceder sea capaz de entenderla.

Operaciones con JDBC


Los JBDC nos permite conectar/desconectar a la base de datos, obtener los datos y procesar los resultados que nos devuelva. [ver 3. Clases del API JDBC.] Se utiliza la clase Class que es una metaclase, la diferencia entre una clase y una metaclase es que las instancias de esta metaclae definen o representan las caractersticas de otras clases Carga de drivers [Ver 3.1] Para acceder la BD lo primero que se ha de hacer es cargar el driver en memoria con el que vamos a acceder a la BD. Para ello, la forma ms til y que se usa en el da a da es usar el mtodo de la metaclase llamado: forName. Se invocara como class.forName y este mtodo nos permite cargar en memoria el driver que indiquemos. Por ejemplo: Class.forName(uno.A); buscara en el disco duro la clase A que estar en el paquete uno, si no encuentra la clase A lanzar una excepcin si la encuentra ya tendremos cargado el driver en memoria para su utilizacin.

Para encontrar la clase debe estar en el classpath (variable de entorno que contiene una serie de directorios donde hay clases java compiladas) del sistema. Conectar/desconectar a BD [Ver 3.2] Conectar Supongamos ya tenemos cargado el driver y ahora nos queremos conectar a la BD. Debemos recurrir a la clase DriverManager, que se encarga de gestionar los driver que tenemos en memoria. Definiremos un objeto de la clase : Connection con = new Conecction(); y despus hay que utilizar el mtodo getConection() que nos devolver un objeto que implementar la clase DriverManager. Este mtodo necesita tres parmetros, todos ellos de tipo string: 4 url (localizador uniforme de parmetros). Tiene el siguiente formato: protocolo : nombredriver : localizacin de la BD indicando mquina y puerto(opcional) Ejemplo: para conectarme a la base de datos de derby escribira la url: INDRA | Programacin java II

jdbc:derby://localhost:1527/curso usuario clave

Desconectar Se coge la clase con la que trabajemos y llamamos al mtodo close(). Ejemplo: con.close(); Es importantsimo llamar al mtodo close() porque si no se cierra explcitamente se podra quedar conectado al servidor remoto de la BD. EJERCICIO 1: UN programa que nos conecte y desconecte de una Base de Datos Conexiones con BD en NetBeans

Desplegamos APP:

INDRA | Programacin java II

Esto que obtenemos es un intrprete de la BD. Nos hemos asegurado que tenemos BD en el ordenador.

INDRA | Programacin java II

Ese check nos permitir importar tbn las libreras para que si arrancamos esta nueva clase en otro lugar no nos de error de no encontrar las libreras. El cdigo de programa es: // Clase que conecta y desconecta de la base de datos try { System.out.println("Invocamos al mtodo forName"); Class.forName("org.apache.derby.jdbc.ClientDriver"); System.out.println("Creamos la conexin"); Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/curso", "app", "app"); System.out.println("Cerramos la conexin"); con.close(); } catch (SQLException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); }

INDRA | Programacin java II

Martes 15 Junio
Antes de ejecutar un programa debo conectarme a la base de datos para lo cual:

Enviar rdenes a la BD. Sentencias [Ver 3.3] Para crear una sentencia debemos crear una variable de tipo Statement, y escribir el cdigo:

Statement stmt = con.createStatement(); con es la conexin que he abierto anteriormente

Y a continuacin decirle la orden de SQL que queremos que ejecute.

INDRA | Programacin java II

Java distingue entre dos tipos de rdenes para ejecutar: Queryes mediante la sentencia select stmt.executeQuery (SELECT ); Todo lo dems: insert, delete, update, stmt.executeUpdate (INSERT | UPDATE | DELETE | CREATE | );

Todo lo que no sea sentencia Donde stmt es la variable de tipo Statement que hemos declarado con anterioridad. Estos mtodos nos devuelven un nmero que ser el nmero de filas que han sido modificadas con esta sentencia. No ser obligatorio capturar este valor que devuelve salvo que lo queramos usar para algo. Cuando se termina de trabajar con un Statement se debe cerrar con la instruccin: Stmt.close(); Ej: String x=insert into.. stmt.executeUpdate(x); stmt.close();

EJERCICIO: Creamos tabla en BD para poder realizar consultas a travs de java.

INDRA | Programacin java II

Los Strings desde java los haremos con simples comillas simples. La clase se llama Primera_1:
try { System.out.println("Invocamos al mtodo forName"); Class.forName("org.apache.derby.jdbc.ClientDriver"); System.out.println("Creamos la conexin"); Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/curso", "app", "app"); java.sql.Statement stmt = con.createStatement(); System.out.println("Insert en la BD"); String i1 = "INSERT into personas (id,nombre) values (1,'nombre1')"; stmt.executeUpdate(i1); String i2 = "INSERT into personas (id,nombre) values (2,'nombre2')"; stmt.executeUpdate(i2); String i3 = "INSERT into personas (id,nombre) values (3,'nombre3')"; stmt.executeUpdate(i3); System.out.println("Update en la BD"); String u2 = "UPDATE personas set nombre= 'nombreActualizado' where id=2"; stmt.executeUpdate(u2); System.out.println("Delete en la BD"); String d3 = "DELETE from personas where id in(1,2,3)"; stmt.executeUpdate(d3);

System.out.println("Cerramos la conexin"); con.close(); } catch (SQLException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); }

Sentencias

Para ejecutar sentencias utilizaramos la sentencia: String consulta= Select.from stmt.executeQuery (consulta); 10 Esto nos devolver una coleccin de filas. EN java tenemos una coleccin (metaclase) especial para guardar las filas de una consulta: ResultSet rs = stmt.executeQuery (consulta); INDRA | Programacin java II

Supongamos que la consulta nos va a devolver un nmero enorme de resultadosentonces el servidor se quedar frito para ello y JDBC hace lo siguiente: resultSet Jdbc BD

jdbc le dice a la BD que le devuelva un nmero adecuado de filas y esas son las que mete en el resultSet, entonces cuando vayamos recorriendo este resultSet las primeras N filas nos las devuelve del servidor de cliente y cuando se vayan acabando ir a la BD a buscar la otras N filas, de este modo nos aseguramos que se pueden obtener todas las filas sin dejar colgado el servidor. Lgicamente durante todo este proceso la conexin con la BD debe estar abierta, en cuanto se cierre el resultSet se invalida. La relacin entre los objetos es jerrquica: Connection puede tener cualquier nmero de St abiertos Statement puede tener cualquier nmero de rs abiertos resultSet De forma que si cierro al padre de cualquiera de ellos invalidar al que est por debajo. Entonces para abrir las connection, Sattement o resultSet, lo har de arriba abajo y para cerrarlos de abajo a arriba. Nota: Se deben crear siempre para programar bien el nmero mnimo de conexiones necesarias. Para recorrer el rs utilizaramos por ejemplo un bucle while, cuya sintaxis ser: While (rs.next()) se ejecutar mientras haya filas que devolver. Las columnas se numeran de izquierda a derecha de forma consecutiva comenzando por 1. Tambin se pueden recuperar indicando el nombre de la columna. OJO algunos drivers no me permiten acceder por parmetro posicional para obtener los valores Los pasos imprportantesson: 1. 2. 3. 4. 11 Documentacin para esto: http://java.sun.com/javase/6/docs/technotes/guides/jdbc/getstart/GettingStartedTOC.fm.ht ml INDRA | Programacin java II Se debe llamar al mtodo next() Acceder por parmetro posicional para obtener los valores No leer ms de dos veces cada lnea 4..cual es??

EJERCICIO: La clase se llama Ejercicio_2

Sentencias preparadas [ver 3.4]

ACADEMIA

El ejercicio es : ejemplo 3.1

12

INDRA | Programacin java II

Mircoles 16 Junio
Procedimientos almacenados [Ver 3.5] Para la ejecucin en remoto de un procedimiento almacenado. Debo definirme una variable de tipo:
CallableStatement cstmt = con.prepareCall ({call ProcAlmacenado (?,?,?, , ?)});

Donde procAlmacenado es el nombre del procedimiento almacenado que exista en la base de datos. OJO HAY UN ERRRO EN LA SINTAXIS DE LOS APUNTES, LA CORRECTA LA INDICO AQU. La sintaxis correcta para llamar a PROC y a FUNC es: Para PROC: {call f(?,?)} Para FUNC: {? = call CrearPersona(?,?)} Si el PROC tiene parmetros hay que definirlos. En BD tenemos para los PROC tres tipos de parmetros: IN el servidor solo puede leer, no escribir el parmetro OUT el servidor solo puede escribir, no leer el parmetro IN/OUT el servidor puede leer y escribir el parmetro

Cuando un parmetro es de salida hay que decrselo a java y esto se hace mediante la el mtodo:
Para PROC: cstmt.registerOutParameter (Types.INTEGER); Para FUNC: cstmt.registerOutParameter (1, Types.INTEGER);

en el que se indica el parmetro que es de salida y el tipo de datos al que pertenece el parmetro de salida. A continuacin se dan valor a los parmetros al igual que ocn las sentencias predefinidas con los mtodos ser. Y finalmente se ejecutar el procedimiento teniendo en cuenta que si el PROC almacenado ejecuta a una sentencia o select se llamar al mtodo cstmt.executeUpdate(); y si no es una sentencia o select se utilizar: cstmt.executeQuery(); Ejemplo: 13
CallableStatement cstmt = con.prepareCall (? = call CrearPersona (?,?)); cstmt.registerOutParameter (1, Types.INTEGER); cstmt.setInt (2, 13456789); cstmt.setString (3, Bart);

INDRA | Programacin java II

cstmt.execute(); int n = cstmt.getInt(1);

OBSERVACIN: Con la BD de ApacheDerby todo esto no funciona, es decir, no se pueden manejar de este modo los PROC ni FUNC El mtodo: Execute(); se utiliza para ejecutar procedimientos mixtos, es decir, si en el PROC almacenado existen sentencias select peor tbn tiene otras instrcciones insert, update, delete entonces debemos usar este mtodo y no el executeQuery o executeUpdate.

Ejercicio: abrimos el proyecto UsoJdbcMySql que est en la careta de apuntes del profesor del lunes 14 de Junio. Recordemos que como vamos a utilizar la base de datos MYSQL, con lo que deben esar instalados los drivers de MySQL en el path de la mquina. Este ejemplo nos da la sintaxis para crear un modelo de datos a travs de un programa java. No es lo ms til peor si nos da una herramienta o una ayuda por si alguna vez y por temas de portabilidad nos interesa crear as el modelo. Tansaciones [ver 3.7] El objetivo de una transacione es agrupar un conjunto de sentencias SQl en un mismo paraguas, es decir, que en el momento que una de ellas falle se desharn todas las acciones realizadas hasta entonces en la BD. Si todas las sentencias han ido bien se realiza un commit(); y si falla se hace un rollback();. Jdbc cada vez que se lanza una sentencia con xito hace automticamente un commit(),pero hay que indicarle que lo haga. Para ello usamos el mtodo: con.setAutoCommit (false); False las transacciones sern controladas manualmente por el programador. En este caso tras la realizacin de la ssentencias de debe llamar adems la mtodo con.commit(); True las transacciones las hace automticamente jdbc.

Ej:

14

Try{ Con.setautoCommit(false); //toma el control el programador S1---S2----S3---INDRA | Programacin java II

Con.commit(); // todo ha ido bien }catch (SQLException e){ Con.rollback(); //algo ha fallado }finally{ //el cdigo dentro de un finally se ejecuta siempre salten o no excepciones Con.setAutocommit(true); //toma el control jdbc } Un nivel de aislamiento o de transaccin bloquea procesos sobre una sentencia hasta que la transaccin correspondiente haya terminado. Hay varios niveles de aislamientos, que se consultan en la APIs de java mejor.

Optimizaciones y otras mejoras


[ver 5] Existen varias optimizaciones para la marcha de las aplicaciones: 1.- Sentencias preparadas que ya las conocemos 2.- Uso de PROC almacenados Vamos a ver otras que se han comentado de pasada y ahora detallaremos.

Porcentaje de carga:
[ver 5.1] setFechtSize() permite cambiar le procentaje de carga a nivel de resultSet o a nivel de Statement (en este caso todos los resulSet herdarn estas porcentaje de carga) getFechtSize() nos dice el porcentaje de carga del que disponemos.

Se aconseja que el porcentaje de carga no se modifique, hasta que no sepamos a quin se la debemos aplicar, es decir, saber de en que gasta el tiempo la aplicacin y que hacen los usuarios finales con la aplicacin.

Actualizaciones en modo bach


[ver 5.2] Lo que se har es minimizar el trfico cliente-servidor d elas aplicaciones. Se tiene el mtodo addBatch(), cuando se lanzan sentencias teniendo un addBatch() jdbc no enva la sentencia a BD sino que las guarda en un cajn hasta que encuentra el mtodo executeBatch() que lanzar todas las sentencias en un mismo round, de una vez todas juntas y no con un round por cada sentencia.

15

INDRA | Programacin java II

As en vez de tener N rounds tendr 1 round con todas las sentencias, con lo que habremos disminuido sustancialmente el trfico. Este modo no aumenta la carga en el servido en ningn caso, por lo que no se conocen efectos negativos.

Nuevos tipos de resultSet


[ver 5.3] Con los nuevos tipo de result set podemos hacer: Recorrerlo en ambos sentidos Movimiento absoluto: xEj:vete a la fila 14 Movimiento relativo: xEj: desde donde estas sube 5 filas, -5, y luego baja 14 filas, +14 Insertar/borra/actualizar filas desde dentro del rs: xEj: si me encuentro el valor 2 en el rs insertar una nueva fila en la tabla MiTabla..

Para crearlos: Statement st = con.createStatement(parametro1,prametro2) A tener en cuenta: 1. Cuanto ms nuevo sea un rs ms lento ser. Todo lo que se haga con los nuevos rs se puede hacer con los rs ms simples de todos que son los que hemos expliacdo estos das atrs, puesto que todo ser ms rpido. 2. La mayora de las operaciones de nuevos rs no las soportan muchas BD. Si el Apartado[6] nos lo deja como ejercicio para nosotros y no lo haremos aqu.

EJERCICIO: Prcticas del epgrafe 8. Estn resueltas en el paquete UsoJdbcMySql que est en la careta de apuntes del profesor del lunes 14 de Junio. Vamos a revisar el cdigo

16

INDRA | Programacin java II

Jueves 17 Junio
No asist a clase . Se tocaron temas de persistencia *Ver + Comenzaron con JPA (Java persistence api)

17

INDRA | Programacin java II

Lunes 21 Junio
Continuacin del Jueves JPA

EntityManager
Se crea un EntityManager por cada conexin a una base de datos que desee. Intentar usar un nico EntityManager por cada mtodo. Despus abrir una transaccin de forma obligatoria. Ver ejemplo Mircoles 16 Junio del proyecto JpaUnaClase0000 la clase Principal. EL mtodo merge(): //Nota: la llamada al mtodo merge es innecesaria Se usa para actualizar versiones. Pero no es necesario pues cuando se opera con un objeto de tipo EntityManager al hacer el commit() se actualiza de forma automtica todas las versiones. El EntityManager debe estar abierto y debe conocer los objetos. Sin embargo si le hago persistente al hacer el el commit() los actualizar de forma automtica. Si utilizase ms de un entityManager y lo cierro cuando no lo utilice todas las actualizaciones se harn de forma automtica. Si utilizase uno al pripio d elcdgio que siempre sestuviese abierto tendri que controlar su crecimiento a travs d elos mtodos: Flush: har una actualizacin de tofo clear: Borrar el cach de la BD

Por eso se aconseja utilizar solo uno. Para crear un objeto EntityManager debo llamar al Mtodo CreateEntityManager.

Creaccin de las clases URM en un proyecto con un modelo de datos existente


Si en un proyecto ya existe un modelo de Datos pero no existen las clases. Ver ejemplo: JavaApplication23

18

INDRA | Programacin java II

Creo una clase nueva para nosotros: JavaApplication23

Botn derecho para hacer ingeniera Inversa. Y selecciono opcin: Entity Classes for database

19

INDRA | Programacin java II

Aado la tabla PERSONA sobre la que haremos IngenieriaInversa:

Este check tiene que estar marcado, porque si hay relaciones entre muchas tablas al hacer ingenieria inversa habr que hacer a mano muchas cosas para dejarlo bien. La ingeniera inversa por tanto con tablas aisladas o tablas relacionadas de 1 a n, si trabajan bien.

Al llegar a la pantalla:

20

INDRA | Programacin java II

Nos informa queno hay unidad de persistencia y nos indica si queremos que la herramienta nos ayude, para ello pulsamos el botn: Create persistence unit Sleccionamos como proveedor a Hibernate:

21

INDRA | Programacin java II

Lo aceptamos y seguimos el proceso llegando a esta pantalla, en la que marcamos los checks.

Nos crea en la carpeta META-INF el xml de persistence. (Que explicaron el jueves) y nos crea el cdigo de java de las clase correspondiente a la tabla de la BD. Que justo es d elo que se trataba la Ingeniera Inversa.

Queryes con nombre. Anotaciones


[ver clase Personadel proyecto nuevo creado: JavaApplication23] @Temporal: @Lob: LargeObject @NamedQuery (name= Persona.findByNombre, query = SELECT P FROM PERSONA P)

PRACTICA: montra un proyecto que tenga persistencia Ver Ejemplo mircoles 16 : JpaUnaClase0002

22

INDRA | Programacin java II

Martes 22 Junio
Patrones de diseo. DAO
Si el cdigo esta bajo JPA y cambiamos a hibrnate el cdigo puede ser que no compile.. Para resolver esto existen los Design Pattens o patrones de diseo. Los patrones de diseo, es una estrategia que se sabe que va a funcionar para resolver un escenario determinado, es decir, una solucin estndar que se sabe por anticipado que va a funcionar para un escenario problemtico determinado. Pero ojo no tiene por qu ser la solucin ptima. Los patrones de diseo ms utilizados en la tecnologa java son los GoF (Gangs of four). Nota Si queremos informacin sobre esto solicitarla al profe por el foro Nota: Recapitulando lo visto hasta hoy en curso tendremos la estructura: Jpa > ORM > Jdbc > BD. El patrn de diseo ms simple que hay es el DAO (objeto de acceso a datos). Cliente (cliente ) DAO (interface que ve el cliente) JpaDaO (implementacin de la interface DAO) Si el da d emaana quiero utilizar Hibernate en vez de JPA bastar implementar una nueva interface en hibrnate y para el cliente ser totalmente trasparente. Y lo mismo si nuevamente quisiera vambiar de tecnologa y utilizar otra como por ejemplo Jdbc t tendra que implementar jdbcDAO. Ejemplo: JpaUnaClase0002 El patrn DAO nos sirve para enumerar todos los mtodos de una clase persistente de una sola atacada en el ejemplo ser la clase PersonaDAO. Esta interface es publica peor su implementacin no lo ser. Luego tendremos que tener una clase que nos implemente el DAO. En el ejemplo es la clase PersonaDAOImple. En el ejemplo el main est en un paquete distinto a en el que est la implementacin del DAO, para que se puedan utilizar se ha creado otro patrn de diseo llamado Singleton, y que en el ejemplo es la clase: PersonaManager. En el escenario siguiente: 23 Solo una instancia de una clase: para o cual se llama Que sea instanciada desde cualquier sitio: para ello el constructor se define como privado y los atributos se define como privado y esttico

INDRA | Programacin java II

Es donde se suele utilizar justamente este patrn de diseo llamado singleton.

El mtodo getInstance() es el que nos asegura que nicamente se va a instanciar el Personamanager una nica vez puesto que el if del cdigo tras haberlo instanciado mas de una vez siempre nos devolver el mismo objeto. Si ahora quiero trabajar con los mtodos del DAO, me creo el mtodo getPersonaDao() que nos devolver un objeto de tipo implementacin de la clase PersonaDao. Si quiero cambiar de tecnologa lo que cambiar es justamente este mtodo: En el ejemplo tenemos: public PersonaDao getPersonaDao() { return new PersonaDaoImpl(); } Si quiero usar jdbc har: public PersonaDao getPersonaDao() { return new PersonajdbcImpl(); } Nota: En un escenario real de PROD cuanto menos nos cueste (rpido, fcil y barato) introducir cambios ser un indicador de que la aplicacin est bien programada, tal y como es el objetivo de la programacin orientada a objetos. Ver tambin ejemplo jueves 17 junio : JpaDosClases0001

Persistencia de relaciones entre clases


[Carpeta jueves 17 Junio. Ejemplo: JpaDosClases0001] La relaciones que hay entre clase en java son muy similares a las que hay en UML. Ejemplo: La relacin entre una Persona y su Aficin puede tener distintas relaciones: 1----- 1 ( de una a una): Aficion A; Perosna p; 1 ---- * (de una a muchas): Persona p; List<Aficion> l; 24 *----*(de muchas a muchas) List<Persona> pl ; List<Aficion> la; En JPA esto se representa con las anotaciones:

INDRA | Programacin java II

@OneToOne @ManyToMany @OneToMany @ManyToOne En relaciones de 1 a muchos (1 *) necesitamos que se haga persistencia en objetos declarados en cascada. Podemos mandar a JPA que haga la persistencia en cascada. Una operacin en cascada en JPA significa que cuando se le dice al urm que haga persistencia sobre un objeto tambin lo har sobre todos los objetos que cuelguen de l. En JPA se hace con el comando cascade. Academia (18:00h 19:30h)

25

INDRA | Programacin java II

Mircoles 23 Junio
Ejemplo de persistencia carpeta del jueves 17Junio: EjemplosPersistencia y en la clase EjemplosPersistencia-ejb existen ejemplos de cmo hacer mapeos de relaciones de todos los tipos] Cualquier clase que compile el URM las har persistente, y podr elegir entre tres estrategias distintas para realizarlo: 1) SingleTabe 2) Joined 3) Table per class Vemoslo en un ejemplo:

1)Modelo singleTable: Es el que emplea URM por defecto. Crea una tabla para todas las clases y un campo discriminador que nos dice a que clase pertenece cada lnea A id x y DTYPE 1 8 null A 2 5 3 B @ A X:int id hereda B y:int 2) Joined: crea una tabla por cada clase A id x B id y

FK

3)Table per Clae: crea una tabla por clase en la que repite todos os atributos de cada tabla. A id x id B y x

26

INDRA | Programacin java II

El modelo 1) es el ms feo peor el ms eficiente, por eso es el que URM elige por defecto Por tanto por defetco usa la estrategia 1) peor si quiero que use otra d ela sestrategias hay que indicrselo. El cdigo es: 1 caso Modelo 1 @Inheritance(strategy=InheritanceType.SINGLE_TABLE) 2 caso Modelo 2 @Inheritance(strategy=InheritanceType.JOINED) 3 caso Modelo 3 @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

Ejemplo: EjemploHerencia del da Martes 21.

27

INDRA | Programacin java II

Aplicaciones WEB
Lo que nos interesarn son las : www: World wide web Servidor Cliente Servidor Web

Para comunicar el cliente con la web se necesita un protocolo de comunicacin que para nosotros ser HTTP : Lo que se manda a un servidor web es una request y lo que el servidor responde se llama response Ej: http://www.google.es/index.html

El dominio de una url es lo que identifica un ordenador concreto. Ej: google.es Una direccin IP tiene el formato: 127.0.0.1 y representa al localhost desde el que se realiza la llamada. Cuando se teclea una url lo primero que har explorer es preguntarle al DNS(Servicio de nombre de dominio). ACADEMIA

28

INDRA | Programacin java II

Jueves 24 Junio
[Continuacin de servlets..]

Servlets
Ejemplo Jueves 24 Jnio : WebApplication1 Un servlet es una clase java con unas determinadas caractersticas entre ella que tiene que ser hija de HttServlet. Responde a un patrn de diseo llamado inversin de Control, que como su nombre indica invierte el control ya que es API quien nos llama a nosotros y no nosotros al l. Un servlet en java se representa con un pentgono,

29

INDRA | Programacin java II

Curiosidades
http: protocolo trasferencia de hipertexto www: worl wile web Ley no escrita de la informtica: Todo programa se tira el 90% de su tiempo en el 10% del cdigo. url: Localizador uniforme de resursos ftp: potocolo de transporte de archivos. Otro modo de que dos ordenadores intercambien informacin. TCP/IP: protocolo de transporte / protocolo de internet

30

INDRA | Programacin java II

También podría gustarte