ADEP Java Servlet

13
Introducción al uso del API de Livecycle (ADEP) Se puede crear un servlet Java que invoque un proceso de larga o corta duración de Adobe Livecycle. Supongamos por ejemplo, que un proceso Adobe LiveCycle retorna un formulario interactivo (después de procesar otras tareas de negocio, tales como obtener la información de los clientes desde una Base de Datos empresarial, y agregar datos a algunos campos de un formulario). Usando un Servlet Java, se determina la manera de cómo se ingresan los datos en un formulario web. Después de llenar el formulario, se realiza el submit para enviar la data ingresada en el formulario al servlet, donde los datos podrán ser recuperados y procesados. Por ejemplo, los datos pueden ser enviados a otro proceso Adobe LiveCycle. Figura 1: Una aplicación web invoca un proceso LiveCycle y envía los resultados a un navegador web. A continuación, se muestra la manera de cómo crear un Servlet Java, que invoque un proceso de vida corta llamado GetMortgageForm

description

ADEP Java Servlet

Transcript of ADEP Java Servlet

Introduccin al uso del API de Livecycle (ADEP)

Se puede crear un servlet Java que invoque un proceso de larga o corta duracin de Adobe Livecycle.Supongamos por ejemplo, que un proceso Adobe LiveCycle retorna un formulario interactivo (despus de procesar otras tareas de negocio, tales como obtener la informacin de los clientes desde una Base de Datos empresarial, y agregar datos a algunos campos de un formulario). Usando un Servlet Java, se determina la manera de cmo se ingresan los datos en un formulario web. Despus de llenar el formulario, se realiza el submit para enviar la data ingresada en el formulario al servlet, donde los datos podrn ser recuperados y procesados. Por ejemplo, los datos pueden ser enviados a otro proceso Adobe LiveCycle.

Figura 1: Una aplicacin web invoca un proceso LiveCycle y enva los resultados a un navegador web.A continuacin, se muestra la manera de cmo crear un Servlet Java, que invoque un proceso de vida corta llamado GetMortgageForm

Proceso GetMortgageForm(Obtener Hipoteca)

La siguiente imagen muestra el proceso GetMortgageForm

Figura 2: Un proceso LiveCycle que retorna un formulario interactivo.

La siguiente tabla describe los procesos de la figura:

PasoEspaolDescripcin

Retrive Form Name and Customer IdObtener Nombre del Formulario y Id de ClienteEl usuario enva un Id de identificador comn y la operacin a efectuarse. En este caso, supondremos que el usuario solicita una Hipoteca. Los parmetros de entrada de este proceso son un string que especifica el nombre del Formulario (Form Name) y otro string que representa el valor de identificador personalizado (CustId)

Retrieve Customer InformationObtener Informacin del ClienteEl proceso usa el Id de Cliente (CustId) para consultar sobre la Base de Datos y obtener la informacin solicitada, usando una instruccin SQL sobre el JDBC Service. El valor de identificador del cliente actuar como clave primaria.

Populate XML data to merge into FormSe fusiona los datos del cliente en una fuente de datos XML que se utiliza para completar previamente el formulario.

Renders the specified interactive FormEl Servlet Java recibe el formulario (retorna el valor del proceso) y llena el formulario web. El nombre del patrametro de salida es RenderedForm. Este parmetro es una variable de proceso y su tipo de dato es FormResult

Resumen para integrar Servlets:

Para crear un Servlet Java que invoque un proceso LiveCycle (ADEP):1. Crear un nuevo proyecto Web2. Crear la lgica de app Java que represente el servlet Java3. Crear la Pagina Web para la aplicacin.4. Empaquetar la Aplicacin (WAR, EAR).5. Implementar el empaquetado en un servidor J2EE6. Correr la aplicacin.

Se debe crear un proyecto Web en Eclipse.La siguiente lista especifica los archivos JAR que se debe agregar a su proyecto web: adobe-formas-client.jar adobe-LiveCycle-client.jar adobe-UserManager-client.jar adobe-Utilities.jar

Para crear la lgica de aplicacin que invoque un proceso, como en el ejemplo anterior, aquel que se denominaba GetMortgageForm, se utiliza la API de invocacin. En el siguiente cdigo se muestra la sintaxis de invocacin del proceso:publicclass GetForm extends HttpServlet implements Servlet { publicvoid doGet(HttpServletRequest req, HttpServletResponse resp throwsServletException, IOException { doPost(req,resp); } publicvoid doPost(HttpServletRequest req, HttpServletResponse resp throwsServletException, IOException { //Add Invocation API code here to invoke theLiveCycle ES Process }

Por lo general, el cdigo de cliente no debe ir dentro de los mtodos doGEt o doPost de un servlet Java. La mejor opcin, y como buena prctica de programacin, es colocar el cdigo en una clase separada, usando una instancia de la clase dentro de los mtodos doGet o doPost; y llamar a los dems mtodos que estn involucrados. En este caso, por un asunto prctico y para minimizar el ejemplo, el cdigo se coloca en el mtodo doPost solamente.

Cuando se invoca un proceso LiveCycle (ADEP), deben prepararse los valores de entrada que son requeridos por el proceso a consumir. Este paso vria, obviamente, segn el proceso a consumir. Es decir, si el proceso requiere cuatro valores de entrada, debe preparar cuatro valores de entrada en el cdigo, para llamar al proceso. En el ejemplo, el proceso GetMortgageForm requiere dos parmetros de entrada.Cuando se utiliza la API de invocacin Java para llamar/consumir un proceso, debe pasar los valores de entrada requeridos, utilizando un objeto java.util.HashMap. Para cada parmetro que necesite pasar, debe invocar el mtodo put del objeto java.util.HashMap y especificar la combinacin nombre-valor que requiere el proceso. Adems, debe especificar el nombre exacto del parmetro que est asociado al proceso y un valor asociado. Por ejemplo, si el nombre del parmetro de entrada es custId y requiere un valor String, puede crear una variable String para pasarsela al proceso.Para invocar un proceso ES LiveCycle mediante el uso de la API de llamada, proceda a realizar las siguientes tareas:1. Dentro del mtodo doPost del servlet Java, cree un objeto ServiceClientFactory que contenga las propiedades de conexin.2. Cree un objeto ServiceClient utilizando un mtodo constructor y pasarle el objeto ServiceClientFactory. Un objeto ServiceClient permite invocar una operacin de servicio. Se ocupa de tareas tales como la localizacin, el envo y enrutamiento de solicitudes de invocacin3. Crear un objeto java.util.HashMap utilizando un mtodo constructor.4. Invoque mtodo put del objeto java.util.HashMap para cada parmetro de entrada con tal de pasarle al proceso de larga duracin. El proceso GetMortgageForm requiere dos valores de entrada cadena: un valor de identificador del cliente y el nombre del formulario.5. Crear un objeto InvocationRequest que invoque el mtodo createInvocationRequest del objeto ServiceClientFactory y entrguele los siguientes valores:a. Un valor String que especifique el nombre del proceso a invocar. En este caso, especifique GetMortgageForm.b. Un valor String que representa el nombre de la operacin de proceso. Normalmente, el nombre de una operacin de proceso es invoke.c. El objeto java.util.HashMap que contiene los valores de los parmetros que requiere el servicio invocado.d. Un valor boolean que sea true; lo que genera una peticin sncrona (utilizado para invocar una operacin de corta duracin).e. Enviar la solicitud de invocacin a LiveCycle (ADEP) utilizando el mtodo de llamado del objeto ServiceClient y pasando el objeto InvocationRequest. El mtodo de invocacin devuelve un objeto InvocationReponse.f. Recuperar el valor de retorno del proceso mediante la llamada del mtodo getOutputParameter del objeto InvocationReponse y pasarle un valor String que especifica el nombre del parmetro de salida. El nombre del parmetro de salida para el proceso GetMortgageForm es RenderedForm. Esta es una variable de proceso y su tipo de datos es FormsResult. Reparto de valor de retorno del mtodo getOutputParameter a FormResult.g. Crear un objeto com.adobe.idp.Document invocando el mtodo getOutputContent del objeto FormsResult. El objeto FormResult contiene el formulario interactivo devuelto por el proceso.h. Obtener el tipo de contenido del objeto com.adobe.idp.Document invocando su mtodo getContentType.i. Establecer el tipo de contenido del objeto javax.servlet.http.HttpServletResponse invocando su mtodo setContentType y pasndole el tipo de contenido del objeto com.adobe.idp.Document.j. Crear un objeto javax.servlet.ServletOutputStream, el cual se utiliza para escribir la secuencia de datos del formulario para el navegador web cliente, llamando al mtodo getOutputStream del objeto javax.servlet.http.HttpServletResponse.k. Crear un objeto java.io.InputStream invocando mtodo getInputStream del objeto com.adobe.idp.Document.l. Crear una matriz de bytes y asignar el tamao del objeto InputStream. Llamar al mtodo disponible del objeto InputStream para obtener el tamao del objeto InputStream.m. Rellenar la matriz de bytes con el flujo de datos forma invocando mtodo de lectura del objeto InputStream y pasando la matriz de bytes como un argumento.n. Llamar el mtodo de escritura del objeto javax.servlet.ServletOutputStream para enviar el flujo de datos al formulario web. Pase la matriz de bytes con el mtodo de escritura.El siguiente cdigo representa el cdigo de ejemplo que invoca al mtodo GetMortgageForm* * This Java Servlet uses the following JAR files * 1. adobe-forms-client.jar * 2. adobe-livecycle-client.jar * 3. adobe-usermanager-client.jar * 4. adobe-utilities.jar * * These JAR files are located in the following path: * /Adobe/LiveCycle8/LiveCycle_ES_SDK/client-libs * * For complete details about the location of these JAR files, * see "Including LiveCycle ES library files" in * Programming with LiveCycle ES */import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.Properties; import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.adobe.idp.Document;import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;import com.adobe.idp.dsc.clientsdk.ServiceClient;import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;import com.adobe.idp.dsc.InvocationRequest;import com.adobe.idp.dsc.InvocationResponse;import com.adobe.livecycle.formsservice.client.FormsResult; /** * This Java servlet invokes the LiveCycle ES GetMortgageForm short-lived process */ public class GetForm extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; public GetForm() { super(); } protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { doPost(request,response);} protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {try{String custId = null; String formName = null; //Get the values submitted from the web pagecustId = request.getParameter("custID");formName = request.getParameter("formName"); //Set connection properties required to invoke LiveCycle ES Properties connectionProps = new Properties(); connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://localhost:1099"); connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL, ServiceClientFactoryProperties.DSC_EJB_PROTOCOL); connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss"); connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator"); connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password"); //Create a ServiceClientFactory objectServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps); //Create a ServiceClient objectServiceClient myServiceClient = myFactory.getServiceClient(); //Create a Map object to store the parameter valueMap params = new HashMap(); //Populate the Map object with a parameter value //required to invoke the GetMortgageForm processparams.put("formName", formName);params.put("custId", custId); //Create an InvocationRequest objectInvocationRequest esRequest = myFactory.createInvocationRequest("GetMortgageForm",//Specify the LiveCycle ES process name "invoke", //Specify the operation name params, //Specify input values true); //Create a synchronous request //Send the invocation request to the process and //get back an invocation response objectInvocationResponse esResponse = myServiceClient.invoke(esRequest);FormsResult formOut = (FormsResult)esResponse.getOutputParameter("RenderedForm"); //Create a Document object that stores form dataDocument myData = formOut.getOutputContent(); //Get the content type of the response and//set the HttpServletResponse object's content typeString contentType = myData.getContentType(); response.setContentType(contentType); //Create a ServletOutputStream objectServletOutputStream oOutput = response.getOutputStream(); //Create an InputStream objectInputStream inputStream = myData.getInputStream(); //Get the size of the InputStream objectint size = inputStream.available(); //Create and populate a byte array byte[] data = new byte[size];inputStream.read(data); //Write the data stream to the web browser oOutput.write(data); }catch (Exception e) { e.printStackTrace(); }} }

Creando la pgina web

El archivo index.html proporciona un punto de entrada al servlet Java, e invoca al proceso GetMortgageForm. La pgina web contiene un HTML bsico, con dos cuadros de texto y un botn. Los nombres de los cuadros de texto son custID y nomForm. Cuando el usuario hace clic en el botn Enviar, los datos del formulario se publican en el servlet GetForm Java.

El servlet Java captura la data del post de la pagina Web, usando el siguiente Cdigo:

//Get the values submitted from the web pageString custId = request.getParameter("custID");String formName = request.getParameter("formName");

El siguiente cdigo HTML es insertado en el archive index.html el cual fue creado en el setup de generacin del proyecto:

Web Application


Customer Id
Form Name Mortgage Form Car Loan Personnal Loan
submit

Empaquetando la aplicacin

Para hacer un deploy del servlet Java, al momento de invocar el proceso GetMortgageForm, debe empquetar su aplicacin como un archivo WAR o EAR. Asegrese de que los archivos JAR externos que la lgica de negocio de la componente depende, como adobe-LiveCycle-client.jar y adobe-formas-client.jar, tambin se incluyen en el archivo WAR.