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:
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: