Dossier Solfin Kapital

Bloque docente: SERVICIOS WEB
Desarrollo de Sistemas Software
Basados en Servicios y Componentes
Bloque Docente
SERVICIOS WEB – Parte 2
Máster en Ingeniería Informática
Portada
Escuela Superior de Ingeniería (ESI)
Universidad de Almería
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Índice
• Visualización WSDL (servicios web SOAP) y WADL
(servicios web REST)
– Validación y comparación
• Clientes de servicios web
– SOAP, REST
• EJB (Enterprise Java Beans)
–
–
–
–
–
2
Tipos
Uso
Construcción
Servicios web
JNDI
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
3
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
4
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
5
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
6
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
7
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
8
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WSDL (servicio web SOAP)
9
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WSDL
10
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WSDL
https://www.wsdl-analyzer.com/
11
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WSDL
12
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WSDL
13
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WSDL – Comparación
14
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WADL (servicio web REST)
15
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Visualización WADL (servicio web REST)
16
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WADL
W3C XML Schema Validator – http://www.utilities-online.info/xsdvalidation/
WADL XML Schema – http://www.w3.org/Submission/wadl/wadl.xsd
17
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WADL
Error sintáctico del XML
18
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Validación de WADL
Error sintáctico del XML según la
definición del XMLSchema
19
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Web Services Explorer
Menú contextual
sobre un descriptor
WSDL
20
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java
Creamos un nuevo proyecto
“Dynamic Web Project”
Creamos una página web
(index.html) que llame a
diferentes servlets para la
ejecución de los servicios web
Añadimos las librerías
correspondientes para la
correcta ejecución del cliente
21
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java
<servlet>
<servlet-name>TestWebServiceSOAP</servlet-name>
<servlet-class>com.example.TestWebServiceSOAP</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestWebServiceSOAP</servlet-name>
<url-pattern>/TestWebServiceSOAP</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>TestWebServiceREST</servlet-name>
<servlet-class>com.example.TestWebServiceREST</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestWebServiceREST</servlet-name>
<url-pattern>/TestWebServiceREST</url-pattern>
Recordatorio:
</servlet-mapping>
añadir
la descripción de los
servlets en web.xml
22
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web SOAP)
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new
HttpPost("http://localhost:8083/testProject/helloWorldSOAP");
String strRequest = "<soapenv:Envelope " +
"xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " +
"xmlns:ws='http://ws.testjax/'>" +
"<soapenv:Header/>" +
"<soapenv:Body>"+
"<ws:sayHi>" +
"<arg0>Javi</arg0>" +
"</ws:sayHi>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
...
23
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web SOAP)
...
StringEntity input = new StringEntity(strRequest);
input.setContentType("text/xml");
postRequest.setEntity(input);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpClient.execute(postRequest,
responseHandler);
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println(responseBody);
}
24
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web SOAP)
25
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web SOAP)
26
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web SOAP)
http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.2.5
http://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.2.5
27
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web REST)
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8083/testJAX/books");
Form formData = new Form();
formData.param("id", "idtest");
formData.param("author", "authortest");
formData.param("title", "titletest");
formData.param("genre", "genretest");
formData.param("price", "pricetest");
formData.param("publish_date", "datetest");
formData.param("description", "descriptiontest");
...
28
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web REST)
...
String responseBody = target.request(MediaType.TEXT_HTML)
.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED),
String.class);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(responseBody);
}
29
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web REST)
(servicio web REST correspondiente a la
implementación anterior)
30
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Clientes para uso de Servicios Web
Java (servicios web REST)
31
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
32
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB
• Enterprise Java Beans
• Componentes Software (Java)
• Se ejecutan dentro de un contenedor
• El contenedor se encuentra dentro de un servidor de
aplicaciones
• Implementan la lógica de negocio de una aplicación
• Son reusables / reutilizables
• Pueden ser “adaptados” y configurados en el despliegue
33
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB
• Propiedades del contenedor de EJBs:
– Control del ciclo de vida de los componentes
– Gestión de la persistencia
– Servicio de nombres
– Mensajería asíncrona
– Gestión de la seguridad en el acceso
– Gestión de transacciones
– Balanceo de carga
34
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB
35
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB
36
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB
• Clientes (uso) de los EJBs:
– Aplicaciones o servlets
– El contenedor permite el control del acceso de los clientes
– JNDI (Java Naming and Directory Interface) es el proceso
habitual para el acceso a los componentes EJB
– RMI (Remote Method Invocation) puede ser utilizado para el
acceso a los componentes EJB
37
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De sesión
• Dirigidos por mensajes
• De entidad (Entity Bean)
38
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De sesión:
– Gestión de la lógica de negocio
– Singleton: se crea una sola instancia del componente que es
compartida por todos los clientes de la aplicación
– Stateless: no mantiene el estado entre diferentes invocaciones
realizadas al componente
– Stateful: guardan el estado entre invocaciones realizadas desde
un mismo cliente
39
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De sesión:
– Singleton
40
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De sesión:
– Stateless
41
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De sesión:
– Stateful
42
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• Dirigidos por mensajes:
– Se encarga de representar “escuchadores” (listeners) para un
mensaje definido de forma concreta
– No mantiene el estado entre diferentes invocaciones al
componente software
43
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Tipos
• De entidad (Entity Bean):
– Representar datos almacenados en un BD
– Se recomienda usar JPA (Java Persistence API)
44
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Uso
• Primer paso: construcción de la interfaz
• Segundo paso: construcción del EJB que implementa la
interfaz anterior
• Tercer paso: hacer uso del EJB desde un cliente, de
forma general, a través de JNDI
45
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Uso
• Primer paso: construcción de la interfaz
public interface FirstBeanInterface{
public String sayHi(String name);
}
46
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Uso
• Segundo paso: construcción del EJB que implementa la
interfaz anterior
@Stateless
public class FirstBean implements FirstBeanInterface{
public String sayHi(String name) {
return "Hello " + name;
}
}
47
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Uso
• Tercer paso: hacer uso del EJB desde un cliente, de
forma general, a través de JNDI
public class EJBClient{
private static final String JNDI_BEAN = ...
public static void main(String[] args) throws NamingException {
Context context = new InitialContext();
FirstBeanInterface bean = (FirstBeanInterface)
context.lookup(JNDI_BEAN);
String response = bean.sayHi("Example name");
System.out.println(respuesta);
}
}
48
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Construcción
• Anotaciones en el código o archivos de configuración
para la descripción del despliegue (beans.xml)
• Librerías necesarias (añadir como dependencias en el
pom.xml):
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
http://docs.oracle.com/javaee/6/tutorial/doc/bnblr.html
49
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Construcción (Singleton)
@Startup
@Singleton
@Lock(LockType.READ)
public class SharedSingletonBean {
private String status;
@PostConstruct
void init {
status = "Ready";
}
public String getStatus() {
return status;
}
@Lock(LockType.WRITE)
public void setStatus(String newStatus) {
status = newStatus;
}
}
50
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Construcción (Stateless)
@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
}
51
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – Construcción (Stateful)
@Stateful
@Local(RemoteCounter.class)
public class CounterBean implements RemoteCounter {
private int count = 0;
@Override
public void increment() {
this.count++;
}
@Override
public void decrement() {
this.count--;
}
@Override
public int getCount() {
return this.count;
}
}
52
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB y Servicios Web
@Stateless
@WebService
public class HelloServiceBean {
private String message = "Hello, ";
public void HelloServiceBean() {}
Es posible hacerlo así, pero
vamos a evitar este solape y
separar los componentes
software de los servicios web
que los invocan
@WebMethod
public String sayHello(String name) {
return message + name + ".";
}
}
53
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB y Servicios Web
@WebService(endpointInterface = "testjax.ws.HelloWorld")
public class HelloWorldSOAPImpl implements HelloWorld {
public String sayHi(String text) {
int count = -1;
try {
InitialContext context = new InitialContext();
CounterBean cb = (CounterBean)
context.lookup("java:app/testProject/CounterBean");
count = cb.getHits();
} catch (NamingException e) {
e.printStackTrace();
}
Página web
Servlet
Web Service
return "Hello " + text + "(count = " + count + ")";
}
}
54
EJB
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB y Servicios Web
55
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – JNDI
• java:global[/application name]/module name/enterprise
bean name[/interface name]
– Si la aplicación o los componentes residen en una servidor
remoto
• java:module/enterprise bean name/[interface name]
– Para obtener componentes que están dentro del mismo módulo
• java:app[/module name]/enterprise bean
name[/interface name]
– Para obtener componentes que se encuentran dentro de la
misma aplicación
56
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
EJB – JNDI
INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor]
(MSC service thread 1-1) JNDI bindings for session bean named CounterBean in deployment
unit deployment "testProject.war" are as follows:
java:global/testProject/CounterBean!ejb.CounterBean
java:app/testProject/CounterBean!ejb.CounterBean
java:module/CounterBean!ejb.CounterBean
java:global/testProject/CounterBean
java:app/testProject/CounterBean
java:module/CounterBean
context.lookup("java:app/testProject/CounterBean");
57
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Material adicional
• Ejemplo de invocación de EJBs remotos
https://docs.jboss.org/author/display/AS71/EJB+invocations
+from+a+remote+client+using+JNDI
• Documentación EJBs
http://docs.oracle.com/javaee/6/tutorial/doc/bnblr.html
58
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática
Bloque docente: SERVICIOS WEB
Contraportada
59
Desarrollo de Sistemas Software Basado en Servicios y Componentes
Máster en Ingeniería Informática