Documentos de Académico
Documentos de Profesional
Documentos de Cultura
01 - Java - Ee Explicacion
01 - Java - Ee Explicacion
Empresariales en Java
Agenda
n
Java EE
La capa de presentacin
La capa de negocio
La capa de datos
Discusin
JAVA EE
Aplicaciones Empresariales
n
Beneficios de Java EE
n
n
n
n
n
n
n
Transparencia de la ubicacin
Visin OO de la base de datos
Manejo transaccional
Pools de recursos
Seguridad
Alta disponibilidad
Portabilidad
Contenedores Java EE
n
Web Container
EJB Container
Servidores Java EE
Servidor
Proveedor
Tipo
Weblogic Server
comercial
WebSphere
Application Server
IBM
comercial
Tomcat
Apache
libre
JBoss Application
Server
EJB Container, se
integra con Tomcat
GlassFish
libre
JOnAS
OW2 Consortium
libre
Notas
EJB Container, se
integra con Tomcat
Lista de servidores en
http://en.wikipedia.org/wiki/Comparison_of_application_servers
Anlisis de Gartner sobre servidores de aplicaciones:
http://www.gartner.com/technology/reprints.do?
id=1-17GUO5Z&ct=110928&st=sb
8
Servlets
JSP JavaServer Pages
JSF JavaServer Faces
Otras tecnologas: ZK
LA CAPA DE PRESENTACION
La Capa Web
n
10
Servlets
n
11
Servlets
n
n
n
12
WEB-INF/web.xml
<servlet>
<servlet-name>ServletHolaMundo
</servlet-name>
<servlet-class>cl.servlets.ServletHolaMundo
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletHolaMundo
</servlet-name>
<url-pattern>/holamundo
</url-pattern>
</servlet-mapping>
13
Limitaciones de Servlets
n
14
Pgina JSP
Pgina HTML
desplegada
en el browser
15
Pginas JSP
n
Elementos de scripting
n
n
n
n
n
17
Managed
bean
Flujo de
navegacin
(facesconfig.xml)
...
<h:inputText value="#{algoritmoBean.iteraciones}"/>
<h:commandButton value="Calcular" action="#{algoritmoBean.calcular}"/>
public class Algoritmo {
private int iteraciones = 10;
public int getIteraciones() { return iteraciones; }
public int setIteraciones(int n) { iteraciones = n; }
public String calcular() { for (int i=0; i<iteraciones; i++) {}; return "ok"; }
}
evento
outcome
<managed-bean>
<managed-bean-name>algoritmoBean</managed-bean-name>
<managed-bean-class>modelo.algoritmos.Algoritmo</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>algoritmo.jspx</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>home.jspx</to-view-id>
</navigation-case>
</navigation-rule>
18
ZK http://www.zkoss.org
n
19
ZK Spreadsheet Demo
20
LA CAPA DE NEGOCIO
21
22
Tipos de EJB
n
Session Beans
Message-Driven Beans (MDB)
Session Bean
Message-Driven
Bean
Invocacin
Sincrnica
Asincrnica: el cliente
enva un mensaje JMS
a una cola, y el
servidor invoca al MDB
de manera asncrona
para procesar el
mensaje
Interfaz
No requiere, el cliente
no invoca al MDB
23
Session Beans
n
n
n
Stateless (SLSB):
n
n
n
Stateful (SFSB):
n
n
25
Objetos Remotos
n
26
Un Session Bean
n
ServicioFacturas.java
package cl.sii.facturaelectronica;
Interfaz de negocio
La anotacin @Local indica que el bean
soporta acceso local
La anotacin @Remote indica que el bean
soporta acceso remoto
@Local
public interface ServicioFacturas {
boolean valida(Factura factura);
}
ServicioFacturasBean.java
package cl.sii.facturaelectronica;
Clase de implementacin
Las anotaciones @Stateless y @Stateful
indican que se trata de un session bean
@Stateless
public class ServicioFacturasBean implements ServicioFacturas {
@Override
public boolean valida(Factura factura) {
...
}
}
27
Un Cliente Local
n
28
ClienteServicioFacturas.java
...
public class ClienteServicioFacturas {
public void valida(Factura factura) throws NamingException {
// Obtenemos el contexto inicial
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://facturas.sii.cl:7001");
Context context = new InitialContext(properties);
// Obtenemos una referencia a un EJB y lo utilizamos
ServicioFacturasRemote ejb = (ServicioFacturasRemote)
context.lookup("FacturaApp/ServicioFacturas/remote");
if (ejb.valida(factura)) {
...
}
}
}
29
31
Un Cliente JMS
n
32
Un Message-Driven Bean
n
n
Spring (http://www.springsource.com/developer/spring) es un
framework que, entre otras cosas, entrega algunas de las
funcionalidades provistas por EJBs (transacciones, integracin
con JPA, acceso remoto, etc.), sin requerir el uso de ellos
La ventaja de no usar EJB es que se simplifican las pruebas:
Spring se integra de manera natural con JUnit
Spring opera sobre un contenedor de Inversin de Control, que
permite configurar el cableado de componentes Java: los
objetos se conocen entre s mediante interfaces; Spring
instancia los objetos que implementan las interfaces a partir de
la configuracin, y establece las referencias entre objetos
Los objetos manejados por Spring pueden tener los siguientes
scopes:
n
n
n
n
n
Singleton (default)
Prototype (se crea un nuevo objeto cada vez que se solicita uno)
Session
Request
Desktop (en ZK, corresponde a las pginas de un requerimiento)
34
Transacciones
JPA Java Persistence API
LA CAPA DE DATOS
35
Transacciones
n
36
Atributos Transaccionales
Atributo
Descripcin
Required
(default)
RequiresNew
Mandatory
NotSupported
Supports
Never
Especificacin de Atributos
n
38
n
n
39
Transacciones Distribuidas
n
42
Caractersticas JPA
n
n
n
n
n
n
n
43
Entidades
n
n
n
n
n
n
n
n
n
44
Entidades
n
n
n
n
n
@Entity
@Table(name="EMPRESAS")
public class Empresa {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_EMP_G")
@SequenceGenerator(name="SEQ_EMP_G", sequenceName="SEQ_EMP", allocationSize=1)
private long id;
EMPRESAS
ID
RUT
RAZON_SOCIAL
@Column(name="RAZON_SOCIAL")
private String razonSocial;
77.234.556-2
89.188.652-4
Librera Macondo
45
Asociaciones
n
n
1-1: @OneToOne
1-n: @OneToMany
n-1: @ManyToOne
n-n: @ManyToMany
PERSIST
REMOVE
MERGE
REFRESH
ALL
46
Asociacin @ManyToOne
n
RUT
NOMBRE
ID_EMPR
@Entity
@Table(name="EMPLEADOS")
1
9.345.222-4
Carlos Rojas
2
public class Empleado {
8
8.336.235-6
Daniela Merino
2
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_EMPL_G")
@SequenceGenerator(name="SEQ_EMPL_G", sequenceName="SEQ_EMPL", allocationSize=1)
private long id;
private String rut;
private String nombre;
@ManyToOne
@JoinColumn(name="ID_EMPR", referencedColumnName="ID")
private Empresa empresa;
}
47
Asociacin @OneToMany
n
48
Herencia
n
49
Herencia SINGLE_TABLE
@Entity
@Table(name="PERSONA")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TIPO",
discriminatorType=DiscriminatorType.STRING, length=2)
public abstract class Persona {
@Id private long id;
private String rut;
}
@Entity
@DiscriminatorValue(value="PN")
public class PersonaNatural extends Persona {
private String nombre;
}
@Entity
@DiscriminatorValue(value="PJ")
public class PersonaJuridica extends Persona {
@Column(name="RAZON_SOCIAL")
private String razonSocial;
}
50
Herencia JOINED
@Entity
@Table(name="PERSONA")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Persona {
@Id
private long id;
private String rut;
}
@Entity
@Table(name="PERSONA_NATURAL")
public class PersonaNatural extends Persona {
private String nombre;
}
@Entity
@Table(name="PERSONA_JURIDICA")
public class PersonaJuridica extends Persona {
@Column(name="RAZON_SOCIAL")
private String razonSocial;
}
51
Herencia TABLE_PER_CLASS
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Persona {
@Id
private long id;
private String rut;
}
@Entity
@Table(name="PERSONA_NATURAL")
public class PersonaNatural extends Persona {
private String nombre;
}
@Entity
@Table(name="PERSONA_JURIDICA")
public class PersonaJuridica extends Persona {
@Column(name="RAZON_SOCIAL")
private String razonSocial;
}
52
Uso de JPA
n
53
remove()
refresh()
merge()
find()
createQuery()
createNamedQuery()
createNativeQuery()
contains()
flush()
Queries
n
n
n
n
n
n
n
55
Inner joins
n
Outer joins
n
Funciones
n
Agregacin
n
select o from Order o left join o.lineItems li where li.amount > 100
Subselects
n
Delete y update
n
n
56
DISCUSION / PREGUNTAS
57