5. Motivações para Scripting
• Customizável
Clientes alteram regras voláteis
Usuários melhoram a aplicação
• Edição em tempo real
Desenvolvedores aceleram construção
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 5
6. Usos de Scripting
• Regras de negócio
Cálculos
Validações
Fluxos
• Para desenvolvedores
Tarefas comuns e repetitivas
Produtividade
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 6
7. Usos de Scripting
• Para usuários
Tuning
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 7
8. Usos de Scripting
• Antes
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 8
9. Usos de Scripting
• Depois
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 9
10. Desvantagens?
• Uso versus Abuso
Manutenção
• É possível
Controle
• Organize a infra-estrutura do projeto
Padronização
• Escolher uma única linguagem?
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 10
11. Scripting for the Java Platform
• JSR 223
• JSE 6: Mustang
Javascript: Mozilla Rhino
• JSE 5: Tiger
• Integração plugável
Terceiros implementam “engines”
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 11
12. Scripting for the Java Platform
import javax.script.*;
public class ScriptUsage {
public static void main(String[] args) throws
ScriptException {
// cria um gerenciador de ScriptEngine.
ScriptEngineManager sem = new ScriptEngineManager();
//cria o JavaScript Engine.
ScriptEngine engine = sem.getEngineByExtension("js");
//executa o script.
engine.eval("print('hello world')");
}
}
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 12
13. Scripting for the Java Platform
• API da Scripting Platform:
ScriptEngineManager
• Objetos que localizam e instanciam Script Engines
ScriptEngine
• Objeto que executa os scripts
Bindings
• Ligação entre variáveis do script e objetos Java
ScriptContext
• Aplicação Java acessa contexto do script
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 13
14. Scripting for the Java Platform
• ScriptEngine
Principal interface do Scripting Framework
Executa os scripts: método eval
Mapeia (“bind”) objetos Java a variáveis do
script (put / get)
Engine Scope
• Invocable - opcional
Permite invocar funções e métodos em
scripts
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 14
15. Scripting for the Java Platform
• ScriptEngineManager
Implementa mecanismo de pesquisa e
instanciação dos ScriptEngines
• Mecanismo de serviço (service provider)
• Localiza por:
– Nome
– Extensão
– Tipo (MIME Type)
Mantém num escopo global, variáveis (binds)
de objetos: Global Scope
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 15
16. Demonstração
• Ferramentas do SDK
jrunscript
• Console para testes
• Execução de scripts
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 16
18. Referências
• Scripting for Java: JSR 223
http://scripting.dev.java.net
http://jcp.org/en/jsr/detail?id=223
• Ruby for Java
http://jruby.sourceforge.net
• Javascript Rhino
http://www.mozilla.org/rhino
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 18
19. Perguntas?
camara@summa-tech.com
http://blog.renatocamara.com.br
www.summa-tech.com
12/02/07 Application Modernization. Proprietary to Summa Technologies, (c) 2005. 19
Notas do Editor
Muitas scripting languages são dinamicamente tipadas. Você pode criar uma variável sem pré-determinar o tipo e reusar a variável para armazenar valores de diferentes “tipos” Também scripting languages tende a executar muitas converções automaticamente, ex: 10 para texto “10”. Essas qualidades de scripting languages ajuda a escrever mais rapidamente aplicações. Processo tradicional “editar-compilar-relacionar-rodar”, sendo interpretada o processo de “compilação” é eliminado.
A manutenção pode ser uma situação custosa se o scripting for muito complexo. Separação dos scripts em diretórios, inclusive cada linguagem deve ter seu diretório. Padronização? O suporte a scripting no Java permite você usar no mesmo projeto várias linguagens scripts. Exemplos!!!
O java SE 6 lançado recentimente vem com diversas novidades. Mais funcionalidades, mais performance e SUPORTE A SCRIPT. Falar a famosa frase, “Scripting in Java basicamente permite acessar e controlar objetos Java dentro de um ambiente scripting, ou seja embutindo ambietes scripting dentro de aplicações Java”.
ScriptEngineManager é a classe que implementa um mecanismo de pesquisa e inicialização de uma determinada ScriptEngine. ScriptEngine é a interface fundamental que cujo os métodos devem ser funcionais. Estes métodos fornece a funcionalidade básica de scripting. Todas Script Engine deve fornecer a implemetação dessa interface. Isto é obedecer a especificação.
ScriptEngineManager é a classe que implementa um mecanismo de pesquisa e inicialização de uma ScriptEngine. ScriptEngine é a interface fundamental, cujo os métodos são métodos funcionais e que cada ScriptEngine de uma linguagem deve implementar. ScriptContext é a interface que permite ligar diversos bindings e escopos para uma determinada ScriptEngine. Bindings é a interface que permite a ligação entre variáveis script com objetos Java.
ScriptEngine é a interface fundamental que cujo os métodos devem ser funcionais. Estes métodos fornece a funcionalidade básica de scripting. Todas Script Engine deve fornecer a implemetação dessa interface. Isto é obedecer a especificação. - Invocable é a interface que permite invocar funções e métodos em scripts.