0
(J)Ruby Rules
   Engine


     Arjan Blom
       Profict
Agenda


  Rule Engine
    DSL/BNL
Metaprogrammeren
     JRuby
Business Rules ?
“Het bel tegoed moet
 minimaal €2,- zijn”
=> “Het bel tegoed moet minimaal €2,- zijn”
Bellen




         => “Het bel tegoed moet minimaal €2,- zijn”
SMS




      ...
“Het bel tegoed moet
 minimaal €1,- zijn”
=> “Het bel tegoed moet minimaal €1,- zijn”
Bellen




         => “Het bel tegoed moet minimaal €2,- zijn”
SMS




      ...
Bellen




SMS



         Rule engine




MMS




Video
[when]There is a customer ticket with status of quot;{status}quot;=customer : Customer( ) ticket :
   Ticket( customer == ...
Domain Specific        Business Natural
        Language                     Language
              DRY                   ...
compensate $3000 each past 30




compensate $3000 for each deal
   closed in the past 30 days
Van een Boeking mag de datum niet groter
      zijn dan de project einddatum
Van een Boeking mag de datum niet groter
      zijn dan de project einddatum




 .getDatum < .getProject.getEindDatum
Klassen

                            _groter
                            _niet
                            _project
      ...
keywords quot;groterquot; do
      quot;> quot;
end


domain_class(quot;Boekingquot;,
quot;nl.profict.stage.urenreg.domein...
Van een Boeking mag de datum niet groter
      zijn dan de project einddatum



                  filter




_van._een._Bo...
instance_eval(RULE)
              +
   domein klasse methodes
             _boeking

            _project

              +...
_van._een._Boeking._mag._de._datum._niet._
  groter._zijn._dan._de._project._einddatum




            Nieuwe Rule Class
def method_missing(sym, *args) # geen methode gevonden
      transform(sym.to_s)
      self
end



def transform(rule_piec...
mag de datum niet groter zijn dan de project
                   einddatum




   getDatum < getProject.getEindDatum
Boekin...
JRuby
Snelheid (JIT)


       Java technieken / libs


Ondersteuning door grote spelers (sun)


    Ruby op Java Applicatie Server
bsfManager = new BSFManager();

BSFManager.registerScriptingEngine(quot;rubyquot;,
 quot;org.jruby.javasupport.bsf.JRubyEn...
Gebruik de juiste communicatie
           middelen


    Onderschat niet de JAS


 Pas op met method_missing
DEMO
Vragen ?



        ?
      e-mail :
arjan.blom@profict.nl
JRuby Rules
JRuby Rules
JRuby Rules
JRuby Rules
JRuby Rules
JRuby Rules
Upcoming SlideShare
Loading in...5
×

JRuby Rules

1,012

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,012
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×