Es una practica habitual hacer uso de un adaptador de este tipo. En la mayoria de proyectos y escenarios del mundo real es comun la necesidad de dejar un archivo (cualquiera sea) en una ruta especifica dentro de un servidor FTP.
En este articulo se pretende resolver varios de los conceptos para aprovechar y así tenerlos más claros para poder entender un poco la logica que hay detrás de todo esto.
Por ende, si eres uno de esos desarrolladores en busqueda de algo sencillo y practico... este articulo es para ti!.
Prerrequisitos
En primer lugar es importante asegurarse de que ningún firewall esta bloqueando las conexiones y/o tráfico entre el servidor WebLogic y el servidor FTP (puntualmente el puerto SFTP que por defecto es el número 22).
El articulo se dividirá en dos partes, la primera en donde se configurarán los parametros de conexión sobre el servidor WebLogic, y la segunda en donde se desarrollará un composite SOA para mandar el archivo y hacer uso del adaptador FTP.
Configuración SFTP
Agregar una configuración de salida (outbound) para el Adaptador FTP.
1)_ Logearse en la consola de WebLogic como administador (usualmente con el usuario "weblogic"):
2)_ Hacer clic en "Deployments" en el panel izquierdo:
3)_ Buscar en la lista de despliegues el item "FtpAdapter" (navegar por las paginas si es necesario haciendo clic en "Next") y hacer clic en él.
Sugerencia: se puede personalizar la tabla para mostrar mas resultados por pagina, para esto hacer clic en: Customize this table > Number of rows: 1000 > Apply)
(el nombre es un link)
4)_ Seleccionar la pestaña “Configuration” y su sub-pestaña “Outbound Connection Pools”:
5)_ Hacer clic en el botón "New" y crear un nuevo eis JNDI:
6)_ Seleccionar la unica opción disponible "javax.resource.cci.ConnectionFactory" y hacer clic en "Next":
7)_ Escribir un nombre del tipo "eis/Ftp/Nombre" para el JNDI y hacer clic en "Finish": (para el ejemplo se usará "eis/Ftp/Test", es importante ser preciso con las mayusculas y minusculas, debe estar tal cual aparece en la siguiente figura)
9)_ Seleccionar el item "eis/Ftp/Test":
10)_ Configurar las propiedades:
• Host: IP del Servidor FTP
• Port: Puerto del Servidor FTP (generalmente 22)
• Username: Usuario del Servidor FTP
• Password: Password del Usuario del Servidor FTP
• ServerType: Tipo de Servidor FTP
• UseSftp: true (si usamos SFTP) o false (si solo usamos FTP)
(clic en "Save" para guardar los cambios)
11)_ El componente "FtpAdapter" debe ser redeployado con las nuevas configuraciones, para ello, desde la lista de despliegues (en "Deployments") seleccionarlo y hacer clic en el botón "Update" arriba o abajo de todo:
12)_ Aceptar la opción ya seleccionada "Redeploy this application using the following deployment files" y hacer clic en "Finish"
Desarrollando el Composite SOA
Es hora de desarrollar el composite SOA y hacer uso del adaptador FTP.
1)_ Crear una nueva aplicación SOA usando JDeveloper Studio, llamarla "FtpApp".
2)_ Crear un nuevo proyecto SOA y llamarlo "TestFTP":
3)_ Seleccionar "Composite With BPEL Process" y hacer clic en "Finish":
4)_ Configurar el componente BPEL y el cliente de manera sincrónica como muestra la siguiente figura:
5)_ En nuestro composite.xml Arrastrar y soltar un componente FTP al carril de Referencias desde la paleta de Componentes como muestra la siguiente figura:
6)_ Darle un nombre al Adaptador FTP, por ejemplo, "putFileOnServer":
7)_ Seleccionar la opción "Define from operation and schema (specified later)" y hacer clic en "Next >":
8)_ Escribir el nombre del eis JNDI configurado anteriormente (para el ejemplo, se habia elegido "eis/Ftp/Test"), ver la siguiente figura:
9)_ Elegir las opciones "Binary" y "Put File" y hacer clic en "Next >" para continuar:
Un apartado: Las diferencias entre "Ascii" y "Binary" es que con Ascii se transfiere el contenido de un archivo (sea un XML, CSV, TXT, etc.) en cambio con Binary se transfiere el archivo binario (el archivo en sí) es decir, un archivo ZIP, RAR, DOCX, PDF, etc. Ya que no importa que contenido tenga.
10)_ Configurar la ruta (path) donde se dejarán los archivos dentro del Servidor FTP y el nombre que tendrá cada archivo. Luego hacer clic en "Next >"
Para este caso, se transferirán archivos ZIP, y para el ejemplo, se ha usado la siguiente configuración:
Aclaración: la ruta (physical path) es la ruta completa donde se dejaran o depositaran los archivos... Para el caso de los nombres que tendrán los archivos (File Naming Convention) se usa ese nombre que indica que todos los archivos comenzarán con el nombre "archivo_" seguido de la fecha en la que se esté procesando en formato AÑOMESDIA (yyyyMMdd) seguido de un número secuencial que se irá incrementando de a 1 por cada archivo, más el tipo de archivo (zip en este caso). Quedando un nombre como este: archivo_20170622_1.zip
11)_ Marcar la opción "Native format translation is not required (Schema is Opaque)" y hacer clic en "Next >":
Nota: usar el formato Nativo (Schema is Opaque) quiere decir que se usará un contenido opaco, es decir, en formato Base64. De ahora en más esta asociación debe tenerse siempre presente (Base64 <=> Opaque). Esto habilita a que si al adaptador FTP recibe el contenido de un archivo en formato Base64, el adaptador podra procesar esa información.
12)_ Hacer clic en "Finish" para finalizar con la creación del adaptador FTP.
13)_ Conectar el componente BPEL con el adaptador FTP uniéndolos con un cable (wire):
14)_ Arrastrar y soltar una actividad Invoke entre medio de las actividades receiveInput y replyOutput dentro del componente BPEL, conectar la actividad Invoke con el adaptador FTP y cear su variable de entrada (Input):
15)_ Arrastrar y soltar una actividad Assign arriba de la actividad Invoke y renombrarlo:
Asignar (Mapear) la entrada "inputVariable" a la variable de entrada del adaptador FTP en la actividad Assign:
16)_ Deployar y probar (Test) el composite TestFTP desde la consola del Enterprise Manager (EM):
17)_ Comprobar que el archivo se depositó correctamente en el servidor FTP, para ello, con WinSCP (o similar como FileZilla, etc.) loguearse en el servidor FTP y dirigirse a la ruta (path) que se configuró en el adaptador:
Es posible hacer esto mismo con un Service Bus Project en vez de un SOA Project?
ResponderEliminarPor supuesto que si, el proceso es el mismo... si tienes inconvenientes comentanos y trataremos de ayudarte. Saludos!
EliminarHola... tienes un ejemplo de este proceso usando el Service Bus Project?
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuenos días Juan Pablo,
ResponderEliminarMe podrías contar en cuanto al rendimiento de transferencia de archivos (Binary) cual es el comportamiendo de los servicios en OSB?
No seria mas optimo utilizar otro tipo de servicios para estas transferencias?
Saludos,
Walter Montoya
muchas gracias Juan Pablo, me estoy iniciando en el manejo de esta herramienta y la explicacion de esta practica me resulto de gran ayuda, es muy clara y concisa.
ResponderEliminarExcelente! me alegra mucho que te haya sido de utilidad. Gracias por comentar
Eliminar