<< ColdFusion User Group Brasil

Blog

Our Blog

Blog Home | About | Entries By Date | Search

Recent Blog Entries

ColdFusion Zeus
Entry posted on Nov 16 by Pedro Claudio

Ações importantes da Adobe e da Comunidade Internacional mantem o ColdFusion como uma solução robusta e consistente.

Vale conferir os textos de:
- Hemant Khandelwal (ColdFusion Team), ColdFusion - No change in plan for Zeus
- Sam Farmer, Why ColdFusion's Future is Fine
- Adam Tuttle,Be the change ...

fonte: pcsilva.com

Palestra de Novembro
Entry posted on Nov 12 by Pedro Claudio

A gravação pelestra Engine de empresa privada ágil é ColdFusion de Carlos Alexandre Laszlo Liszkievich, já está disponível.

Flash Camp SP
Entry posted on Nov 03 by Pedro Claudio

O AUG ASDev está organizando um Flash Camp em São Paulo, saiba mais.

Singleton CFML
Entry posted on Oct 25 by Pedro Claudio

Em alguns sistemas a quantidade de objetos criados é tão grande, que justifica o uso de cache para estes objetos, e para que não seja criada redundância de objetos nesta cache é necessário a verificação da existência de um objeto antes de cria-lo.

A situação descrita acima se encaixa no conceito de Singleton em Best Pratices.

Então implementamos o Singleton em CFML no escopo Application, ficando assim visível para todos os usuários, ele será manipulado por dois métodos getInstance/removeInstance, inserindo este métodos no Application.cfc, da forma como está escrito aqui, ficará disponível para toda requisição, bastando apenas informar o nome do component, para que seja instanciado.

<cfcomponent>
    <cfset this.name = "artigo_singleton">
    <cffunction name="onApplicationStart" returnType="boolean">
        <cfset removeSingleton("All")>
     <cfreturn true>
    </cffunction>
    <cffunction name="onRequest" returnType="void">
    <cfargument name="targetPage" type="String" required=true/>
        <cfif IsDefined("resetInstances")>
            <cfset removeSingleton("All")>
        </cfif>
    <cfset Variables.getInstance = this.getSingleton >
    <cfset Variables.removeInstance = duplicate(this.removeSingleton) >
        <cfinclude template="#Arguments.targetPage#">
    </cffunction>
    <cffunction name="getSingleton" returnType="any">
     <cfargument type="String" name="instanceName" required=true/>
     <cfargument type="String" name="instanceType" required="false" default="component"/>
    <cflock type="exclusive" scope="Application" timeout="10" >
         <cfif Not structKeyExists(Application._singletons,arguments.instanceName)>
             <cfset Application._singletons[arguments.instanceName] = CreateObject(arguments.instanceType,arguments.instanceName) >
         </cfif>
    </cflock>
     <cfreturn Application._singletons[arguments.instanceName]>
    </cffunction>
    <cffunction name="removeSingleton" returnType="void">
     <cfargument type="String" name="instanceName" required=true/>
    <cflock type="exclusive" scope="Application" timeout="10" >
        <cfif Arguments.instanceName is "All">
            <cfset Application._singletons = StructNew() >
        <cfelse>
            <cfset StructDelete(Application._singletons,arguments.instanceName) >
        </cfif>
    </cflock>
    </cffunction>
</cfcomponent>

Próximo passo é criar normalmente os componentes que serão usados na aplicação, mudando a formação de criação dos objetos, de maneira que utilizem a Singleton.

<cfset removeInstance("All") >
<cfset cfcA = getInstance("components.ComponentA").init('A') >
<cfset cfcB = getInstance("components.ComponentB").init('B') >
<cfset cfcAA = getInstance("components.ComponentA") >
<cfset cfcAA.any = "AA" >
<cfset cfcBB = getInstance("components.ComponentB") >
<cfset cfcBB.any = "BB" >
<cfset javaObj = getInstance('java.lang.System','java') >
<cfdump var="#cfcA#" label="cfcA">
<cfdump var="#cfcB#" label="cfcB">
<cfdump var="#cfcAA#" label="cfcAA">
<cfdump var="#cfcBB#" label="cfcBB">
<cfdump var="#javaObj#" label="javaObj">

Nota: Os componentes ComponentA e ComponentB, são ilustrativos, você pode utilizar qualquer componente, mas abaixo você pode ver os códigos dos dois componentes.

ComponentA

<cfcomponent>
    <cfset this.any = "" >
    <cffunction name="init" returntype="ComponentA" output="true" >
        <cfargument name="name">
        <cfset this.any = arguments.name >
        I'm init on ComponentA (arguments.name = #arguments.name#)<br />
        <cfreturn this>
    </cffunction>
    <cffunction name="Foo" returntype="void" >
        I'm foo on ComponentA <br />
    </cffunction>
</cfcomponent>

ComponentB

<cfcomponent>
    <cfset this.any = "" >
    <cffunction name="init" returntype="ComponentB" output="true" >
        <cfargument name="name">
        <cfset this.any = arguments.name >
        I'm init on ComponentB (arguments.name = #arguments.name#)<br />
        <cfreturn this>
    </cffunction>
    <cffunction name="Foo" returntype="void" >
        I'm foo on ComponentB <br />
    </cffunction>
</cfcomponent>

Fonte: blog.pcsilva.com

Middleware RIA da Adobe
Entry posted on Oct 07 by Pedro Claudio

A absorção de aplicativos RIA em todos os segmentos de mercado, para uso em redes interna principalmente, é crescente, em grande parte baseados no Flash Player, ou seja, construídos em Flash ou Flex, e invariavelmente o produto do sistema é um relatório em PDF.

Observando a frase anterior mais detalhadamente, concluímos que a tecnologia Adobe está presente na construção da maioria dos softwares RIA. Sabendo disto, a Adobe têm aperfeiçoando o ColdFusion Server para facilitar a construção das aplicações RIA.

E cada incremento inova de algum conceito ou funcionalidade, neste ponto, a tecnologia ColdFusion pode ser vista como um formador de opinião, com recursos usados em outras tecnologias (IDE ou Servidores), que começaram a perceber que as facilidades do ColdFusion não estão apenas no código CFML, mas também nos serviços.

Como exemplo podemos citar, que o ColdFusion foi o primeiro servidor a receber suporte AMF com o NetServices.as, os componentes auto documentáveis, componentes multisserviço (classes publica, classe remota ou ainda wsdl ), com o serviço RDS, entre outros.

Lembro ainda, que nessa época (NetServices), a união ColdFusion Server+AMF foi o embrião do conceito RIA, pois anteriormente, aplicativos RIA só realizava requisições XML (estático ou dinâmico) , e posteriormente nasceria o Flex 1 junto com a geração MX, que hoje é um dos serviços ColdFusion.

Um incremento mais recente, foi a incorporação de recursos LiveCycle ao servidor ColdFusion, possibilitando a geração e manipulação de de PDF, permitindo um gerenciamento completo dos recursos PDF, desde criação de thumbnail a controle de permissão. Onde o sistema é mais requisitado, o ColdFusion ficou mais flexível. E com suporte nativo a LiveCycle DS ou BlazeDS.

Agora, a Adobe habilita todas essas facilidades do ColdFusion para implementação direta em MXML, quando cria o CFaaS (ColdFusion as service) para versão 9.

MXML com a cara do CFML

CFaaS é um serviço ColdFusion que gerencia o acesso a um conjunto de outros serviços ColdFusion, habilitando a execução remota no servidor, sem a necessidade de construção de script no servidor, em resumo (obedecendo as regras de acesso do gerenciamento), todos os recursos descritos nos parágrafos anteriores estarão disponíveis em MXML, com auxílio de bibliotecas SWC (mxml e air) disponíveis no servidor em /CFIDE/scripts/AIR/.

Os serviços CFaaS ou tags MXML do ColdFusion, até este momento, são:

  • Chart – proxy para o serviço de geração de gráficos, que é baseado no WebCharts3D (no ColdFusion 9 o WebCharts3d está na versão 5.1). Os gráficos são gerados no formato png, jpg ou swf;
  • Document – proxy para geração de documentos imprimíveis a partir do Flash Player, os formatos dos documentos gerados são PDF ou SWF/FlashPaper;
  • Image – proxy para manipulação de imagens, hoje é possível realizar a seguentes ações: AddBorder, batchOperation, Blur, Crop, Flip, GetEXIFMetaData, GetEXIFTAG, GetHeight, GetIPTCMetadata, GetIPTCTag, GetWidth, GrayScale, Info, Negative, Overlay, Resize, Rotate, ScaletoFit, Sharpen, Shear;
  • Ldap – permite acesso a qualquer servidor LDAP, e a configuração da conexão entre o cliente SWF e o servidor LDAP é realizada inteiramente no MXML,;
  • Mail – sintetiza o conceito da tecnologia CFaaS, esta tag permite que qualquer aplicação SWF envie e-mail direto ao servidor STMP;
  • Pdf – proxy ao serviço de manipulação de PDF, que possui as seguintes ações: GetInfo, DeletePages, MergeFiles, ExtractPages, AddWaterMark, RemoveWaterMark, Protect, MergeSpecificPages, SetInfo, thumbnail, ProcessDDX;
  • Pop – Proxy de acesso a gerenciamento de servidores POP;
  • Conflict – gerencia conflitos em entre mensages do client, do server e a mensagem original;
  • Session – gerencia todas as operações entre o cliente AIR e o SQLite;
  • SyncManager – Classe responsável em facilitar a construção da sinconização entre o Servidor ColdFusion e o cliente AIR.

E aqui codifiquei um exemplo prático, onde o cliente criar e visualizar em FlashPaper, recebendo a url do PDF para download – Este código depende de configuração de usuário/senha e ip cliente registrados no Administrador ColdFusion; Para implementação do MXML a seguir, você deve incorporar ao projeto o arquivo /CFIDE/scripts/AIR/cfservices.swc.

mxml de exemplo

Observe que só foi usado MXML e ActionScript, obtendo o seguinte resultado:

exemplo de tela

Estou focando no CFaaS, porém, o ColdFusion 9 ainda possui incontáveis recursos para agilizar o desenvolvimento, como o suporte a ORM (Hibernate) com configuração e codificação reduzida, entre outras.

Conclusão

Com um tempo de desenvolvimento otimizado, utilizando a tecnologia CFaaS e CFML, o prazo para a entrega de um projeto será reduzido, gerando competitividade no custo do projeto, quando comparado com outra linguagem, permitindo a absorção de mais projetos em menos tempo, aumentando o lucro, diluindo o custo do ColdFusion Server.

grafico

Observação: A licença do ColdFusion Builder inclui uma licença (opcional) de Flash Builder 4.

fonte:www.mxstudio.com.br

Search Blog

Recent Comments

1-2 of 2

LuisMajano on Singleton CFML
10/26/11: Pedro bom post. Acertadamente singleton pattern e necessário em aplicativos grandes para performance. Pêro e muito melhor ocupar um dependency injection framework como wirebox o coldspring há que ajud

Pedro Claudio on Singleton CFML
10/26/11: Opa, abraços Luis. Foi justamente para provocar essa discussão que coloquei no escopo Application, entre outros motivos. Mas esse é o caminho, utilizar frameworks baseada em cache.