terça-feira, 20 de março de 2012

Jakarta POI 32 Bits em IIS de 64 Bits

Essa discussão já é antiga, mas infelizmente sem solução ainda, pelo menos gratuita. Surgiram muitas boas idéias, mas infelizmente todas requerem muito tempo, esforço e dedicação para que o resultado final seja de fato satisfatório, então, como não dispomos pelo menos do primeiro fator, vamos a uma solução 'paliativa', para não dizer 'gambiarrativa'.

Aliás, só um comentário, mesmo com toda a evolução dos sistemas, o Excel ainda é uma ferramenta indispensável no nivel gerencial, não? Interessante isso, ainda não surgiu um mecanismo tão eficiente para visualizar, manipular, avaliar, filtrar, informações.

A questão da geração de Excel em Genexus, já é um assunto meio delicado, que necessita de bibliotecas externas acopladas ao sistema, assunto já bastante discutido e explorado anteriormente em dois Posts:
Portanto, temos o  o Jakarta.POI e o ExcelLite, e ambos operam de modo muito semelhante, mas trazem consigo restrições:
  1. JakartaPoi: sem restrições operacionais, gratuito e roda apenas em 32 bits, e se seu sistema for 64 você será premiado com a seguinte mensagem:
    Não foi possível carregar arquivo ou assembly 'file:///C:\Models\Teste\Teste1\CSharpModel\web\bin\Jakarta.POI.dll' ou uma de suas dependências. Foi feita uma tentativa de se carregar um programa com um formato incorreto.
    como fazer entao:
  2. ExcelLite: roda em 32 ou 64 bits, possui uma versão gratuita mas com o limite de 150 linhas por planilha.
Então, se o Jakarta resolve a situação, temos a opção de permitir que rode no IIS7.0, em nosso belo Windows 64Bits. Solução viável, mas entenda, não definitiva.



Operação 64To32Bits
Seria quase um DTOC() ou CTOD(), mas nesse caso com consequencias ruins no final das contas, pois a idéia aqui é baixar o nível de 64 para 32 bits, ou se preferir, 'compatibilizar' o IIS para rodar DLL's de 32 no servidor de 64 bits.
  1. Execute o comando para ver quais Pools estão configurados em seu IIS 7.0 para rodar com 32 bits.

    C:\Windows\System32\inetsrv\appcmd.exe list apppool /Enable32BitAppOnWin64:true
     
  2. Se sua aplicação não aparecer na lista resultante, então será necessário inclui-la no modo de compatibilização.

    C:\Windows\System32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true
Feito isso, sua aplicação estará apta a rodar o Jakarta POI normalmente no IIS 7.0, mas vou deixar as conclusões dessa iniciativa para você mesmo avaliar.

Outra possibilidade é no próprio IIS habilitar a propriedade do POOL (Habilitar Aplicativos de 32-Bits), em Configurações Avançadas http://www.genexando.com/2011/07/attempt-was-made-to-load-program-with.html)

Caso queira saber o comportamento do IIS com isso, pode encontrar maiores informações em  http://learn.iis.net/page.aspx/201/32-bit-mode-worker-processes/