Skip to content
Rodrigo Turini edited this page Jan 7, 2014 · 9 revisions

configuração

Em seu web.xml, adicione:

		<context-param>
			<param-name>br.com.caelum.vraptor.environment</param-name>
			<param-value>nome_do_ambiente</param-value>
		</context-param>

onde nome_do_ambiente é o ambiente atual (PRODUCTION ou DEVELOPMENT, por exemplo).

Ou se preferir, você também pode criar uma variável global do sistema chamada VRAPTOR_ENVIRONMENT.

nome_do_ambiente.properties

Seu nome_do_ambiente.properties deve ser criado em src/main/resources. Exemplo (development.properties):

		ambiente_de_teste = true
		email_de_teste = [email protected]
		environment.controller = true

acessando propriedades de ambiente no código java

    import br.com.caelum.vraptor.environment.Environment;

    @Controller
    public class myController {
        private final Environment environment;
        private final MailSender sender;

        /**
         * @deprecated CDI eyes olny
         */
        public myController() {
            this(null, null);
        }

        @Inject
        public myController(Environment environment, MailSender sender) {
            this.environment = environment;
            this.sender = sender;
        }

        public void sendMail(String email) {
            if(environment.isDevelopment()) {
                sender.sendMailTo(environment.get("dev_mail"));
                return;
            }
            sender.sendMailTo(email);
        }
    }

acessando propriedades de ambiente no jsp

		<c:if test="${environment.isTest()}">
			<p>
				Você está no ambiente de teste. Suas ações aqui não afetarão o sistema.
			</p>
		</c:if>

		Enviando e-mail para: ${env.get('email_de_teste')}

acessando arquivos de configuração de acordo com o environment

Se você precisa acessar um arquivo de configuração diferente para suas bibliotecas, de acordo com seu ambiente, você também pode utilizar o Environemnt. Basta colocar, por exemplo, seu hibernate.cfg.xml em diretórios com o nome de seus ambientes: development e production (por exemplo). Environment.getResource(...) retornará o resource de acordo com seu ambiente atual:

	cfg = new AnnotationConfiguration();
	cfg.configure(environment.getResource("/hibernate.cfg.xml"));

Para manter compatibilidade com quem não utilizava o environment, caso o arquivo não seja encontrado no diretório com o nome do ambiente, ele será carregado no diretório root (do classpath).

Injetando o valor de suas configuração programaticamente

Você também consegue injetar suas configurações programaticamente usando o @Property, por exemplo:

    import br.com.caelum.vraptor.environment.Environment;

    @Controller
    public class myController {

        @Inject @Property("email") private String email;

        public void sendMail(String email) {
            sender.sendMailTo(email);
        }
    }

Neste caso, se o seu environment estiver com valor "DEVELOPMENT", vai injetar o valor que corresponde a chave email do arquivo development.properties, se estiver com "PRODUCTION" do production.properties e assim por diante. Dessa forma você não precisa dos ifs como: if(environment.isDevelopment()) {...} em seu código.

Outra facilidade, é que se o nome da chave for o mesmo nome do field injetado, como em nosso caso com a chave email, você pode deixar apenas o @Property que o nome será inferido. Seu controller ficaria assim:

    import br.com.caelum.vraptor.environment.Environment;

    @Controller
    public class myController {

        @Inject @Property private String email;

        public void sendMail(String email) {
            sender.sendMailTo(email);
        }
    }
Clone this wiki locally