segunda-feira, junho 22, 2009

Agilize Coldfusion Components com Bean Dinâmico (Genérico)

Assisti um vídeo do Terry Ryan em Adobe TV sobre como acelerar o desenvolvimento com Coldfusion Componentes (CFC), achei muito bom e aproveitei para reescrever o Bean dinâmico utilizando cfscript. Testei e funcionou, muito boa a dica! Segue o código fonte:


<cfcomponent displayname="BeanDynamic.cfc">

<cffunction name="init" access="remote" output="false" returntype="Any">
<cfscript>
return this;
</cfscript>
</cffunction>

<cffunction name="onMissingMethod" access="public">
<cfargument name="missingMethodName" type="string" required="false" />
<cfargument name="missingMethodArguments" required="false" />
<cfscript>
var attribute = "";

if( compareNoCase(left(arguments.missingMethodName,3),"get") eq 0 ){

attribute = getMissingMethodName(arguments.missingMethodName);
return get(attribute);

} else

if( compareNoCase(left(arguments.missingMethodName,3),"set") eq 0 ){

attribute = getMissingMethodName(arguments.missingMethodName);
return set(attribute, arguments.missingMethodArguments[1]);
}
</cfscript>
</cffunction>


<cffunction name="getMissingMethodName" access="private" returntype="Any">
<cfargument name="missMethName" type="string" required="false" />
<cfreturn right(arguments.missMethName,len(arguments.missMethName)-3)>
</cffunction>

<cffunction name="get" access="private" output="false" returntype="Any">
<cfargument name="attribute" type="string" required="true" />
<cfreturn variables.instance[arguments.attribute] />
</cffunction>

<cffunction name="set" access="private" output="false" returntype="Any">
<cfargument name="attribute" type="string" required="true" />
<cfargument name="value" type="any" required="true" />

<cfset variables.instance[arguments.attribute] = arguments.value />

<cfreturn this />
</cffunction>

<cffunction name="getVars" access="remote" output="false" returntype="Any">
<cfreturn variables.instance>
</cffunction>

</cfcomponent>



Para Testar em seguida:


<cfscript>
BeanDynamic = createObject('component','BeanDynamic').init();
BeanDynamic.setNome('Fernando');
BeanDynamic.setEmail('fernando@teste.com');
</cfscript>

<cfoutput>
#BeanDynamic.getNome()#<br />
#BeanDynamic.getEmail()#
</cfoutput>

quinta-feira, junho 18, 2009

Instalando certificado digital no Coldfusion com Keytool

Tivemos alguns problemas no Servidor Web, para aproveitar a oportunidade realizei a atualização do Coldfusion 7 para Coldfusion 8 com update 8.02 não tive muita dor de cabeça para liberar o servidor, pois é importado toda configuração para a nova versão. Isso economizou algumas horas, não pensei que estivesse tão fácil para atualizar um servidor Cf7 para Cf8. Lembro que nas versões antigas era necessário reconfigurar.

Com o servidor atualizado e funcionando, tivemos uma falha inesperada em uma aplicação usando CFHTTP post com SSL. O dump da resposta CFHTTP exibia isso:
Com base nisto conclui que a atualização Cf7 para Cf8 copiou tudo com exceção dos certificados digitais que estavam instalados na VM. Portanto, foi necessário a instalação do certificado utilizado nesta aplicação para isso utilizei um arquivo bat que peguei há muito tempo atrás se não me falha a memória foi em: www.talkingtree.com/blog.

Primeiramente copie o arquivo do certificado .cer na pasta do Coldfusion na subpasta: \runtime\jre\lib\security.

Segue o arquivo run_keytool_import.bat que deve ser configurado para instalar o certificado digital utilizando keytool. Altere basicamente o que destaquei em vermelho.

@echo off
echo
echo This will import an X.509 SSL certificate into the keystore for the JVM specified
echo
echo Press Control+C to abort.
pause
SETLOCAL

rem -------------------------------------------------
rem 1) SET COLDFUSION JVM'S JAVA_HOME HERE
rem THIS SHOULD BE THE JVM USED FOR COLDFUSION MX
rem -------------------------------------------------
set JAVA_HOME=C:\ColdFusion8\runtime

rem -------------------------------------------------
rem 2) SET THE CERTIFICATE NAME AND ALIAS HERE
rem -------------------------------------------------
set CERT_NAME=site98.rejasa.com.br.cer
set CERT_ALIAS= site98.rejasa.com.br

rem -------------------------------------------------
rem 3) SET THE KEYTOOL PASSWORD HERE
rem -------------------------------------------------
set KEYTOOL_PASS=changeit

rem -------------------------------------------------
rem DO NOT EDIT BELOW THIS LINE
rem -------------------------------------------------
set JAVA_SECURITY=%JAVA_HOME%\jre\lib\security
set CERT=%JAVA_SECURITY%\%CERT_NAME%
%JAVA_HOME%\jre\bin\keytool -import -trustcacerts -keystore %JAVA_SECURITY%\cacerts -storepass %KEYTOOL_PASS% -noprompt -alias %CERT_ALIAS% -file %CERT%
ENDLOCAL
pause

Depois de executar o arquivo bat e instalar o certificado, o dump da resposta CFHTTP exibe isso:



Já pude perceber que o acesso CFHTTP com SSL funcionou, apenas faltou os parâmetros corretos.

quarta-feira, janeiro 07, 2009

Diagrama de Contexto

Após vários meses sem publicar nada vou começar o ano com um post pelo menos..

Ontem minha colega de trabalho Juliana Parollo me mostrou um processo um tanto obscuro que era realizado aqui em nossa empresa. Verificamos e chegamos à seguinte conclusão: precisamos mapear este processo para entender como ele funciona, caso contrário, não conseguiremos fazer nada para melhorar.

Minha sugestão para iniciar o mapeamento deste processo foi realizar uma análise em cada departamento com seus respectivos intervenientes e, na sequencia, documentar formalmente.

Para fazer a documentação utilizamos um formato de documento semelhante a um artefato do RUP. Este documento deverá ter um diagrama de contexto (DFD em alto nível) onde ilustraremos de maneira bem simples o fluxo de dados e descreveremos cada parte do processo do diagrama.

Mesmo nesta modelagem que não é um padrão UML podemos seguir as dicas de Fowler − de que quando estamos modelando a UML, devemos manter o padrão sempre que possível. No entanto é necessário lembrar que a clareza do modelo é o mais importante. Ou seja, se for preciso sacrificar o padrão para que o modelo fique mais claro, faça-o una o útil ao agradável.

Utilizando esta idéia, desenvolvi um diagrama de contexto um pouco diferente do convencional (que utiliza basicamente círculos e quadrados). Ao invés disso, preferi usar alguns ícones e cores. Neste exemplo utilizei o programa yEd, excelente para fazer rapidamente modelos simples como esse.


Como este é apenas o primeiro modelo, ele ainda não está completo. Após uma segunda análise este modelo foi melhorado com algumas mudanças.



A idéia é a de que este modelo junto com a documentação funcione sempre como uma base para vários trabalhos posteriores e para um possível e mais abrangente modelo de processo.