martes, 13 de junio de 2017

Spring Adapter SOA 12c - Buenas Prácticas


     En este articulo se pretende compartir las buenas practicas que aplican al uso del Spring Adapter en SOA Suite 12c.

    Como ya se habló de los principales conceptos y elementos con los que se trabaja en un articulo anterior: https://soajp.blogspot.com/2017/04/spring-adapter-soa-12c-aprende-usarlo.html Solo se hará incapié en las buenas prácticas sobre aquellas cosas que hacen a la organización, nomenclatura, y sobre todo las que componen la funcionalidad en sí de este maravilloso adaptador.



La mejor manera de explicar las buenas practicas son justamente realizando ejercicios que nos hagan aplicar esas buenas practicas. 

Pero para resumir en pocas palabras, un Spring Adapter permite llamar a un archivo JAR (asi como un Java Callout en el caso de OSB).



¡Manos a la obra!

No hay nada mejor que empezar con un famoso "Hola Mundo", asique allí vamos:

1)- Se parte de la base de un Composite tipico, esto se refiere a un BPEL que posee un string como entrada y un string como respuesta, exponiendo un cliente SOAP para que pueda ser consumido:




2)- Lo primero es arrastrar y soltar un Adaptador Spring en el carril de componentes como se muestra en la siguiente figura:




3)- Luego, es necesario nombrar el adaptador spring, para este ejemplo colocar HelloUtil (una buena practica es colocar la palabra "Util" como sufijo del nombre, ya que generalmente son utilidades empaquetadas en JAR (a.k.a. POJO) las que se usan en estos escenarios). Hacer clic en el botón OK para crear el adaptador.




4)- En una primera instancia el adaptador Spring no posee una interfaz (ya que es heredada por la interfaz del JAR al que invocará). Por elló primero debe crearse el código Java que se ejecutará. Una buena practica es crear las clases y paquetes en el mismo proyecto SOA en donde se utilizarán, por ende, hacer clic derecho sobre el nombre del proyecto y seleccionar New -> Java Class (en caso de no encontrar este elemento, usar la opción "From Gallery"):




5)- En este punto como minimo son necesarias 2 clases: la clase interfaz y la clase implementada a partir de la interfaz.

Primero crear la clase interfaz que contendrá la definición de las operaciones que puede realizar el JAR. Para este ejemplo escribir como nombre de la clase interfaz: IHello:


Como se puede ver, toda clase debe pertenecer a un paquete... en este ejemplo se usa "test.utils" como paquete pero puede utilizarse cualquiera, el nombre que mejor se ajuste a la necesidad.

Una buena practica es usar como prefijo la letra "I" en mayuscula en el nombre de la clase interfaz ya que denota que se trata justamente de una Interface. En este ejemplo se usa: IHello.

El codigo de la clase IHello para este ejemplo será el siguiente:

IHello.java
package test.utils;

public interface IHello {
    public String saySomething(String inputParameter);
}



6)- Para la clase implementada seguir los mismos pasos del punto anterior para realizar la creación de la misma. Tener en cuenta que ambas clases deben pertenecer al mismo paquete (en este caso test.utils). Llamar a la clase implementada HelloImpl:


Una buena practica es usar el sufijo Impl para aclarar que se trata de la clase Implementada a partir de la clase interfaz antes definida.

El codigo de la clase HelloImpl para este ejemplo será el siguiente:

HelloImpl.java
package test.utils;

public class HelloImpl implements IHello {
   
    @Override
    public String saySomething(String inputParameter) {
        /*
         * Acciones que realizara la operacion "saySomething"
         */
        return "Hello" + inputParameter;
    }
}

7)- Una vez creadas las clases y paquetes que se invocarán,  hacer doble clic en el adaptador Spring creado anteriormente:

Esto abrirá el archivo spring context HelloUtil.xml en el cual debe definirse su interfaz para poder conectarlo con el BPEL.

Seleccionar la categoría "WebLogic SCA", arrastrar y soltar un componente "Service" al contenido del archivo spring context como se muestra en la siguiente figura:


A este punto es necesario rellenar 3 campos y se completarán del siguiente modo:

name *: HelloService
target *: HelloBean
type *: test.utils.IHello (usar el icono de engranaje para buscar la clase Interfaz).


Clic en OK para añadir la interfaz.

Una buena practica es usar el sufijo Service para el nombre del servicio del Spring Context. Como así también el sufijo Bean para el Target del servicio (objetivo del servicio, es decir, que bean se utilizará).



8)- Es necesario realizar algunos ajustes más al archivo spring context.

Primero añadir el elemento <interface.java/> dentro del elemento <sca:service/> como se muestra en la siguiente figura:


Notar que usa la misma clase interfaz usada por el componente Service (<sca:service/>)


Luego, es necesario añadir el Bean (el target) que esta usando el componente Service (<sca:service/>), para ello, arrastrar y soltar un componente bean de la sección "Spring Core" al contenido del archivo spring context como se muestra en la siguiente figura:



Para completar los datos necesarios para este componente bean, debe utilizarse el mismo nombre del target (u objetivo) del elemento <sca:service/> definido anteriormente y la clase implementada como se muestra en la siguiente figura:




Por ultimo, es necesario modificar el atributo xsi:schemaLocation del elemento principal, ya que por defecto JDeveloper crea un namespace demasiado largo y genera conflicto. Reemplazarlo por el siguiente namespace:

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://xmlns.oracle.com/weblogic/weblogic-sca META-INF/weblogic-sca.xsd">


9)- Es hora de conectar el BPEL con el Spring Adapter, para esto, basta con unirlos desde la vista "Design" en el composite.xml como muestra la siguiente figura:



Si aparece el siguiente mensaje, hacer clic en OK:





10)- Por ultimo, es necesario utilizar una actividad Invoke dentro del BPEL para poder llamar al adaptador Spring... ademas de sus respectivos Assign:




11)- Deployar y Probar.

Cualquier sugerencia y/o dudas pueden debatirse libremente con respeto en los comentarios de este articulo.

2 comentarios:

  1. Me vino de 10. Justo lo que necesitaba y no sabía por donde empezar. Gracias!

    ResponderEliminar