miércoles 1 de julio de 2009

Oracle Fusion Middleware 11g está en Producción

Julio 1ero marca el nacimiento oficial de la más reciente generación de aplicativos de  Middleware de Oracle – FMW11g. Los productos que a partir del día de hoy se encuentran en producción son el resultado de un periodo de adaptación y continua evolución que ha caracterizado a las soluciones de Middleware de Oracle en los últimos años.

FMW 11g cuenta con productos y soluciones en categorias como Herramientas de Desarrollo,  SOA, Interacción con Usuario (Portales y Web2.0), Identity Management, Enterprise Management, Seguridad, Inteligencia de Negocios y Gestión de Contenido.

A partir de hoy pueden hacer uso de las herramientas usadas para la construcción de las Aplicaciones Fusion. Esperamos poder seguir escribiendo sobre esta nuevo release para sacarle todo el provecho y continuar generando un conocimiendo compartido.

image

Por el lado de herramientas de desarrollo estaré explorando la nueva versión de JDeveloper 11g, conocida internamente con el nombre Bulldog en los próximos articulos.

domingo 21 de junio de 2009

Brimful of Asha presentando en Gartner Enterprise Integration Summit..

El día 23 de Junio de 2009 estaré dando una plática en el Gartner Enterprise Integration Summit México.
Esto será a las 1240PM en la sala Diezmo 4.

Espero puedan asisitr. Aquí algo de información de este Summit:

http://www.gartner.com/it/page.jsp?id=766514

miércoles 27 de mayo de 2009

EL - Expression Language en ADF Faces

EL es un lenguaje de scripting que hace parte de la especificación de JSF con el objetivo de facilitar simplificar el acceso a los componentes de una página sin necesidad de utilizar código Java. Siendo ADF Faces un framework basdo en JSF vamos a ver en este articulo como podemos utilizar EL dentro de nuestras aplicaciones basadas en JSF.

Al ser EL un lenguaje tipo script, no requiere de compilación por lo que toda expresión es evaluada en runtime. El desarrollador puede interactuar con los atributos, metodos y propiedades de los ADF Faces Rich Components a través de expresiones. Así mismo en ADF todos los mapeos (bindigs) que se hacen al ADFm son implementados con EL.

Veamos algunos ejemplos de expresiones:

Si tenemos un inputText podemos invocar el setter de una variable apellido que esta dentro de un managed bean llamado cliente a través de EL

  1: <af:inputText id="apellido“ required="true" value="#{cliente.apellido}"/>


Ahora si queremos obtener el apellido y asignarlo a un outputText invocamos el getter



1: <af:outputText id="apellido“ value="#{cliente.apellido}"/>



Por otro lado podríamos realizar operaciones aritméticas y/o evaluar condiciones para determinar cierto comportamiento:



  1: <af:outputText value="#{backing_client.salario > 0? backing_client.salario*.12:0}"/>


JDeveloper cuenta con un Expression Builder a través del cual podemos armar expresiones de forma declarativa. El expression builder se lanza en el momento que queramos definir alguna propiedad de un componente diferente de los valores por defecto tales como true o false. Dentro del editor de codigo podemos armar expresiones con el asistente digitando #{ al definir el valor de una propiedad de un componente.



Veamos algunos ejemplos prácticos de expresiones que nos pueden ser útiles cuando trabajemos con los ADF Faces componentes:



<!--acceder al valor de los bindings de la pagina-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue}/>
 
<!--Renderizar un componente basado en una codicion-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue} rendered="#{binding.salario.inputValue > 0"/>
<!--variables que se definan en los scopes-->
<af:inputText id="text1" value="#{pageFlowScope.nombre}/>
<af:inputText id="text1" value="#{sessionScope.nombre}/>
<!--Este expresion evalua igual que las anteriores-->
<af:outputText value="#{requestScope['nombre']}"/>
  
<!--Acceder al contexto de seguridad via EL-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue} rendered="#{securityContext.userInRole['fod-admin']}"/>
<!--Realizar alguna operacion aritmetica basado en una condicion-->
<af:outputText value="#{backing_client.salario > 0? backing_client.salario*.12:0}"/>
<!--Acceder al mapa de propiedades de un atributo del ADFm-->
#{bindings.empTable.labels}


Una de las carácteristicas especiales que descubrí recientemente es que a través de las expresiones se van a acceder a los métodos que estén definidos para el objecto. Un ejemplo de ello es el siguiente:



Quiero hacer una operación aritmética con 2 valores, uno viene desde la interfaz de usuario final digamos a traves de una variable en la sesión. El segundo valor viene de un atributo numérico que tengo en un ViewObject. El problema es que cuando hago la operación el numero que viene del ViewObject es de tipo oracle.jbo.domain.Number por lo cual si el valor que viene de la interfaz es de tipo java.lang.int o similar. La expresion no va a evaluar y va a causar un error de casting.



Ahora como a través de EL yo puedo acceder a los metodos de objecto Number para que mi expresion evalue correctamente hago



#{sessionScope.valor1 + bindings.valor2.inputValue.value}


Lo cual invoca el metodo getValue del objeto y este retorna un java.lang.double.



Para mayor información sobre EL pueden ir a los siguientes enlaces



1- API de Java para FMW: http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e10758/toc.htm



2- Unified Expression Language: http://docs.huihoo.com/java/ee/javaeetutorial5/doc/JSPIntro7.html#wp101877



Si alguno tiene más urls que quisiera compartir, lo puede hacer a través de los comentarios.

domingo 12 de abril de 2009

Error al hacer upgrade de SOA Suite 10.1.3.1 a 10.1.3.3 ó 10.1.3.4

Cuando se aplica la actualización de 10.1.3.1 a 10.1.3.4 ó bien de 10.1.3.3 a 10.1.3.4 es común encontrarse con el siguiente error al querer entrar al BPELConsole:

Oracle BPEL Process Manager Full CycleAn unexpected error has occurred while executing your request. This is most likely related to a defect in the Oracle BPEL Process Manager product. We apologize you can post the error to the OTN forum and we will get back to you as soon as possible.Attachments:Build Information:***************************************************************************** Oracle BPEL Server version 10.1.3.3.0Build: 0 Build time: Fri Jun 15 06:05:31 PDT 2007 Build type: release Source tag: PCBPEL_10.1.3.3.0_GENERIC_070615.0525 Exception Message:[java.lang.NoSuchMethodException] com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth) Exception Trace:java.lang.NoSuchMethodException: com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth) at java.lang.Class.getMethod(Class.java:1581) at com.evermind.server.ejb.interceptor.MethodStateFactory.createMethodState(MethodStateFactory.java:112) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.createMethodStates(ExposableBeanDescriptor.java:657) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.getRemoteComponentMethodStates(ExposableBeanDescriptor.java:723) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.getMethodState(ExposableBeanDescriptor.java:599) at com.evermind.server.ejb.AbstractEJBObject.OC4J_getMethodState(AbstractEJBObject.java:385) at FinderBean_RemoteProxy_4bin6i8.lookupDomain(Unknown Source) at com.oracle.bpel.client.Locator.lookupDomain(Locator.java:228) at _index._jspService(_index.java:78) at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.security.jazn.oc4j.JAZNFilter$1.run(JAZNFilter.java:396) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:410) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:623) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259) at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51) at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283) at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198) at com.collaxa.cube.fe.DomainFilter.doFilter(DomainFilter.java:131) at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15) at oracle.security.jazn.oc4j.JAZNFilter$1.run(JAZNFilter.java:396) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:410) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595)

Para resolverlo hay que realizar lo siguiente:

  1. Todo consiste en remplazar el ejb_ob_engine.jar con una copia que se encuentra en otra carpeta. Lo siguiente asume que la SOA Suite (BPEL) está ejecutándose en el container OC4J_SOA.
  2. Primero hay que parar el container con: opmnctl stopproc process-type=OC4J_SOA
  3. Cambiarse a la carpeta $ORACLE_HOME/j2ee/OC4J_SOA/applications/orabpel
  4. Borrar el archivo: ejb_ob_engine.jar
  5. Copiar el archivo $ORACLE_HOME/bpel/system/j2ee/ejb/ejb_ob_engine_oc4j.jar a la carpeta $ORACLE_HOME/j2ee/OC4J_SOA/applications/orabpel
  6. Renombrarlo de ejb_ob_engine_oc4j.jar a ejb_ob_engine.jar
  7. Iniciar la SOA SUITE: opmnctl startproc process-type=OC4J_SOA

Con esto al entrar al BPELConsole ya no se tendrá el problema anteriormente mencionado.

viernes 10 de abril de 2009

Nuevo Canal para Estar en Contacto con ADF

Los usuarios de Twitter ahora pueden hacer seguimiento a ADF y JDeveloper a través del www.twitter.com/jdevadf una herramienta más para que tengan siempre la información más reciente, eventos y novedades que suceden en torno al Framework de desarrollo y JDeveloper.

Creen que se debería tener un canal twitter para las noticias de Oracle en español?

Proxima Semana en el Chile OUG y Developers Day en Argentina

El próximo Lúnes y Martes estaré participando en el primer Chile OUG que se llevará a cabo en Santiago. El evento cuenta con la participación de varios de los directores ACE de Oracle para América Latina como Plinio Arbizu de Perú, Mauricio Naranjo de Colombia y Francisco Muñoz Alvarez de Chile quien hace parte del comite organizador. Así mismo habran distintos invitados internacionales Tim Hall y Dennis Remmer.

Desde ya este evento promete ser el más grande de su tipo realizado en la región. Por mi lado estaré presentando 2 charlas sobre Fusion Development y Desarrollo de Aplicaciones Empresariales Ricas. Así mismo estaremos liderando un Masterclass sobre ADF durante el evento.

Terminado Chile estaré desplazandome a Argentina donde participaré de un evento para Desarrolladores en la ciudad de Buenos Aires presentando la plataforma de desarrollo para Oracle Fusion. Una semana bastante agitada la que se viene.

Nos vemos en Chile y Argentina!!

lunes 6 de abril de 2009

JDeveloper 11g Update 2 Liberado

En este fin de semana se ha liberado la segunda actualización de JDeveloper 11g la cual esta enfocada en corrección de errores y bugs indentificados en las versiones anteriores. Para una lista completa de las correcciones realizadas pueden ir al siguiente enlace. El release también está aqui.