JRuby Rules

1,266 views

Published on

Arjan Blom's slide's of his presentation at the RubyenRails 2007 conf in Amsterdam.

Published in: Business, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,266
On SlideShare
0
From Embeds
0
Number of Embeds
42
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

JRuby Rules

  1. 1. (J)Ruby Rules Engine Arjan Blom Profict
  2. 2. Agenda Rule Engine DSL/BNL Metaprogrammeren JRuby
  3. 3. Business Rules ?
  4. 4. “Het bel tegoed moet minimaal €2,- zijn”
  5. 5. => “Het bel tegoed moet minimaal €2,- zijn” Bellen => “Het bel tegoed moet minimaal €2,- zijn” SMS => “Het bel tegoed moet minimaal €2,- zijn” MMS => “Het bel tegoed moet minimaal €2,- zijn” Video
  6. 6. “Het bel tegoed moet minimaal €1,- zijn”
  7. 7. => “Het bel tegoed moet minimaal €1,- zijn” Bellen => “Het bel tegoed moet minimaal €2,- zijn” SMS => “Het bel tegoed moet minimaal €1,- zijn” MMS => “Het bel tegoed moet minimaal €1,- zijn” Video
  8. 8. Bellen SMS Rule engine MMS Video
  9. 9. [when]There is a customer ticket with status of quot;{status}quot;=customer : Customer( ) ticket : Ticket( customer == customer, status == quot;{status}quot; ) [when]There is a quot;{subscription}quot; customer with a ticket status of quot;{status}quot;=customer : Customer(subscription == quot;{subscription}quot;) ticket : Ticket( customer == customer, status == quot;{status}quot;) [then]Log quot;{message}quot;=System.out.println(quot;{message} quot; + ticket); [then]Escalate the ticket=ticket.setStatus(quot;Escalatequot;); modify(ticket); [then]Send escalation email=sendEscalationEmail( customer, ticket ); JBoss Rule Example
  10. 10. Domain Specific Business Natural Language Language DRY DAMP ● ● Mogelijk lastiger te Zelfstandig ● ● begrijpen Bevordert de ● leesbaarheid Jay Fields
  11. 11. compensate $3000 each past 30 compensate $3000 for each deal closed in the past 30 days
  12. 12. Van een Boeking mag de datum niet groter zijn dan de project einddatum
  13. 13. Van een Boeking mag de datum niet groter zijn dan de project einddatum .getDatum < .getProject.getEindDatum
  14. 14. Klassen _groter _niet _project _boeking transformator Semantiek _einddatum _datum
  15. 15. keywords quot;groterquot; do quot;> quot; end domain_class(quot;Boekingquot;, quot;nl.profict.stage.urenreg.domein.Boekingquot;)
  16. 16. Van een Boeking mag de datum niet groter zijn dan de project einddatum filter _van._een._Boeking._mag._de._datum._niet._ groter._zijn._dan._de._project._einddatum!
  17. 17. instance_eval(RULE) + domein klasse methodes _boeking _project + method_missing(method , *args)
  18. 18. _van._een._Boeking._mag._de._datum._niet._ groter._zijn._dan._de._project._einddatum Nieuwe Rule Class
  19. 19. def method_missing(sym, *args) # geen methode gevonden transform(sym.to_s) self end def transform(rule_piece) case when @semantics.respond_to?(rule_piece) append(@semantics.send(rule_piece)) [...] Rule Class def _groter “> ” end Semantiek Class
  20. 20. mag de datum niet groter zijn dan de project einddatum getDatum < getProject.getEindDatum Boeking.getdatum < Boeking.getProject.getEindatum
  21. 21. JRuby
  22. 22. Snelheid (JIT) Java technieken / libs Ondersteuning door grote spelers (sun) Ruby op Java Applicatie Server
  23. 23. bsfManager = new BSFManager(); BSFManager.registerScriptingEngine(quot;rubyquot;, quot;org.jruby.javasupport.bsf.JRubyEnginequot;, new String[] { quot;rbquot; }); bsfManager.registerBean(quot;Objectquot;, domainObject); bsfManager.eval(quot;rubyquot;,quot;(java)quot;,1,1, quot;puts quot;This is a test.quot;quot;);
  24. 24. Gebruik de juiste communicatie middelen Onderschat niet de JAS Pas op met method_missing
  25. 25. DEMO
  26. 26. Vragen ? ? e-mail : arjan.blom@profict.nl

×