<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marcelo Rodrigues &#187; Hugo</title>
	<atom:link href="http://www.marcelomx.com/tag/hugo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcelomx.com</link>
	<description>Web Developer</description>
	<lastBuildDate>Wed, 20 Apr 2011 17:49:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Alterando o Lumine Config para diferentes servidores</title>
		<link>http://www.marcelomx.com/2007/03/16/alterando-o-lumine-config-para-diferentes-servidores/</link>
		<comments>http://www.marcelomx.com/2007/03/16/alterando-o-lumine-config-para-diferentes-servidores/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 02:25:47 +0000</pubDate>
		<dc:creator>Marcelo Rodrigues</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[class path]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Hugo]]></category>
		<category><![CDATA[Lumine]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://marcelomx.wordpress.com/2007/03/16/alterando-o-lumine-config-para-diferentes-servidores/</guid>
		<description><![CDATA[Atualmente venho utilizando o Lumine, um framework usado para mapeamento objeto relacional para banco de dados, que foi desenvolvido pelo Hugo, meu amigo e ex-sócio na administração do MXSTUDIO. Não me aprofundarei falando sobre as características do framework, deixando para &#8230; <a href="http://www.marcelomx.com/2007/03/16/alterando-o-lumine-config-para-diferentes-servidores/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Atualmente venho utilizando o <a title="Lumine - Database Mapping for PHP" href="http://www.hufersil.com.br/lumine" target="_blank">Lumine</a>, um framework usado para mapeamento objeto relacional para banco de dados, que foi desenvolvido pelo Hugo, meu amigo e ex-sócio na administração do MXSTUDIO. Não me aprofundarei falando sobre as características do framework, deixando para um próximo post mais elaborado que certamente valerá a pena.</p>
<p style="text-align:justify;">Em minha opinião, o Lumine está entre as melhores ferramentas para gerar e trabalhar um camada de persistência usando o mapeamento objeto relacional de um banco, graças a sua simplicidade de implementação e velocidade na execução dos comandos de inserção e seleção de dados.</p>
<p style="text-align:justify;">Como disse anteriormente, em outro post relatarei em detalhes a ferramenta, que segundo o autor, ainda necessita de uma documentação mais completa que ainda não pôde ser feita devido à falta de tempo do mesmo. Desta forma, quem tiver interesse em contribuir, fique a vontade.</p>
<p style="text-align:justify;">No Lumine existe um arquivo de configuração que é utilizado para todas as operações entre a aplicação e o banco de dados, desde a conexão, carregamento das classes referentes aos objetos relacionais, engenharia reversa, criação deschemas, etc. Este arquivo pode ser gerado tanto em XML quanto em PHP. Particularmente, acredito que o formato PHP é mais interessante por ter as informações de configuração armazenadas em um array , impossibilitando desta forma que um usuário veja esses dados acessando o arquivo direto pela URL, caso o mesmo esteja visível na árvore de diretórios do site. Já comXML isso não acontece, a não ser que você configure os mime types permitidos para acesso externo, ou simplesmente altere a permissão do mesmo arquivo via FTP para que ele não seja lido pelo via browser.</p>
<p style="text-align:justify;">Aqui vou falar apenas do arquivo PHP, uma vez que no XML o trabalho é manual mesmo, não há outra saída. No arquivo de configuração, há duas chaves importantes que são a base para o carregamento das classes de negócio:class-path e use-cache. Veja abaixo um exemplo deste arquivo:</p>
<pre>$lumineConfig = array (
	’configuration’ =&gt; array (
		‘class-path’ =&gt; ‘C:\lumine’,
		‘host’ =&gt; ‘localhost’,
		‘database’ =&gt; ‘meudatabase’,
		‘dialect’ =&gt; ‘mysql’,
		‘port’ =&gt; ‘3306′,
		‘user’ =&gt; ‘usuario’,
		‘password’ =&gt; ‘*****’,
		‘package’ =&gt; ‘orm’,
		‘maps’ =&gt; ‘map’,
		‘use-cache’ =&gt; ‘C:\lumine\cache.txt’,
		‘remove_prefix’ =&gt; ”,
		‘acao’ =&gt; ‘Iniciar’,
		‘create-classes’ =&gt; ‘1′,
		‘create-maps’ =&gt; ‘1′,
		‘escape’ =&gt; ‘1′,
		‘empty-as-null’ =&gt; ‘1′,
		‘generate-accessors’ =&gt; ‘1′,
		‘fileDate’ =&gt; filemtime(__FILE__)
	),
	’maps’ =&gt; array (
	‘map.Pessoa’
	)
);</pre>
<p style="text-align:justify;">Repare que o valor do caminho do <span style="font-style:italic;">class-path</span> é o padrão de diretório do Windows. Supondo que o seu servidor de produção seja Linux e que o servidor de testes seja Windows, então é provável que um erro no carregamento das classes aconteça em um dos sistemas por um não reconhecer a árvore de diretório do outro. A solução neste caso seria alterar então o caminho do diretório de forma que cada sistema leia o arquivo que contenha o diretório relativo ao seu sistema de diretório, ou seja, uma versão para o Windows e outro para o Linux. Mas isso não é muito saudável, uma vez que um erro de sincronização poderia fazer com que um arquivo sobrescrevesse o outro. Já passei por esta experiência e posso afirmar que alterar caminhos físicos de diretório manualmente é extremamente trabalhoso e chato.</p>
<p style="text-align:justify;">Este arquivo de configuração pode ser gerado tanto manualmente quanto automaticamente pelo LumineReverse, uma classe utilizada para a construção das classes e mapeamentos xml do banco usando engenharia reversa. Neste processo, o Lumine gera o caminho para as classes, mapeamentos e o cache, de acordo com o sistema operacional em que ele estiver rodando. Por isso, é bom ficar atento a este detalhe.</p>
<p style="text-align:justify;">Uma solução para não ter problemas quanto ao caminho correto, é usar a função <span style="font-style:italic;">dirname </span>do php, que retorna o caminho completo do arquivo passado por parâmetro. Neste caso, o parâmetro é a constante global __FILE__, que indica o caminho do arquivo relativo aoscript que está executando o comando. Exemplo:</p>
<pre><code><span style="font-size:10pt;">&lt;?php</span></code><span style="font-size:10pt;font-family:'Courier New';">
<code>// Caminho original do arquivo: C:\aplicacao\lumine-config.php</code>
<code>echo dirname(__FILE__); // Retorna C:\aplicacao</code>
<code>?&gt;</code></span></pre>
<p style="text-align:justify;">Mas atenção, isso só é válido se você tiver o lumine-config no mesmo diretório dos diretórios de mapeamento e pacote de classes. Exemplo da estrutura:</p>
<pre><code><span style="font-size:10pt;">aplicacao</span></code><span style="font-size:10pt;font-family:'Courier New';">
<code>/mapeamentos</code>
<code>/pacote</code>
<code>lumine-config.php</code>
<code>cache.txt</code></span></pre>
<p style="text-align:justify;">Alterando então as diretivas use-cache e class-path para que ambas funcionem em qualquer servidor, com a necessidade apenas de alteração do usuário, host e senha do banco a qual o script irá se conectar, o arquivo ficará assim:</p>
<pre>$lumineConfig = array (
	’configuration’ =&gt; array (
		‘class-path’ =&gt; dirname(__FILE__),
		‘host’ =&gt; ‘localhost’,
		‘database’ =&gt; ‘meudatabase’,
		‘dialect’ =&gt; ‘mysql’,
		‘port’ =&gt; ‘3306′,
		‘user’ =&gt; ‘usuario’,
		‘password’ =&gt; ‘*****’,
		‘package’ =&gt; ‘orm’,
		‘maps’ =&gt; ‘map’,
		‘use-cache’ =&gt; dirname(__FILE__) . ‘/cache.txt’,
		‘remove_prefix’ =&gt; ”,
		‘acao’ =&gt; ‘Iniciar’,
		‘create-classes’ =&gt; ‘1′,
		‘create-maps’ =&gt; ‘1′,
		‘escape’ =&gt; ‘1′,
		‘empty-as-null’ =&gt; ‘1′,
		‘generate-accessors’ =&gt; ‘1′,
		‘fileDate’ =&gt; filemtime(__FILE__)
	),
	’maps’ =&gt; array (
	‘map.Pessoa’
	)
);</pre>
<p style="text-align:justify;">Assim, o carregamento verificará o caminho para as classes e para o arquivo cache.txt, de acordo com o que retornar a função <span style="font-style:italic;">dirname</span>, em tempo real, e com o sistema em que o script estiver rodando, eliminando a possibilidade de erros e leitura dos dados por estarem em caminhos diferentes.</p>
<p style="text-align:justify;">Em um outro artigo, falarei sobre o Lumine e introduzirei alguns macetes para inserção e seleção de dados simples e complexos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcelomx.com/2007/03/16/alterando-o-lumine-config-para-diferentes-servidores/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

