Archive for the ‘Arquitectura de software’ Category

Modificar Parámetros Timeout JTA / BPEL en WLS (Oracle Weblogic Server 11g)

Jueves, enero 26th, 2012

Antes de empezar, debo decirles que esto lo probé en una máquina con Oracle BPM 11g (11.1.1.4) y el problema que presentaba es que a los 5 minutos un servicio web que ejecutaba un PL-SQL en la BD a través de un DB Adapter misteriosamente se cancelaba. A continuación les muestro el log que aparecía en el servidor SOA:

Caused by: BINDING.JCA-11811
Stored procedure invocation error.
Error while trying to prepare and execute the SCHEMA01.PKG01.PLSQL01 API.
An error occurred while preparing and executing the SCHEMA01.PKG01.PLSQL01 API.
Cause: java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current operation
ORA-06512: at "SCHEMA01.PKG01", line 1206
ORA-06512: at "SCHEMA01.PKG01", line 1176
ORA-06512: at line 1

Check to ensure that the API is defined in the database and that the parameters match the signature of the API.  This exception is considered retriable, likely due to a communication failure.  Because the global transaction is rolling back the invoke must be retried in a new transaction, restarting from the place of the last transaction commit.  To classify it as non-retriable instead add property nonRetriableErrorCodes with value "1013" to your deployment descriptor (i.e. weblogic-ra.xml).

    at oracle.tip.adapter.db.exceptions.DBResourceException.createXARetriableException(DBResourceException.java:670)
    at oracle.tip.adapter.db.exceptions.DBResourceException.createEISException(DBResourceException.java:642)
    at oracle.tip.adapter.db.sp.SPUtil.createResourceException(SPUtil.java:175)
    at oracle.tip.adapter.db.sp.AbstractStoredProcedure.execute(AbstractStoredProcedure.java:131)
    at oracle.tip.adapter.db.sp.SPInteraction.executeStoredProcedure(SPInteraction.java:141)
    at oracle.tip.adapter.db.DBInteraction.executeStoredProcedure(DBInteraction.java:1102)
    at oracle.tip.adapter.db.DBInteraction.execute(DBInteraction.java:247)
    at oracle.integration.platform.blocks.adapter.fw.jca.cci.JCAInteractionInvoker.executeJcaInteraction(JCAInteractionInvoker.java:311)
    ... 102 more

Para corregir este error de timeout obtuve cierta información que espero sea de utilidad para alguien más. Los pasos para cambiar los parámetros de timeout tanto en JTA como en BPEL son:

1. Configuración syncMaxWaitTime: Esta propiedad controla el tiempo máximo que se espera un resultado en un proceso sincronizado.

• Iniciar sesión en EM como administrador.
• Abrir SOA y click derecho sobre “soa-infra”.
• Seleccionar: SOA Administration -> BPEL Properties
• Dar click sobre “More BPEL Configuration Properties…”
• Localizar el atributo syncMaxWaitTime y cambiarlo.

2. Configuración del tiempo de transacción de EJB de BPEL: Permite modificar las propiedades de tiempo de espera (timeout) para la aplicación SOA, ignorando la configuración global especificada en los parámetros JTA.
• Acceda a la consola de administración de Oracle WebLogic.
• Haga clic Deployments.
• Ampliar soa-infra –> EJB.
• Los siguientes EJBs deben actualizarse:

BPELActivityManagerBean
BPELDeliveryBean
BPELDispatcherBean
BPELEngineBean
BPELFinderBean
BPELInstanceManagerBean
BPELProcessManagerBean
BPELSensorValuesBean
BPELServerManagerBean

• Puede consultar en la pestaña de configuración el timeout para los beans que coincidan con el filtro “EJB*BPEL” (podría haber más beans si su versión es diferente).
• Haga clic en Guardar.
• Reiniciar Oracle WebLogic Server.

3. Ajuste del timeout de transacción global a nivel de dominio WebLogic: Esta propiedad controla el tiempo de espera para las transacciones activas. Si la transacción está todavía en estado “activo” después de ese tiempo, automáticamente se revierte (rolled back).

• Acceda a la consola de administración de Oracle WebLogic.
• Haga clic en Servicios -> JTA.
• Cambie el valor de segundos del tiempo de espera (timeout, por defecto es 30).
• Haga clic en Guardar.
• Reinicie Oracle WebLogic Server.

En mi caso se modifiqué los valores de timeout JTA a:

• Timeout Seconds: 6000
• Completion Timeout: -1 (en opciones avanzadas)
• Maximum Duration of XA Calls: 6000000 (en opciones avanzadas)

Las transacciones se establecen a 6000 segundos que equivale a 1.6 horas.

Algunos enlaces de interés (parte de la información fue obtenida de estas fuentes):

  • http://forums.oracle.com/forums/thread.jspa?threadID=2279364
  • http://sudhakarsoa.blogspot.com/2011/03/how-do-you-configure-transaction.html

¿Qué es computación distribuida y en Grid?

Martes, diciembre 27th, 2011

La computación distribuida o informática en malla, es un nuevo modelo para resolver problemas de computación masiva utilizando un gran número de computadoras organizadas en racimos incrustados en una infraestructura de telecomunicaciones distribuida.

La computación en grid es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento y aplicaciones específicas) que no están sujetos a un control centralizado.

En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters…) y se encuentran conectados mediante redes de área extensa (por ejemplo Internet). Desarrollado en ámbitos científicos a principios de los años 1990, su entrada al mercado comercial siguiendo la idea de la llamada Utility computing supone una revolución que dará mucho que hablar.

El término grid se refiere a una infraestructura que permite la integración y el uso colectivo de ordenadores de alto rendimiento, redes y bases de datos que son propiedad y están administrados por diferentes instituciones. Puesto que la colaboración entre instituciones envuelve un intercambio de datos, o de tiempo de computación, el propósito del grid es facilitar la integración de recursos computacionales. Universidades, laboratorios de investigación o empresas se asocian para formar grid para lo cual utilizan algún tipo de software que implemente este concepto.

Para no extendernos en los conceptos les recomiendo visitar los siguientes enlaces:

  • Conceptos

    http://es.wikipedia.org/wiki/Computaci%C3%B3n_distribuida

    http://es.wikipedia.org/wiki/Computaci%C3%B3n_grid

  • EhCache con Spring (Spring Framework se integra perfectamente con EhCache, tanto sea a través de clases utilitarias “oficiales” como usando librerías adicionales que brindan una mejor integración)

    http://www.dosideas.com/wiki/EhCache_Con_Spring

  • Terracota

    http://www.dosideas.com/noticias/java/271-introduccion-a-terracotta.html

    http://www.terracotta.org/

  • Infinispan
    http://unpocodejava.wordpress.com/2010/09/15/getting-started-with-infinispan/

Primera aplicación con Eclipse y GWT

Martes, octubre 5th, 2010

Asumimos que para poder iniciar este tutorial, previamente se configuró correctamente GWT y Google Plugin For Eclipse. Si aún no lo has hecho, puedes revisar esta entrada.

Una vez iniciado Eclipse y teniendo configurado los plugins necesarios para trabajar con GWT procedemos a crear un nuevo proyecto:

A continuación seleccionamos el tipo de proyecto: GWT Java Proyect:

Escogemos un nombre para el proyecto, en este caso “DemoGWT”:

Marcamos la creación del módulo GWT:

Con eso tenemos listo el proyecto, con el ejemplo “automágicamente” generado y listo para ser probado.

Para probar nuestra aplicación pre-fabricada sólo hay que seleccionar el archivo ImageViewer.java (el archivo módulo) y con el botón derecho del mouse abrimos el menú contextual. Podemos usar el “Run as” o “Debug as” según nuestra necesidad. Lo único importante es que se ejecute como Google Web Application:

A continuación en la consola aparecerá un mensaje especial. En la pestaña de “Development Mode” aparece la URL a la que debemos dirigirnos si queremos probar la aplicación:

Copiamos la URL en nuestro navegador y podremos ver la aplicación. Se nos solicita instalar un complemento especial para que nuestro navegador pueda estar en modo de depuración con el GWT. Cuando el sistema entra a producción ya no es solicitado este complemento para el navegador, para mi caso estoy usando Firefox:

Una vez instalado el complemento solicitado por el navegador podemos ver la aplicación:

Y listo, con eso un “Hola Mundo GWT” sin programar. ¿Es rápido y amigable, verdad?

Pero como en desarrollo de software no todo es tan fácil, a continuación probaremos la capacidad de hacer la edición visual de la interface en GWT. Para ello el archivo ImageViewer.java debe ser abierto (con doble click sobre el nombre del archivo en el “Package Explorer”) y luego debemos abrir la pestaña que dice “Design” con el archivo abierto en el editor. Tener paciencia que puede tardar un poco en abrir en modo de diseño:

A continuación veremos cuatro áreas importantes:

  • Structure: La estructura o jerarquía de clases, fijarse que en nuestro ejemplo el rootPanel tiene objetos “dentro” de él.
  • Properties: Las propiedades de cada objeto, donde incluso puede cambiarse el nombre de la variable con que identificas el objeto.
  • Palette: La paleta de objetos.
  • Área de trabajo: El área donde modificamos la posición, tamaño y otras propiedades visuales de los objetos. Además se pueden arrastrar nuevos objetos o suprimir los ya existentes.

Para el ejemplo, haremos que la aplicación reciba un nombre en una caja de texto, este nombre se mostrará en el “alert” que aparece al hacer click al botón y posteriormente este mismo nombre se envía a una nueva caja de texto de sólo lectura, a modo de “resultado”.

Para ello modificaremos las líneas 25 y 33 de ImageViewer.java (el número de línea puede variar en su máquina, revise que lo que modifique corresponde a las mismas líneas mostradas en la imagen). Y agregaremos/modificaremos el código en las líneas 47, 48 y 49. La modificación para las líneas 25 y 33 corresponde a hacer las variables finales, de tal forma que el código dentro del “onClick” pueda hacer uso de esas variables:

Para más detalle de las modificaciones, muestro capturas de las propiedades de cada objeto:

Finalmente podemos ver el resultado de la modificación de nuestro ejemplo:

Espero este tutorial haya sido de ayuda.
 
 
 

Instalación de Google Web Toolkit y Google Plugin for Eclipse

Lunes, octubre 4th, 2010

Primero una breve introducción de lo que instalaremos:

Google Web Toolkit
Framework creado por Google que permite ocultar la complejidad de varios aspectos de la tecnología AJAX. Es compatible con varios navegadores. El concepto de Google Web Toolkit es bastante sencillo, básicamente lo que se debe hacer es crear el código en Java usando cualquier entorno de desarrollo (IDE) de Java y el compilador lo traducirá a HTML y JavaScript.

Google Plugin for Eclipse
El complemento de Google para Eclipse (en Inglés “Google Plugin for Eclipse”) es una forma rápida de empezar a desarrollar aplicaciones de Google Web Toolkit y de App Engine, de la instalación directo a la implementación de una aplicación AJAX “Hello World” en cuestión de minutos.

Eclipse
Eclipse es un entorno de desarrollo integrado de código abierto multiplataforma para desarrollar lo que el proyecto llama “Aplicaciones de Cliente Enriquecido” (Rich Client Applications). Esta plataforma típicamente ha sido usada para desarrollar entornos de desarrollo integrados (del inglés IDE), como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse). Sin embargo, también se puede usar para otros tipos de Aplicaciones de Cliente Enriquecido.

Procedimiento

Para nuestro caso descargamos Eclipse Helios (3.6) para Windows. Ustedes pueden usar la versión de Eclipse y sistema operativo de su preferencia. El mecanismo es similar para todos los casos, descargamos y descomprimimos:

Puede elegir la versión adecuada desde la siguiente URL: Eclipse Downloads.

El paso posterior es abrir un workspace existente o crear uno nuevo, para nuestro caso crearemos un workspace nuevo en “c:\temp\Java\wks\gwt-helios”:

A continuación debemos entrar al menú Help -> Install New Software

Y ya en esa ventana de configuración seleccionar “Add Repository”:

De acuerdo a la versión de Eclipse podemos agregar uno de los siguientes URL’s:

Eclipse 3.6 (Helios): http://dl.google.com/eclipse/plugin/3.6
Eclipse 3.5 (Galileo): http://dl.google.com/eclipse/plugin/3.5
Eclipse 3.4 (Ganymede): http://dl.google.com/eclipse/plugin/3.4

Después de agregar la URL se puede seleccionar los paquetes a instalar. En este caso seleccionamos el Plugin y el SDK para tenerlos integrados con Eclipse:

A continuación aparece la revisión del software a instalar y damos “Next”:

Aceptamos la licencia del software:

Aceptamos instalar software sin firmar:

Se inicia la instalación, puede tardar (ya que primero descarga los paquetes y luego los instala):

Una vez instalado todo, se nos solicita reiniciar eclipse (recomiendo usar la opción de “Restart Now”):

Una vez reiniciado volvemos a entrar a nuestro workspace de trabajo (“c:\temp\Java\wks\gwt-helios”) y volvemos a entrar a agregar nuevo software (Help -> Install New Software). Allí introducimos la URL para el plugin para diseño del GWT:

Como en el caso anterior, de acuerdo a tu versión de Eclipse, eliges la URL que corresponde:

Eclipse 3.6 (Helios): http://dl.google.com/eclipse/inst/d2gwt/latest/3.6
Eclipse 3.5 (Galileo): http://dl.google.com/eclipse/inst/d2gwt/latest/3.5
Eclipse 3.4 (Ganymede): http://dl.google.com/eclipse/inst/d2gwt/latest/3.4

A continuación seleccionamos el software a instalar (“GWT Designer” e “Infraestructure”) :

Revisamos el software a instalar y damos en “Next”:

Aceptamos las licencias:

Aceptamos la instalación de software sin firmar:

El software se instala:

Y si todo fue bien, se pedirá que se reinicie Eclipse:

Eso es todo, espero esta guía les haya servido de ayuda. Si quieren más información respecto a GWT, construí un tutorial para construcción con GWT y Eclipse, pueden revisar este tema aquí.

 
 
 

Lenguajes y RAD’s (Rapid Application Development Tools)

Viernes, octubre 1st, 2010

Un antiguo conocido me preguntó en que lenguaje y herramienta podía programar su proyecto de tesis, que si usaba Java u otra opción, ya que tenía que ser Open Source (y varias otras condiciones).

Traté de explicarle que el lenguaje Java como tal no es igual a gratis ni a Open Source (para ello vean el artículo La Trampa de Java). Creo que no me entendió.

Pero su pregunta principal fue: ¿Qué otras opciones tengo para evaluar además de Java? Recordemos que es primordial hacer una comparación antes de tomar una decisión de desarrollo. Así que, ¿dónde puedo encontrar esa lista de herramientas/lenguajes?

Le recomendé una lista de herramientas de desarrollo rápido: List of rapid application development tools

Es un buen inicio ver que tenemos a disposición.

Y para aquellos que gusten de comparar lenguajes, aquí un gráfico interesante en el que verán que a veces Lisp puede ser tan rápido o más que C++ para algunas tareas.