Váriaveis Compartilhadas

<!– .style2 {color: #990000} .style4 {color: #0000FF} .style5 {color: #006600} .style6 {color: #999999} .style7 {color: #000099} .style8 {color: #009999} –>

Titulo: Variáveis compartilhadas

Quando criamos uma várivel que seja de escopo session, application ou server,
o CFMX implementa o seu compartilhamento através da classe java.util.Hashtable, independente do uso do cflock.
Esse compartilhamento ocorre em requisições simultâneas ou concorrentes a essa variável, e a java.util.Hashtable
nos salva neste instante colocando uma requisição atráz da outra, criando um enfileiramento de requisições.
O java.util.Hashtable realiza essa serialização com tanta eficácia que o seu processamento torna-se mais rápido que o
processamento do cflock
.

O uso do cflock se faz necessário quando praticamos intervenções concorretes. Vizualize o forum.mxstudio, lá você vê
ao lado de cada tópico o número de clicks.
Como fazer aquilo em uma variável de aplicação sem perder nenhum click?

Criamos uma fila separa para cada tópico, para isto basta dar um nome a ela.

<cflock name=“clicksTopcUID#idTopico#” timeout=“30″ type=“exclusive”>
<cfset Application.clicks["UID#idTopico#"]=Application.clicks["UID#idTopico#"]+1 />
</cflock>

Mas este exemplo não é suficiente para demonstrar acesso concorrente.
Imagine que você tenha que montar um relatório

extraído de banco, e que esse relatório deva ser para download,

até ai
tudo bem, mas seu ‘amigo’ sugeriu que esse arquivo já venha compactado. Grande ‘amigo’!
Para o código que será demonstrado

é necessária a instalação da CFX_JCompress.

<cflock name=“criando_xls_compactado_usando_lock” timeout=“60″ type=“exclusive”>
<cfquery name=“qEnquete” datasource=“mxstudio”>
SELECT
enquete_perguntas.pergunta,
enquete_respostas.resposta,
enquete_respostas.votos
FROM
enquete_perguntas,
enquete_respostas
WHERE
enquete_respostas.cod_pergunta=enquete_perguntas.cod
ORDER BY
enquete_perguntas.pergunta,
enquete_respostas.resposta
</cfquery>
<cfsavecontent variable=
“o_xls”>
<cfheader name=
“Content-Type” value=“application/msexcel”>
<table border=“0″ cellspacing=“0″ cellpadding=“0″>
<cfoutput query=“qEnquete” group=“pergunta”>
<tr>
<td colspan=
“2″> #qEnquete.pergunta# </td>
</tr>
<tr>
<td>
Resposta</td>
<td>
Votos</td>
</tr>

<cfoutput>
<tr>
<td>
#qEnquete.resposta# </td>
<td>
#qEnquete.votos#</td>
</tr>

</cfoutput>
<tr>
<td colspan=
“2″> </td>
</tr>

</cfoutput>
</table>
</cfsavecontent>
<cfset
Variables.PATH=ExpandPath(“.”)&“\enquete” />
<cfset
Variables.XLS=Variables.PATH&“.xls” />
<cfset
Variables.ZIP=Variables.PATH&“.zip” />
<cfif
FileExists(Variables.XLS)>
<cffile action=
“delete” file=“#Variables.XLS#” />
</cfif>
<cffile action=
“write” file=“#Variables.XLS#” output=“#o_xls#”>
<cfif
FileExists(Variables.ZIP)>
<cffile action=
“delete” file=“#Variables.ZIP#” />
</cfif>

<cfx_JCompress action=“new” filein=“#Variables.XLS#” fileout=“#Variables.ZIP#” />
<cffile action=“delete” file=“#Variables.XLS#” />
<cfheader name=
“Content-Disposition” value=“attachment;filename=#Variables.ZIP#” />
<cfcontent type=
“application/x-zip-compressed” file=“#Variables.ZIP#” deletefile=“yes” />
</cflock>

Veja que o código todo foi travado, isso impede que o xls seja excluído por um outro usuário antes de ter sido compactado,
ou que um zip sobrescreva outro.

Espero que tenham gostado.

Escrito por Pedro Claudio on fevereiro 28, 2005. Arquivado em Coldfusion. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>