Mentawai Web Framework

Configuração via Script

DSL significa (pelo menos neste contexto) Dynamic Scripting Languages (em português Linguagens de Scripts Dinâmicas) como Python, Perl, Ruby, Groovy, Beanshell, etc. O Mentawai pode ser estendido para suportar configuração por qualquer DSL usando a classe abstrata org.mentawai.core.ScriptApplicationManager. O Mentawai já vem com suporte nativo a BeanShell com a classe org.mentawai.core.BshApplicationManager, mas o suporte a JRuby, Jython ou Groovy devem aparecer logo quando outras pessas estenderem o ScriptApplicationManager para esse fim.

Vantagens que podem ser obtidas com as DSL:

  • Abordagem pragmatica com menos verbosidade e com um código mais objetivo.

  • Não precisa compilar o script de configuração.

  • Recarga facilitada da configuração no momento que ela é alterada no disco.

Antes de começar a converter seus antigos arquivos de configurações para uma DSL, você deve considerar que o Mentawa já tem um hot-redeploy de ApplicationManager, em outras palavras, se você modificar seu arquivo ApplicationManager.java, recompila-lo e substituir o seu antigo ApplicationManager.class pelo novo, o controller irá detectar isso e recarregar a classe automaticamente com um novo classloader.

Iremos mostrar abaixo um exemplo de como configurar seu aplicação com um script BeanShell. Antes de mais nada você precisa informar a sua aplicação que você quer usar o BshApplicationManager e não o bom e velho ApplicationManager que é carregado por padrão:

	<servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>org.mentawai.core.Controller</servlet-class>
        <init-param>
            <param-name>applicationManager</param-name>
            <param-value>org.mentawai.core.BshApplicationManager</param-value>
        </init-param>  
		<load-on-startup>1</load-on-startup>		
    </servlet>
					

O BshApplicationManager assume que o seu script ApplicationManager.bsh estará na pasta /WEB-INF e conterá um método definido por config(appMgr, application), onde appMgr é a referência para o application manager do Mentawai (org.mentawai.core.ApplicationManager) e application é uma referência ao contexto da aplicação (org.mentawai.core.ApplicationContext). Abaixo está o exemplo de um ApplicationManager.bsh:


import org.mentawai.core.*;
import org.mentawai.i18n.*;
import org.mentawai.filter.converter.*;
import calculator.*;

config(appMgr, application) {
        
    appMgr.setDebugMode(true);
    
    LocaleManager.add(new Locale("pt", "BR"));
    LocaleManager.add(new Locale("en", "US"));
    
    appMgr.action("/calc", CalcAction.class)
    
        .on(SUCCESS, fwd("/calc.jsp"))
        .on(ERROR, fwd("/calc.jsp"))
        
        .filter(new CalcValidator())
        .filter(new DoubleConverterFilter("numberOne", "numberTwo"));
        
    appMgr.action("/calc", CalcAction.class, "multiply")
    
        .on(SUCCESS, fwd("/calc.jsp"))
        .on(ERROR, fwd("/calc.jsp"))
        
        .filter(new CalcValidator())
        .filter(new DoubleConverterFilter("numberOne", "numberTwo"));
        
}                
				

Você pode também estender o BshApplicationManager para alterar o seu comportamente padrão como o nome do script, sua localição e o método. Dê uma olhada na Documentação da API para mais detalhes sobre esta classe: