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
© Copyright 2024 ExpyDoc