<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "24) Como utilizar arquivos de configurações no mentawai"]]></title>
		<link>http://forum.mentaframework.org/posts/list/19.page</link>
		<description><![CDATA[Latest messages posted in the topic "24) Como utilizar arquivos de configurações no mentawai"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ Em muitos ambientes de desenvolvimento de aplicações temos algumas etapas, uma duas até mesmo três ou mais etapas, exemplo: desenvolvimento, homologação, e produção.

Por muitas vezes, essas etapas têm suas configurações próprias, como o variáveis globais, Banco de dados, configurações em geral. Nós podemos chegar a ter 3 (três) banco de dados diferentes, 1 (um) para o desenvolvedor, outro para homologação do sistema e um terceiro definitivo que é o da produção. 

Agora, imagine você ter que lembrar de sempre ALTERAR as configurações que indique qual banco de dados, usuário, senha, etc no arquivo ApplicationManager, produção zero correto? pense então se você se esquece de configurar este arquivo antes de envia-lo pra produção, na hora que você lembrar da besteira que fez, a primeira coisa que você vai dizer é "sujô!" (existem outras)  :shock:. Acredito que todos já passamos por algo parecido com isto. 

Vendo esta dificuldade com relação à configurações, foi implementada uma solução excelente no mentawai, que é a utilização de arquivos <b>.properties</b> para efetuar essas configurações. Bom isso não teria nada demais, o uso de arquivos properties é bem comum hoje me dia, mas não é no comum que o menta se destaca e sim no SIMPLES.

<b>a) Para que serve um arquivo de configuração?</b>
Acho que as palavras do Sérgio descrevem bem isso, "Para aquelas configurações totalmente estáticas e burras que você não quer deixar hardcoded dentro da configuração programática".

<b>b) Qual a vantagem de se utilizar?</b>
Bom, acredito que alguns frameworks devem oferecem este tipo de configuração, não sei, mas como no mentawai a filosofia é opcional e produtividade sempre ON, ao invés de você possuir apenas um arquivo de configuração da aplicação que é a maioria dos casos, você poderá ter N arquivos de configurações, isso siginifica que teóricamente nada te impede de ter N etapas, N Bancos, N "Variáveis" globais, whatever... para cada etapa (Desenvolvimento, Homologação, Procução, . . .).

"Não configurar é 100 vezes melhor do que configurar, seja lá com o que, mas para certas coisas fica complicado fugir da configuração. Ex: DI, IoC, Transações, Autenticação, Autorização, Tratamento de Exeptions, etc." Sérgio (GUJ - http://www.guj.com.br/posts/list/65171.java#343531)

<b>c) Mas como ele sabe qual o arquivo a ser correto a ser utilizado, onde fica este arquivo ?</b>
- Através do <b>HOSTNAME </b>da máquina. O arquivo deverá se chamar <b>appManager-HOSTNAME.properties</b>, caso o mesmo não exista ele procurará por <b>appManager.properties</b>. 
- Os arquivos deverão estar dentro WEB-INF.

<b>Exemplo:</b>
Digamos que eu esteja utilizando uma máquina com o nome/hostname "<b>leiber</b>" para a <i>etapa de desenvolvimento</i> de uma aplicação. Nela temos o Eclipse, Tomcat, e o Banco de dados Instalados. Como podemos ver está tudo na mesma máquina, logo teremos um arquivo voltado para configurar a aplicação para este hostname então teremos o arquivo <b>appManager-leiber.properties.</b>

<b>d) Quantos arquivos de configurações devo deixar dentro do WEB-INF? </b>
Quantos forem os necessarios. Sugiro, que se você tem 2 (duas) etapas, DESENVOLVIMENTO (<b>leiber</b>) e PRODUÇÃO (<b>myAppServer</b>) por exemplo, então faça 2 (dois) arquivos, um para cada um dos HOSTNAME, e um terceiro DEFAULT (<b>appManager.properties</b>)  com as configuração idénticas ao do PRODUÇÃO, só or segurança.

<b>e) A aplicação encontrará este arquivo sozinho?</b>
Sim, Ele sempre vai procurar PRIMEIRO pelo arquivo que contenha o nome do hostname da maquina, caso não encontre assumirá o "default" conforme dito anteriormente no "ítem d".

<b>f) Como posso utilizar ?</b>
Basta utilziar o método getProperties do AplicationManager, confome o exemplo abaixo.

<b>Vamos ao exemplo prático.
Primeiro passo: vamos criar os arquivos de configuração.</b>
Utilizando a idéia do "ítem d" teremos então 2 (dois )arquivos config um para o desenvolvimento (leiber) outro para o servidor de produção (myAppServer) onde nele teremos apenas um TOMCAT e o banco de dados estará em outro server. 

Então conforme o "ítem d", o nome da máquina de desenvolvimento é "leiber", portanto vamos criar um arquivo dentro de WEB-INF com o nome appManager-leiber.properties, neste arquivo colocaremos as configurações do banco de dados que é local, e uma informação extra global como o nome da aplicação.

<b>No arquivo appManager-leiber.properties teremos:</b>
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
#Atenção!!! arquivo de configuração do servidor de desenvolvimento
database.server = localhost
database.name = database
database.username = user
database.password = passw0rd
webapp.name = Abra a sua mente! Use mentawai
</pre>
		</div>

A "variável" apenas quardará o nome de nossa aplicação, lembre-se as "variáveis" podem ser como você achar conveniente, este é apenas um exemplo.

<b>No arquivo appManager-myAppServer.properties teremos:</b>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
#Atenção!!! arquivo de configuração do servidor de produção
database.server = 192.168.0.25 #Endereço do servidor na rede
database.name = producao_database
database.username = security_user
database.password = security_passw0rd
webapp.name = Insisto!!!!!!! Abra a sua mente! Use mentawai
</pre>
		</div>

<b>Segundo passo: vamos abrir o arquivo e utilizar seus dados.</b>
Para abrir arquivo basta dar um getProperties() que o ApplicationManager irá procurar o arquivo correto, pegaremos essas informações e adicionaremos as "variáveis". 

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class ApplicationManager extends org.mentawai.core.ApplicationManager {

    public void init&#40;Context application&#41; {
         Properties props getProperties&#40;&#41;;
         private String server   = props.getProperty&#40;"database.server"&#41;; //adicinando o conteúdo de database.server em server
         private String database = props.getProperty&#40;"database.name"&#41;; //adicinando o conteúdo de database.name em database 
         private String username = props.getProperty&#40;"database.username"&#41;; //adicinando o conteúdo de database.username em username 
         private String password = props.getProperty&#40;"database.password"&#41;; //adicinando o conteúdo de database.password em password 
         private String appName= props.getProperty&#40;"webapp.name"&#41;; //adicinando o conteúdo de webapp.name em appName
      application.setAttribute&#40;"appName", appName&#41;;

//Utilizando  os dados recebidos.
//Os 4 &#40;quatro&#41; primeiros fazem referencia ao banco de dados, então vamos configura-lo.

       this.connHandler = new C3P0ConnectionHandle&#40;"com.mysql.jdbc.Driver","jdbc:mysql://"+server+"/"+database,username,password&#41;;
        props.clear&#40;&#41;; //Limpa o properties
}
</pre>
		</div>

Repare que não precisarei fazer mais nada, se o server for identificado como "leiber" ele utilizará os dados dos mesmo, caso seja o myAppServer ídem.

<b>Para que serve o appName?</b>
É apenas para ilustrar a você, que "teóricamente" você poderá armazenar e utilizar como quizer, qualquer tipo dado/informação que você ache necessário ao sistema. Através dessa informação armazenada no application, você poderá utilizar em qualquer lugar da aplicação. Por exemplo: Nas actions basta chamar  <b>application.getAttribute("appNome")</b>, em outras classes basta dar um <b>ApplicationManager.getApplication().getAttribute("appNome").toString()</b>.

Você pode por exemplo, criar uma "variável"<b> max_user_login</b> no seu arquivo propertie e utilizar esse dado pra quardar quantos usuários podem estar logado no sistema ao mesmo tempo, basta que vc implemente o <b>HttpSessionAttributeListener</b> em uma classe ou mesmo seu LoginAction.

É apenas uma das N formas de se fazer isso. O que importa é a UTILIDADE de se guardar algo no application.

O post é um pouco grande, mas lembre-se boa parte dos usuários do mentawai são iniciantes, então este post está primeiramente dedicado a eles.

Bom dúvidas ou sugestões, Utilizem o Forum. 

Abraço a todos. ]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#12025</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#12025</link>
				<pubDate><![CDATA[Tue, 4 Sep 2007 17:08:46]]> GMT</pubDate>
				<author><![CDATA[ IceW0lf]]></author>
			</item>
			<item>
				<title>FAQ: Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ Legal, cara!

Eu havia implementado um esquema de carregamento próprio de Properties e tal. Mas deixando o Menta carregar fica bem melhor.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#12038</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#12038</link>
				<pubDate><![CDATA[Thu, 6 Sep 2007 14:08:38]]> GMT</pubDate>
				<author><![CDATA[ YkyMatt]]></author>
			</item>
			<item>
				<title>Re:24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ Boa noite pessoal , estou desenvolvendo uma aplicação e estou usando esta idéia do properties mas a linha de comando abaixo não reconhece na minha aplicação  , na classe  ApplicationManager:

     Properties props getProperties();


Alguem poderia me ajudar ....

Obrigado]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#13316</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#13316</link>
				<pubDate><![CDATA[Tue, 20 Nov 2007 18:24:12]]> GMT</pubDate>
				<author><![CDATA[ Chantal]]></author>
			</item>
			<item>
				<title>Re:24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ <p></p>

		<cite>Chantal wrote:</cite><br>
		<blockquote>Boa noite pessoal , estou desenvolvendo uma aplicação e estou usando esta idéia do properties mas a linha de comando abaixo não reconhece na minha aplicação  , na classe  ApplicationManager:

     Properties props getProperties();


Alguem poderia me ajudar ....

Obrigado&nbsp;
		</blockquote>

Dentro de qualquer método do seu application manager vc tem que fazer:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

Properties prop = getProperties&#40;&#41;;

</pre>
		</div>

E não esqueça de importar lá em cima o properties:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

import java.util.Properties;

</pre>
		</div>

Ou usa o Organize Imports do Eclipse...]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#13318</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#13318</link>
				<pubDate><![CDATA[Tue, 20 Nov 2007 19:36:54]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ eu digitei conforme instruções  e estou usando o import , mas o erro que dá é 

library-inclusion-in-manifest:
Compiling 2 source files to C:\desenvolvimento_software\projetos\SOS\build\web\WEB-INF\classes
C:\desenvolvimento_software\projetos\SOS\src\ApplicationManager.java:81: ';' expected
        Properties props getProperties();
1 error

Estou usando o NetBeans 5.5.1.

Desde já agradeço pelo Apoio





<p></p>

		<cite>saoj wrote:</cite><br>
		<blockquote><p></p>

		<cite>Chantal wrote:</cite><br>
		<blockquote>Boa noite pessoal , estou desenvolvendo uma aplicação e estou usando esta idéia do properties mas a linha de comando abaixo não reconhece na minha aplicação  , na classe  ApplicationManager:

     Properties props getProperties();


Alguem poderia me ajudar ....

Obrigado&nbsp;
		</blockquote>

Dentro de qualquer método do seu application manager vc tem que fazer:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

Properties prop = getProperties&#40;&#41;;

</pre>
		</div>

E não esqueça de importar lá em cima o properties:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>

import java.util.Properties;

</pre>
		</div>

Ou usa o Organize Imports do Eclipse...&nbsp;
		</blockquote>


]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#13334</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#13334</link>
				<pubDate><![CDATA[Thu, 22 Nov 2007 16:55:40]]> GMT</pubDate>
				<author><![CDATA[ Chantal]]></author>
			</item>
			<item>
				<title>Re:24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ 
Isso aqui não existe:  Properties props getProperties(); 

Tenta assim:

 Properties props = getProperties(); ]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#13335</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#13335</link>
				<pubDate><![CDATA[Thu, 22 Nov 2007 17:39:43]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:24) Como utilizar arquivos de configurações no mentawai</title>
				<description><![CDATA[ Realmente , puxa como não vi.. obrigado pelo apoio 

Chantal

<p></p>

		<cite>saoj wrote:</cite><br>
		<blockquote>
Isso aqui não existe:  Properties props getProperties(); 

Tenta assim:

 Properties props = getProperties(); &nbsp;
		</blockquote>]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/1497.page#13336</guid>
				<link>http://forum.mentaframework.org/posts/list/1497.page#13336</link>
				<pubDate><![CDATA[Thu, 22 Nov 2007 17:42:19]]> GMT</pubDate>
				<author><![CDATA[ Chantal]]></author>
			</item>
	</channel>
</rss>
