Desarrolle una aplicación nueva que invoque la interfaz REST.

Antes de empezar

Habilite la aplicación del sistema.

Acerca de esta tarea

Paso 2 hacia el objetivo: Compartir datos entre dos sesiones con las API REST

Procedimiento

Desarrolle una aplicación nueva que invoque la interfaz REST. Para simplificar la creación de código para interactuar con la API REST, se puede ejecutar JAXB en el esquema para generar automáticamente clases que representen la solicitud REST, la respuesta y otras clases relacionadas.

Ejemplo

Para ver un ejemplo, puede instalar la aplicación de ejemplo PlantsByWebSphere Ajax Edition for CEA (PlantsByWebSphereAjax). Con esta aplicación de ejemplo, puede instalar, ver y utilizar los widgets CEA para ver cómo funcionan realmente en una aplicación en línea. Para obtener más información acerca de la aplicación de ejemplo, consulte la documentación de soporte que se proporciona en el directorio PlantsByWebSphere del paquete de ejemplos de CEA, que puede descargar de la página WebSphere® Application Server Ejemplos. Además, lea acerca de cómo configurar y utilizar los ejemplos de aplicaciones habilitados para comunicaciones.

package sample.code;

import java.util.Date; 
import com.ibm.ws.commsvc.servlet.jaxb.*;

public class SampleCode {

	public static final String rootUrl = "http://localhost:9080/CommServlet/";
	
	public void runSample() {
		String url = null;
		HttpRequest httpRequest = null;
		CommRestResponse callerResponse = null;
		CommRestResponse calleeResponse = null;
		CommRestRequest restRequest = null;

		try {
			// Habilitar colaboración para llamante.
			url = rootUrl + "collaborationSession";
	  		httpRequest = new HttpRequest("PUT", url, null);
			callerResponse = httpRequest.send();
	
			// Iniciar colaboración desde receptor de llamada usando URI de igual
			url = rootUrl + callerResponse.getForPeerCollaborationUri();
	   		httpRequest = new HttpRequest("GET", url, null);
			calleeResponse = httpRequest.send();
	
			// Esperar a que se establezca la colaboración
			waitForCollaborationEstablishment(calleeResponse.getCollaborationServiceUri());
			waitForCollaborationEstablishment(callerResponse.getCollaborationServiceUri());
	   		
	   		// Enviar datos desde receptor a llamante
			url = rootUrl + calleeResponse.getEventUri();
			restRequest = new CommRestRequest();
			restRequest.setCollaborationData("test message");
			httpRequest = new HttpRequest("POST", url, restRequest);
			calleeResponse = httpRequest.send();
	
			// Capturar datos en el llamante.
			calleeResponse = waitForDataEvent(callerResponse.getEventUri());
			if (calleeResponse.getEventList().getEvents().get(0).getData().equals("test message"))
				System.out.println("Successfully exchanged collaboration data.");
	
			// Finalizar colaboración desde llamante.
			url = rootUrl + callerResponse.getCollaborationServiceUri();
	    	httpRequest = new HttpRequest("DELETE", url, null);
	    	callerResponse = httpRequest.send();
		} catch (Exception e) {
			System.out.println("Error occurred: " + e);
		}
	}

	// Método de programa de utilidad que espera un suceso de colaboración establecida.
	public boolean waitForCollaborationEstablishment (String uriExtension) {
    	String url = null;
		HttpRequest request = null;
		CommRestResponse response = null;
		boolean success = false;

		long startTime = System.currentTimeMillis();		
		while ((success == false) && ((System.currentTimeMillis() - startTime) < 10000)) {
			try {				
	    		url = rootUrl + uriExtension;
	    		request = new HttpRequest("GET", url, null);
	    		response = request.send();
				success = response.getCollaborationStatus().equals("ESTABLISHED");
	    		if (success == false)
	    			Thread.sleep(250);
			} catch (Exception e) {
				break;
			}
		}
		return success;
	}

	// Obtener un suceso sin especificar nada adicional en la solicitud.
	public CommRestResponse waitForDataEvent(String eventUri) throws Exception {
		EventList eventList = null;
		Event event = null;
		boolean foundEvent = false;
		CommRestResponse restResponse = null;
		Date startDate = new Date();
		String url = rootUrl + eventUri;
		HttpRequest httpRequest = new HttpRequest("GET", url, null);

		for (int i = 0; i < 5; i++) {
			// Capturar estado de la llamada y determinar si se han devuelto sucesos.
			restResponse = httpRequest.send();
			eventList = restResponse.getEventList();
			if (eventList != null) {
				// Iterar los sucesos buscando un suceso de datos.
				for (int j=0; j<eventList.getEvents().size(); j++) {
					event = eventList.getEvents().get(j);
					if (event.getType() == EventType.DATA_EVENT) {
						foundEvent = true;
						break; // Dividir bucle de sucesos internos.
					}
				}
				if (foundEvent)
					break; // Dividir bucle externo a la espera de sucesos.
			}
			
			Date currentDate = new Date();
			if ((currentDate.getTime() - startDate.getTime()) > 5000)
				break;
			
			Thread.sleep(1000);
		}
		return restResponse;
	}
}

package sample.code;

import java.io.*; 
import java.net.*; 
import javax.xml.bind.*;
import com.ibm.ws.commsvc.servlet.jaxb.*;

public class HttpRequest {
	private String method = null;
	private URL url = null;
	private CommRestRequest restRequest = null;
	private String requestBody = "";
	public static Unmarshaller xmlResponseUnmarshaller = null;
	public static Marshaller xmlRequestMarshaller = null;
	
// Bloque estático para configurar el convertidor y el desordenador XML. 	static {
		try {
			JAXBContext jc = JAXBContext.newInstance((new CommRestResponse()).getClass().getPackage().getName()); 
			xmlResponseUnmarshaller = jc.createUnmarshaller();
			xmlRequestMarshaller = jc.createMarshaller();
		} catch (Exception e) {
			System.out.println("Error setting up XML marshaller or unmarshaller. "+e);
		}
	}

	// Constructor
	public HttpRequest(String inputMethod, String inputUrl, CommRestRequest inputRequest) throws Exception {
		method = inputMethod;
		url = new URL(inputUrl);
		restRequest = inputRequest;
		if (restRequest != null)
			requestBody = marshalRestRequest(restRequest);
	}
	
	// Enviar la solicitud y devolver una respuesta en formato de objeto.
	public CommRestResponse send() throws Exception {
		// Configurar la conexión.
		HttpURLConnection connection = (HttpURLConnection)url.openConnection();
		connection.setRequestMethod(method);
		connection.setUseCaches(false);
		connection.setDoInput(true);
		if (method.equals("POST") || method.equals("PUT")) {
			connection.setRequestProperty("Content-Type", "text/html");
			connection.setDoOutput(true);
			// Enviar la solicitud.
			DataOutputStream out = new DataOutputStream(connection.getOutputStream()); 
			out.writeBytes(requestBody);
			out.flush(); 
			out.close(); 
		} else {
			// Debe establecerlo en false para GET (o tomará el valor predeterminado de POST) y DELETE.
			connection.setDoOutput(false);			
		}
		// Leer la respuesta.
		BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		String response = new String();
		String line = reader.readLine(); 
		while(null != line) {
		    response += line;
		    line = reader.readLine(); 
		}
		reader.close();
		// Convertir la respuesta de serie en un formato de objeto.
		return unmarshalRestResponse(response);
	}

	// Organizar el objeto CommRestRequest en texto con formato XML.
	public static synchronized String marshalRestRequest(CommRestRequest request) throws Exception {
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		xmlRequestMarshaller.marshal(request, outputStream);
		return outputStream.toString();
	}

	// Desorganizar el texto XML en un objeto CommRestResponse.
	private static synchronized CommRestResponse unmarshalRestResponse(String text) throws JAXBException {
		return (CommRestResponse)xmlResponseUnmarshaller.unmarshal(new ByteArrayInputStream(text.getBytes()));
	}
}

Qué hacer a continuación

Instale e inicie la nueva aplicación.
Tema de tarea    

Términos y condiciones para centros de información | Comentarios

Última actualización: October 28, 2014 12:38 AM EDT
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-nd-mp&topic=tcea_enable_cobrowsing_step2
Nombre de archivo: tcea_enable_cobrowsing_step2.html