17
Bean Scripting Framework. 曾曾曾

Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Embed Size (px)

Citation preview

Page 1: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Bean Scripting Framework.

曾俊雄

Page 2: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

What is Scripting Language

Broader definition: all languages

Narrower definition: those programming languages requiring

no compilation or with implicit compilation

Page 3: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

For example: JavaScript

source: http://zh.wikipedia.org/wiki/JavaScript

Page 4: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Why Scripting Languages?

simplicity real time most scripting languages have good UI

integration plenty of choices

Page 5: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Where to Use Scripting Languages?

integrated with UI languages, e.x., html vs. JavaScript

event-based scenarios, e.x., XSLT vs. xpath

programming with less ability but more simplicity, e.x., JSP

Page 6: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Drawbacks

Performance!!

Page 7: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Java + Scripting Language

Background Java performs better, but more complicat

ed in syntax and requires compilation Scripting languages (e.x., JavaScript) are

much slower (almost 1000x), but much easier in syntax and requires no compilation

Page 8: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Java + Scripting language is a good compromise use java in major part use scripting language for some

customizable parts but how?

Page 9: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

JVM

byte code

script

Scripting Engine

load scripting engine with JVM, and pass scripting parts into the scripting engine.

However, different scripting engines have different interfaces……

Page 10: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Bean Scripting Framework

Actually, there is a plan to add common scripting interface into JVM with JavaSE 7.0 but when can we have JavaSE 7.0 ?!

Now, we have apache bean scripting framework http://jakarta.apache.org/bsf/

Page 11: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

BSFManager

BSFEngine

JRubyEngine JavaScriptEngine PythonEngine ……

Page 12: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Usage

Register script engine to BSFManager BSFManager.registerScriptingEngine("ruby", "org.jruby.javasupp

ort.bsf.JRubyEngine", new String[]{"rb"});

Create an instance of BSFManager BSFManager manager=new BSFManager();

Load registered script engine from the manager engine=manager.loadScriptingEngine("ruby");

Page 13: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Execute the scripting code, so it is kept in the memory engine.exec("ruby", 0, 0, “……script code……”);

Call target method declared in the scripting code engine.call(null, "actionPerformed", new java.lang.Object[]{self, arg0});

Page 14: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

This is Ruby!!

Page 15: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Why use Ruby?

Simple yet powerful exactly the same expressive power with j

ava good bridging with jvm

http://jruby.codehaus.org/

Page 16: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

Language Constructs

require 'java'

module Java include_package "java.lang" include_package "javax.swing" include_package "util.ws" include_package "java.util"end

def actionPerformed(caller, actionEvent) if actionEvent.getActionCommand()=="HelloWorld" Java::JOptionPane.showMessageDialog(caller, "HelloWorld") elsif actionEvent.getActionCommand()=="HelloWS" response=Java::WebServiceClient.send("http://localhost:8084/SpringWSTest/services", "<sayHello xmlns=\"HelloWorld\"/>") Java::JOptionPane.showMessageDialog(caller, response) elsif actionEvent.getActionCommand()=="HelloSoapHeaders" props=Java::HashMap.new props.put("{ns1}key1","value1") props.put("{ns2}key2",['_value1','_value2','_value3'].to_java) response=Java::WebServiceClient.send("http://localhost:8084/SpringWSTest/services", "<sayHello xmlns=\"HelloWorld\"/>", props) Java::JOptionPane.showMessageDialog(caller, response) endend

load java supportimport java.lang.*;

import javax.swing.*;

import util.ws.*;

import java.util.*; define function

Page 17: Bean Scripting Framework.. What is Scripting Language Broader definition: all languages Narrower definition: those programming languages requiring no

require 'java'

module Java include_package "java.lang" include_package "javax.swing" include_package "util.ws" include_package "java.util"end

def actionPerformed(caller, actionEvent) if actionEvent.getActionCommand()=="HelloWorld" Java::JOptionPane.showMessageDialog(caller, "HelloWorld") elsif actionEvent.getActionCommand()=="HelloWS" response=Java::WebServiceClient.send("http://localhost:8084/SpringWSTest/services", "<sayHello xmlns=\"HelloWorld\"/>") Java::JOptionPane.showMessageDialog(caller, response) elsif actionEvent.getActionCommand()=="HelloSoapHeaders" props=Java::HashMap.new props.put("{ns1}key1","value1") props.put("{ns2}key2",['_value1','_value2','_value3'].to_java) response=Java::WebServiceClient.send("http://localhost:8084/SpringWSTest/services", "<sayHello xmlns=\"HelloWorld\"/>", props) Java::JOptionPane.showMessageDialog(caller, response) endend

load java supportimport java.lang.*;

import javax.swing.*;

import util.ws.*;

import java.util.*; define function