Abenzoar’s WebWorld…

Detonar proceso BPEL a traves de un WebService

5 Septiembre 2008 · 21 comentarios

Hola.

He recibido varios comentarios solicitando lo siguiente; Tenemos un proceso bpel y queremos detonarlo desde una interfaz (Una página web) para poder trabajar con los datos y estos datos sean enviados a la consola de BPEL.

Bajo este escenario y después de mucho tiempo de retomar lo de SOA por cuestiones de Trabajo me dia la taea de hacer un pequeño ejemplo explicando laproblemática mencionada. Espero les sea de ayuda.

Pasos a realizar:

Tener un Esquema XML
Generar un proyecto BPEL y relacionarlo con el Esquema
Publicar el proyecto
Obtener el WebService
Crear pagina jsp para consumir el WebService

Ojo: Los esquemas y el proyecto ya los hemos realizado en entradas anteriores. Verificar “Crear proyecto BPEL” para ponernos al día y continuar.

1. Lo primero que hice fue crear mi Esquema XML

Esquema

Esquema

2. Ahora creo un proyecto BPEL sencillo. Agreo un Assign donde le paso los datos tal cual de mi esquema sin hacer modificaciones

Bpel

Bpel

Assign

Assign

3. Ahora vamosa publicar nuestro proyecto al Bpel Consola.

Deploy

Deploy

4. Entramos a la consola de BPEL y damos click sobre el nombre de nuestro proceso

Consola

5. Ahora bien, aqui vemos el tab “Initiate” o iniciar, alli es donde nos aparecen los recuadros de nuestros parametros qeu colocamos en el Esquema XML

Iniciar

Iniciar

Ahora vamos a obtener nuestro WebService. Damos click en la pestaña: WSDL “WebService Dialog Lenguage”. Ahora lo que vemos es una url. Esta url contiene los datos que dimos de alta en nuestro esquema. Podemos copiarla y abrirla en otra ventana del Explorar para verificar.

WSDL

WSDL

Y como vemos lo que tenemos es un webService automáticamente generado al momendo de darle deploy a nuestro proceso. Ahora a partir de este webservice vamos a crear una página jsp para invocar dicho Servicio.

WSDL

WSDL

6. Vamos a crear nuestra pagina en Jdeveloper:

Damos click derecho sobre el nombre de Nuestra aplicación y seleccionamos: New project, luego nos aparece una ventana y seleccionamos: Empty project y en la ventana que nos aparece colocamos el nombre de nuestro proyecto. “Pagina Web” en mi caso.

9 - Proyect

9 - Proyect

: 7. Ahora sobre nuestro nuevo Proyecto damos click derechoy seleccionamos New:Y en la ventana de galeria nos vamos al brazo: Web tier – JSF y en Items seleccionamos  JSF JSP

JSF

JSF

Ahora nos abre una ventana para configurar nuestro jsf, a lo que damos siguiente al paso 1 y en el 2 colocamos un nombre a nuestra pagina “TestWSDL” en mi caso. dejamos jsp y damos click en siguiente

jsp

jsp

En el siguiente seleccionamos Automaticly Expose UI…

UI

UI

Y ahora seleccionamos las libreriasy damos click en finish

Librerias

Librerias

Ahora visualizamos el esglose de nuestro projecto y nos encontramos con una clase java: Es la que guarda todos los objetos que tengamos en nuestro JSP para despuer mandar eventos, un faces config que es donde colcoamos nuestras páginas y las enlazamos y realizamosactividades de seguridad, sesion, etc. y por ultimo nuestra pagina jsp.

8. Ahora lo que vamos a hacer es llamar a nuestro WSDL (Recordamos la URL de nuesra WSDL de la consola de BPEL que copiamos por que la vamos a utilizar en este paso)

Lo primero es crear un proyecto nuevo vacio en nuestra aplicacion (Verpaso 6 por si no recordar) y le ponemos de nombre “WebServiceBPEL”. En la ventana de galeria nos vamos al nodo – Business Tier -> Web Services y en los Items buscamos  Web Service Data Control y damos Ok.

wsdc

wsdc

Ahora nos abre la ventana de configuracion para nuestro Wsdl. Lo primero es un nombre: “WSDBpel” luego la url del Web Service y colocamos la Url que aparece en la consola de BPEL. En ese momento si quitamos el foco de ese cuadro (Damos click en cualquier otro lado) hace una prieba de conexion para checar los servicios de ese servicvio y abajo en la parte de Service coloca los servicios que existen  Seleccionamos el “Corto” Que es con el que se invoca el ser vicio por que el “largo” es para cuando se regresa la llamada al servicio (CallBack)

Call

Call

Ahora damos click en siguiente y seleccionamos las operaciones disponibles, que en este caso solo es el inicio y damos click en Finish

Operations

Operations

Si revisamos nuestro proyecto y nuestra paleta de componentes vemos lo siguiente:

Dats

Dats

Ahora si creamos nuestra pagina de la siguiente forma:

Nos poscionamos en nuestra pagina JSp y en la palete de Componentes a la derecha (Ver imagen abajo) y en el combo de Componentes seleccionamos  ADF Faces Core y luego buscamos Panel Page, lo seleccioamos y lo arrastramos a nuestro JSP

PanelPage

PanelPage

Ahora vamos a la pestaña de DataControl y seleccionamos “On result String… ect” y lo arrastramos debajo de donde dice tittle 1 y nos aparece una ventana de opciones a la que seleccionamos Parameters – ADF Parameter Form

Parameters

Parameters

En cuadro que nos aparece damos click en Ok. y este es el resultado:

Jsp Iniciar

Jsp Iniciar

Ahora corremos nuestra pagina y probamos el servicio. Damos click derecho sobre nuestro JSP y seleccionamos “RUN” y esperamos que se ejecute nuestra pagina. Metemos los datos y damos click en iniciar.

Test1

Test1

Error

Error

Ahora vamos a la consola de Bpel y checamos si la instancia se ejecuto correctamente.

CONSOLA

CONSOLA

Correct

Correct

Si todo funciona ahora podemos juagr con nuestra pagina Web. Incluso mandar un msj de alerta al ejecutar nuestro sevicio, o que nos envia a otra pagina donde nos diga que se ha realizado, etc. Se le pueden agregar imagenes y hacer cosas por el estilo.

Espero sea de utilidad.

Continuacion:

Ahora bien. Aparecen en la Pagina unos campos que no tienen que verse en el form.

Campos

Campos

Para poder quitarlos hacemos lo siguient:

Damos doble click en el boton iniciar al mostrarnos el mensaje le damos aceptar.

Mensaje

Mensaje

Nos muestra el backbean de nuestro jsp donde podremos agregar codigo para manipular los datos.

Ahoravamos a agregar un poco de codigo: Mirar la imagen y agregar

Codigo normal

Codigo normal

Se agrega lo siguiente:

Codigo agregado

Codigo agregado

Al colocar el valor “params.put” estamos dicindo que asigne un valor a un elemento. Se nos va a poner en rojo por que hace falta una libraria para cumplir con estas opciones, esto en automático lo marca el jdev, y si damos “alt – enter” la va a agregar el jdev en el momento. Seleccionamos la libreria “java.util”

Libreria agregada

Libreria agregada

Ahora vamos a ponerle un valor de “1″ a los valores que nos nos interesan.

Y a los que nos interesan le ponesmo el nombre del Elemento de nuestro esquema tal cual esta escrito. Y le ponemos el valor del Id del Campo en nuestr jsp. Por ejemplo: El primer elemento (en mi caso es “Programa” y en el jsp la caja de texto tiene Id “inputText1″ entonces queda:

params.put(“element1″, inputText6.getValue());

y asi sucecivamente con los demas elementos. Al terminar corremos nuestra pagina y checamos el resultado.

Resultado

Resultado

Si funciona lo que tenemos que hacer ahora es quitar las cajas de texto en nuestro jsp que no nos funcionan y listo. Tenemos solo los datos que nos interesan.

Pagina

Pagina

Positivo

Positivo

Quitando las cajas que no nos sirven

FINAL

FINAL

Y probamos (Coloque una pagina de resolucion para saber si detona bien el servicio)

Final2

Final2

Final3

Final3

Espero les sirva….

Categorías: SOA Suite
Etiquetado: , , , , ,

21 respuestas hasta el momento ↓

  • Johanna Guiracocha // 11 Septiembre 2008 a 3:51 pm

    Hola!!! Gracias por la ayuda con este tutorial nos ayudó muchísimo… Muy interesante y al fin pudimos presentar nuestro proyecto con lo del web service… Muchas pero muchas gracias en serio todos tus tutoriales nos sirvieron de mucho…

    Una última duda… Al momento de generar tu web service aparecen 5 campos antes de presentar tu esquema hecho (ej: reply to_adress) si conoces alguna forma de olcutarlos o setearles un valor por defecto ayudame en eso… He tratado de varias formas ponerle valores por defecto o no mostrarlos pero si no les doy valor me sale error al mometno de inciar el proceso… Y pregunto esto xq el jurado quiere ver un producto final (x asi decirlo) y solo se les debe prese4ntar el esquema que previamente creaste… Gracias por la ayuda…

  • Johanna Guiracocha // 12 Septiembre 2008 a 3:43 pm

    Muchisimas gracias por tu ayuda tan inmediata… Hoy voy a probar en el ejemplo que he hecho para luego si ponerme hacer la pagina de los procesos con una pagina de bienvenida y todos los adornos… Muchas gracias apenas me salga te vuelvo a escribir… Grache :)

  • Johanna Guiracocha // 17 Septiembre 2008 a 12:48 pm

    Hola… Te escribo para decirte que ya probé lo que indicaste y nos salió todo super… Ya tengo el diseño de mi página: una bienvenida y las tres de los procesos pero al final de este tutorial indicas que: Coloque una pagina de resolucion para saber si detona bien el servicio. He estado probando y para poder hacer el diseño de tus paginas en el face.config pero en cada boton en la propiedad action indicas el nombre de la acción a seguir por el botón y en el face.config en el form outcome pones ese nombre del action… La última consulta (en serio que es la última) como haces para llamar a esa página de ÉXITO o la que mencionas en este turorial si al hacer lo que me dices en el botón initiate el action que toma es: comandbutton1.action()? Cómo hago para invocar al proceso y que se vaya a esa página de éxito??? Ayudame pliz es lo último… Gracias de todas formas…. :)

  • Johanna Guiracocha // 17 Septiembre 2008 a 12:50 pm

    Y revisa tu correo igual ahi te explico mejor mi duda…. Grache :)

  • Abenzoar Enrique Uicab Cuara // 17 Septiembre 2008 a 4:51 pm

    Hola Johanna.
    Mira… Es correcto lo que mencionas… al asignarle mediante código a un boton.. la propiedad action queda sin funcionar. Por lo tanto la acción hay que invocarla en el código. Para hacerlo hay que hacer lo siguiente. Al finalizar el código tiene un “return null” allí hay que ponerle el nombre de la salida del Outcome del Faces Congif. Por ejempo, si tu Salida del Outcome se llama exito entonces al final del código debe decir

    Object result = operationBinding.execute();
    if (!operationBinding.getErrors().isEmpty()) {
    return null;
    }
    return “exito”;

    y listo… debe funcoinar como si tuviera la acción exito. Te mando una imagen a tu correo. Saludos.

  • Johanna Guiracocha // 18 Septiembre 2008 a 10:19 am

    Hola…

    Muchas gracias por la ayuda nuevamente jeje… Hice lo que me indicaste y todo super ya me salió… Muchisimas gracias por tu ayuda..
    Y pliz revisa tu correo… Gracias :)

  • Christian Solís // 26 Septiembre 2008 a 9:12 pm

    Hola que tal
    Tengo un proyecto de la Universidad sobre envío de mensajes de una PC a un dispositivo movil a través de Oracle Collaboration Suite con Oracle Mobile y no sabemos como configurar ciertos parámetros para enviar SMS. Esos parámetros se los configura en el Oracle Application Server en el componente Wireless pero no sabemos. Vos sabes tal vez este tema?? o puedes ayudarnos de alguna forma???
    Te agradecería mucho…

  • Abenzoar Enrique Uicab Cuara // 29 Septiembre 2008 a 9:53 am

    Respecto a lo que comentas Christian. no he hecho ese tipo de pruebas aun. (Mandar un sms a un mobile a través de un servicio de SOA). Pero he leído un poco sobre ese tema ya que igual iba a realizar una demo para un proyecto y solicitaban ese servicio pero no se llevó a cabo. Primero: Tienes que tener un servicio con alguna compañía de celulares para enviar mensajes a otroes celulares y la conexión de del aparato a la computadora. 2do. Tener los datos relevantes del Moden que vas a utilizar para enviar esos mensajes. 3. Entonces, en las carpetas de donde se encuentra instalado el SOA existen unos archivos de configuración XML para colocar los datos del moden en dicho archivo. Una vez Hecho esto se incia el SOA y al agregar la actividad de SMS para enviar notificación por SMS a un mobile le pones de alguna forma el num a donde va a llegar el msj y con esto debe funcionar.

    Si requieres más información podría revisar si tengo unos archivos donde leí lo que te comento y en el transcurso del día te aviso si los encuentro o no.

  • Abenzoar Enrique Uicab Cuara // 29 Septiembre 2008 a 10:17 am

    Checa esta dirección en tu instalación del SOA

    \bpel\system\services\config

    y allí busca este archivo: “ns_iaswconfig.xml”

    Alli debes poner los parámetros de tu servicio de Telefonía para que funcione y puedas enviar SMS a móbiles. (Ojo. Después de modificar el archivo debes reinicar el servicio del SOA (opmnctl))

    Checa esta info igual:

    http://download.oracle.com/docs/cd/E11036_01/integrate.1013/b28982/service_config.htm#sthref345

    Espero te funcione. Saludos

  • Johanna Guiracocha // 7 Octubre 2008 a 12:49 pm

    Holaaaaaaaaaa… Como estás?? Te escribo rapidito en tu blog para darte las gracias por toda tu ayuda referente a nuestro proyecto, y contarte que ayer (06/10/2008) tuvimos la presentación final ante el jurado y sacamos la máxima nota: 10/10 ehhhh… Estoy muy emocionada porque ya somos Ingenieros con mi grupo… Y en parte te la debemos a ti.. bueno primero a Diosito claro…

    Muchisimas gracias en serio… El último favorcito recuerda que te pedí en un correo que por favor me envies toda la información que tengas referente a mi tema para poder seguir investigando y aprendiendo más de Jdeveloper y SOA me encantaría aprender mucho más… Cuando puedas me envias cualquier cosa al correo…

    Otra vez muchas gracias y tus tutoriales son excelentes… Te felicito por tu disposición siempre para ayudar a la gente que no conoce mucho del tema :)

  • Alex // 10 Marzo 2009 a 5:25 pm

    Hola Enrique como estas?

    Tengo una duda ojala q me puedas ayudar.
    Lo q necesito es iniciar un proceso bpel cuando se ejecute un trigger en la base de datos ¿se puede? ¿tienes informacion q me pueda ser util?

    Saludos Gracias

    Dejar un comentario

  • Abenzoar Enrique Uicab Cuara // 11 Marzo 2009 a 12:03 pm

    Hola. Mira lo que necitas si se puede. Se me ocurre una aplicacion sencilla de iniciar un proceso cuado se haga una insercion, una modificacion o una eliminacion de un registro en una base de datos. Lo que tienes que hacer es crear un proyecto de tipo sincrono, colocar en servicios un partnerlink y a este parner link de tipo conexion a base de datos.. alli te vienen una serie de opciones la que seleccionaras como necesites, por ejemplo, que se dispare un proceso cuando se hace unainserción seleccionas la opcion “insert” y te pide el esquema y las tablas que deseas trabajar y listo.. de alli enlazas tu partener link a un receive y continuas con tu proceso…” Espero esta información pueda serte util… ando un poco ocupado con el trabajo.. pero si puedo esponerlo con un ejemplo publicado (no prometo nada) lo haria… Saludos… intentalo como te meciono y veras que es sencillo

  • Andres // 11 Abril 2009 a 9:41 pm

    Hola saludos, era para consultarte si tienes algun ejemplo sobre el manejo de los eventos de las tablas, es decir cuando doy clic sobre un campo especifico que ese valor me sirva de filtro para llenar otra tabla.
    Gracias

  • Antonio // 6 Mayo 2009 a 7:25 am

    Hola, Abenzoar.

    Soy nuevo con Oracle Soa Suite y estoy teniendo algún problemilla. Me he creado un Java Web Service, primero creando la clase java y luego con el asistente para crear un Java Web Service.

    Ahora quiero crear un proceso bpel que llame a ese Java Web Service. Lo he probado arrastrando un partner link y buscando el wsdl del java web service y tambien arrastrando de la paleta Java Web Service. En ambas opciones me pasa lo mismo, me saltan muchos errores de wsdl… si pudieras probarlo. Simplemente crear una clase con un par de metodos sencillos, luego crear un java web service con esa clase. Y luego crear aparte un proceso bpel e intentar llamar a este java web service. yo yevo una semana y no lo consigo…

    Gracias de antemano.

  • Abenzoar Enrique Uicab Cuara // 6 Mayo 2009 a 10:03 pm

    Hola Antonio…

    Veo que estas creando el Web Service por un metodo de java… por que no lo creas a traves de un esquema como lo realizo yo en el ejemplo del blog numero1 y despues el ejemplo2: o es necesario que lo publiques a través de un método??? Si no lo és inentalo creando el Servicio Web a traves de un Esquema (XML) con el Jdeveloper como lo menciono en el ejmplo y debe funcionar muy bien y te será más fácil.
    Ahora bien.. si lo requieres desde una clase o metodo entonces habria que checar como creas el wsdl y las caracterisicas del metodo en si.

    Saludos..

  • Antonio // 7 Mayo 2009 a 4:48 am

    Hola, gracias por contestar.

    Si lo creo como el ejemplo numero 1, ¿como meto el codigo java? Es un metodo que lo unico que hace es llamar a un Thread de java para que comience una transmisión de video.

    Un saludo.

  • Antonio // 8 Mayo 2009 a 8:36 am

    Ya está solucionado, tenía el Web service colgado en un application server. Al crear los partner links he copiado las rutas al WSDL de cada web service y ya me deja acceder a él.

    saludos

  • Abenzoar Enrique Uicab Cuara // 8 Mayo 2009 a 10:53 am

    Vaya.. el problema era la direccion del wsdl entonces…. que bueno que ya quedo…
    Saludos…

  • Celeste // 7 Julio 2009 a 3:43 pm

    Hola…
    Hace poco que he comenzado a trabajar con BPEL, por lo que no tengo mucha practica, queria hacer una pregunta acerca de un error.. estoy trabajando en proceso BPEL1 que llama a otro proceso BPEL2, este tiene como parametro de entrada un esquema que defino ahi mismo. Este despliegga bien.. el problema esta en compilacion , en el proceso BPEL1 no reconoce el esquema.el error es el siguiente:
    In WSDL at “http://192.168.100.211:7777/orabpel/default/ProcesoNuevoEnvioAlertas/1.0/ProcesoNuevoEnvioAlertas?wsdl”,
    message part element “{http://xmlns.oracle.com/ProcesoNuevoEnvioAlertas}exampleElement” is not defined in any of the schemas.

    Te agradeciaria si me podrias decir de que otra forma trabajarlo.. O como solucionar este error ..Gracias

  • Abenzoar Enrique Uicab Cuara // 7 Julio 2009 a 4:40 pm

    Hola….

    Necesitaría mas información de lo que estas haciendo… una imagen de tu proceso, y sobre todo el mensaje completo del error y asi poder entender más lo que estás haciendo y la forma para resolverlo.

    Saludos

  • Julius // 31 Octubre 2009 a 6:40 am

    Excelente Aportacion, yo usaba Intalio, Netbeans, Geronimo y otras herramientas mas para hacer WebServices y Orquestacion usando BPM, pero con ORACLE me doy cuenta que puedo hacerlo mas rapido, gracias y a seguir estudiando :)

Dejar un comentario