lunes, 29 de diciembre de 2014

Performance: configuración de bill items

En BRM podemos definir items custom (por ejemplo: /item/cargo_moratorio), dentro de éste tipo de item están los bill items.

No voy a entrar en detalle sobre como crear los bill items (ya esta explicado en la documentación online). Solamente voy a tocar el tema de la configuración de los mismos, específicamente la propiedad de precreate de los items.

La propiedad precreate especifica si BRM pre-creará o no el item para el tipo de servicio. En caso de que el valor sea true, el item se pre-creará en la base de datos (en la creación del servicio y en cada billing) y si el valor es false, el item se creará solamente cuando el evento ocurra.

domingo, 2 de noviembre de 2014

PCM_OP_SEARCH obtener campos de mas de una clase

Muchas veces cuando hacemos un search (ya sea con PCM_OP_SEARCH o PCM_OP_STEP_SEARCH) en la base de datos necesitamos obtener campos de mas de una clase, para ello utilizaremos el PIN_FLD_LINKED_OBJ (es un array) dentro del input flist.

Supongamos que dado un número de cuenta queremos obtener los productos de dicha cuenta, el status del purchased, el nombre del deal, el numero de cuenta, el login y status del servicio de esos productos. Con esto estaríamos trayendo datos de 5 clases (/account, /deal, /service, /purchased_product y /product), con eso alcanza como ejemplo.

martes, 7 de octubre de 2014

Aplicación MTA utilizando un archivo como entrada

Generalmente cuando desarrollamos una aplicación en la cual utilizacmos el framework MTA de BRM lo hacemos definiendo un template de búsqueda (en la base de datos) en la función pin_mta_init_search.

También existe la posibilidad de que nuestra aplicación MTA tome como entrada un archivo de texto que contiene un flist y procese los objetos que están en dentro del archivo (tal como se puede hacer en el pin_bill_accts y/o pin_inv_accts).

Para procesar los objetos que están en el archivo, en el pin_mta_init_search solamente debemos indicar el nombre del archivo y la cantidad de campos que tiene cada PIN_FLD_RESULTS del flist.

lunes, 6 de octubre de 2014

Detección de memory leaks - Parte III (MTA)

En las entradas anteriores (I y II) vimos como detectar memory leaks en una librería fm, ahora veremos como detectarlas dentro de una aplicación que ha sido desarrollada utilizando el framework MTA de BRM (ésto también sirve para apliaciones que no han sido desarrolladas utilizando MTA, pero el post está orientado a este tipo de aplicaciones).

Para ello utilizaremos otra herramienta: discover.

viernes, 3 de octubre de 2014

Secuencia de base de datos desde un opcode

A veces se necesita generar números consecutivos (por ejemplo números de factura electrónica) dentro de un opcode, para lo cual se pueden utilizar las secuencias de base de datos. Para esto solamente de debe utilizar el opcode PCM_OP_SEARCH y el resultado del search será en valor devuelto por la secuencia.

miércoles, 17 de septiembre de 2014

Sentencias SQL ejecutadas en BRM

A veces necesitamos ver las sentencias SQL que se generan cuando ejecutamos un opcode. El proceso para lograr esto es muy sencillo. En el ambiente donde se incia el dm_oracle hay que setear la variable de ambiente DM_DEBUG3 con el valor 0xFFFF003F, iniciar el dm_oracle y listo. Una vez seteada la variable e iniciado el dm_oracle en el archivo $PIN_HOME/var/dm_oracle/dm_oracle.log se pueden encontrar las sentencias SQL generadas por BRM.

CM y DM_ORACLE separados

A veces necesitamos probar una librería, ejecutar procesos o cambiar el nivel de log del CM y/o DM pero no podemos reiniciar BRM por alguna razón (puede ser un ambiente productivo o alguien mas está utilizando el ambiente), entonces lo que podemos hacer es tener un set de CMs/DMs con otra configuracion (ya sea q utilice otras librerias o solamente cambie el nivel de log). También podemos implementar esto mismo pero para que esos CMs solo sean utilizados por un proceso en particular, por ejemplo, el billing.

miércoles, 27 de agosto de 2014

Detección de memory leaks - Parte II

En este post vamos a ver como relacionar las direcciones de memoria con nuestro código fuente para ver en qué línea se está produciendo el memory leak. En el post anterior se mostraron algunos métodos para detectar memory leaks, de los cuales vamos a tomar como base el método 3 (el que usa un programa que cumpliría la función del testnap y además nos deja un archivo core para analizar con mdb).

Read this post in english.

Para desarrollar este ejemplo se utilizará un archivo (fm_inv_pol_demo_leaks.c) con funciones que produzcan memory leaks al utilizar las macros y funciones del api de BRM. Este archivo fomará parte de la librería fm_inv_pol.so para poder realizar las pruebas.

domingo, 24 de agosto de 2014

Detección de memory leaks - Parte I

Hola, hoy voy a escribir como detectar memory leaks (fugas de memoria) en nuestro codigo C/C++ de nuestras librerias fm de BRM.

Read this post in english.

Muchos habrán oido sobre Valgrind para detectar memory leaks (entre otras funciones que posee), pero lamentablemente Valgrind aún no funciona en Solaris SPARC, por lo cual vamos a tener que usar otras herramientas cuando estemos trabajando en un Solaris SPARC. En la documentación de Oracle BRM se menciona Purify pero como hay que pagar licencia vamos a utilizar algo que ya poseea nuestro SO y no tengamos que pagar.

Para detectar memory leaks (referidos a *poid_t y *pin_flist_t) en el CM, lo primero que tenemos que hacer es modificar el pin.conf del CM agregando esta línea:
- - disable_pcm_mempool 1
Al agregar esa linea en el pin.conf del CM hemos deshabilitado el pool de memoria que manejan los CMs para procesar flist y poids, ahora la memoria se asigna desde el heap del sistema.

miércoles, 20 de agosto de 2014

Introducción al blog y presentación

El conocimiento es una de las pocas cosas que al compartirse se multiplica y en este pequeño blog voy a tratar de compartir mi conocimiento sobre Oracle BRM. Algunos de los temas que tengo en mente para ir subiendo al blog son:
  • Detección de memory leaks.
  • Ambiente de desarrollo.
  • Tips de programación.
  • Tips de BRM.
  • Detección de core dumps.
  • Herramientas útiles a la hora de desarrollar.
  • Scripts para automatizar procesos.

Mi nombre es Martín Falconi, tengo 6 años de experiencia en BRM (para más información sobre mi carrera laboral pueden visitar mi perfil en Linkedin)


#include <stdio.h>

int main()
{
    printf("Bienvenidos al blog");
    return 0;
}


Buen viajeeeeeeeeeee