SlideShare a Scribd company logo
1 of 89
Download to read offline
Mark
     Proctor
    Project Lead




●
  The SkyNet funding bill is passed.
●
  The system goes online on August 4th, 1997.
●
  Human decisions are removed from strategic defense.
●
  SkyNet begins to learn at a geometric rate.
●
  It becomes self-aware at 2:14am Eastern time, August
29th
●
  In a panic, they try to pull the plug.
●
  And, Skynet fights back
Introduction




Drools     Drools     Drools     Drools
Expert      Flow      Fusion     Guvnor


    Business Logic integration Platform



                                          2
Drools Expert
Learn by Example
Classes

                                                       C a s h f lo w
     A cco u n t
                                                  D a te d a te
lo n g a c c o u n t N o
                                                  d o u b le a m o u n t
d o u b le b a la n c e
                                                  in t t y p e
                                                  lo n g a c c o u n t N o




                           A c c o u n t in g P e r io d

                           D a te s ta r t
                           D a te e n d




                                                                             5
Creating Views with
                           Triggers
        date          amount            type       accountNo     AccountingPeriod
 12-Jan-07                      100 CREDIT     1                       start               end
 2-Feb-07                       200 DEBIT      1                     01-Jan-07          31-Mar-07
 18-May-07                       50 CREDIT     1
 9-Mar-07                        75 CREDIT     1                 Account
                                                                    accountNo             balance
                                                                 1                  0
increase balance for AccountPeriod Credits                 decrease balance for AccountPeriod Debits

select * from Account acc,                                     select * from Account acc,
     Cashflow cf, AccountPeriod ap                                  Cashflow cf, AccountPeriod ap
where acc.accountNo == cf.accountNo and                        where acc.accountNo == cf.accountNo and
      cf.type == CREDIT                                              cf.type == DEBIT
      cf.date >= ap.start and                                        cf.date >= ap.start and
      cf.date <= ap.end                                              cf.date <= ap.end

  trigger : acc.balance += cf.amount                            trigger : acc.balance -= cf.amount

 CashFlow                                                      CashFlow
        date           amount          type
                                                                      date          amount            type
 12-Jan-07                      100 CREDIT
                                                               2-Feb-07                       200 DEBIT
 9-Mar-07                        75 CREDIT


 Account
    accountNo              balance
 1                   -25
                                                                                                             6
What is a Rule

                                     salience     <int>
Quotes on Rule names are
                                     agenda-group <string>
optional if the rule name has
                                     no-loop      <boolean>
no spaces.
                                     auto-focus  <boolean>
                                     duration     <long>
                                     ....
   • rule “<name>”
         <attribute> <value>
         when
             <LHS>
         then
             <RHS>         RHS can be any valid java.
                           Or MVEL. Other languages
     end                   could be added.




                                                              7
Imperative vs Declarative
             Methods that must                  specific passing of
             be called directly                 instances


        •         public void helloMark(Person person) {
Rules can never     if ( person.getName().equals( “mark” ) {
be called directly        System.out.println( “Hello Mark” );
                      }               Specific instances
                  }                   cannot be passed.

        •   rule “Hello Mark”                     LHS
                when
                    Person( name == “mark” )
                then
                    System.out.println( “Hello Mark” );
            end
                                     RHS




                                                                      8
What is a Pattern
                            P a tte rn

   O b je c t T y p e               F ie ld C o n s t r a in t

                        F ie ld N a m e                      R e s t r ic t io n


                                                      E v a lu a t o r      V a lu e



S h o w e r( te m p e r a tu re = = “ h o t” )

                                                                                       9
Bringing it Together
select * from Account acc,
       Cashflow cf, AccountPeriod ap
where acc.accountNo == cf.accountNo and
        cf.type == CREDIT
        cf.date >= ap.start and
        cf.date <= ap.end            Pattern
  trigger : acc.balance += cf.amount
 Pattern Binding

                                               field Binding

rule “increase balance for AccountPeriod Credits”
       when                                     Variable Restriction
            ap : AccountPeriod()
            acc : Account( $accountNo : accountNo )
            CashFlow( type == CREDIT,
                              accountNo == $accountNo,
Literal Restriction           date >= ap.start && <= ap.end,
                              $ammount : ammount )
       then
            acc.balance += $amount;             Multri Restriction - Variable
end                                             Restriction


                                                  field Binding
        Consequence (RHS)
                                                                                10
Rules as a “view”
         date       amount           type       accountNo   AccountingPeriod
  12-Jan-07                  100 CREDIT     1                     start               end
  2-Feb-07                   200 DEBIT      1                   01-Jan-07          31-Mar-07
  18-May-07                   50 CREDIT     1
  9-Mar-07                    75 CREDIT     1               Account
                                                               accountNo             balance
                                                            1                  0
rule “increase balance for AccountPeriod    rule “decrease balance for AccountPeriod
       Credits”                                    Debits”
  when                                        when
    ap : AccountPeriod()                        ap : AccountPeriod()
    acc : Account( $accountNo : accountNo )     acc : Account( $accountNo : accountNo )

    CashFlow( type == CREDIT,                     CashFlow( type == DEBIT,
                accountNo == $accountNo,                      accountNo == $accountNo,
                date >= ap.start && <= ap.end,                date >= ap.start && <= ap.end,
                $ammount : ammount )                          $ammount : ammount )
  then                                          then
    acc.balance += $amount;                       acc.balance -= $amount;
end CashFlow                                  end   CashFlow
           date         amount        type                 date         amount         type
    12-Jan-07                  100 CREDIT           2-Feb-07                   200 DEBIT
    9-Mar-07                    75 CREDIT

    Account
       accountNo           balance
    1                -25
                                                                                               11
Patterns in more details

CashFlow( type == “credit” )

$ap : AccountPeriod()
CashFlow( date >= $ap.start )


$ap : AccountPeriod()
CashFlow( date >= $ap.start && <= $ap.end )


$ap : AccountPeriod()
CashFlow( type == “credit”,
           date >= $ap.start && <= $ap.end )


                                               12
More Pattern Examples

Person( $age : age )
Person( age == ( $age + 1 ) )



Person( $age : age )
Person( eval( age == $age + 1 ) )



Person( $age1 : age )
Person( $age2 : age )
eval( $age2 == $age1 + 1 )




                                    13
More Pattern
           Examples
Person(age > 30 && < 40 || hair == “black”)

Person(age > 30 && < 40 || hair in (“black”, “brown”) )


Person( (age > 30 && < 40 && hair == “black”)
         ||
        (age > 50 && hair == “grey”) )


Person(pets contain $rover )


Person(pets[’rover’].type == “dog”)


Person(pets[0].type == “dog”)
                                                          14
What is a Production Rule
                  System
Codification of
the business                        Repository of
knowledge                           inserted Java
                                    instances

                        Inference
                         Engine

     Production         Pattern              Working
      Memory            Matcher              Memory


        (rules)                                (facts)
                        Agenda
                                         insert
  Rules can change                      update
      on the fly                        retract


                                                         15
Production Rule System
                               Approximated by SQL and
                               Views
T a b le s   A cco unt              A c c o u n t in g P e r io d              C a s h f lo w




                                                                                           O b je c t T y p e s   A cco unt              A c c o u n t in g P e r io d              C a s h f lo w
V ie w s                 v ie w 1                                   v ie w 2




V ie w
                                      m a in v ie w                                        R u le s                           r u le 1                                   r u le 2




                                                                                           agenda
                                                                                                                                              agenda




                                                                                                                                                                                                     16
Conflict Resolution with
             Salience
                      Salience

rule “Print blance for AccountPeriod”
      salience -50
   when
      ap : AccountPeriod()
      acc : Account( )
   then
      System.out.println( acc.accountNo + “ : “ acc.balance );
end




Agenda
     1            increase balance
     2            decrease balance               arbitrary
     3            increase balance
     4            print balance




                                                                 17
RuleFlow
           rule “increase balance for AccountPeriod Credits”
                ruleflow-group “calculation”
              when
                 ap : AccountPeriod()
                 acc : Account( $accountNo : accountNo )
                 CashFlow( type == CREDIT,
                            accountNo == $accountNo,
                            date >= ap.start && <= ap.end,
                            $ammount : ammount )
              then
                 acc.balance += $amount;
           end

                             ruleflow-group

           rule “Print blance for AccountPeriod”
                ruleflow-group “report”
              when
                 ap : AccountPeriod()
                 acc : Account( )
              then
                 System.out.println( acc.accountNo + “ : “ acc.balance );
           end




                                                                            18
Two Phase System
                                       Determine
                                     possible rules to
                                           fire
                                                               Agenda Evaluation




Working Memory Action




                                                              Rule
      insert                modify
                                                             Found             Select
                                                 Fire Rule
                                                                             Rule to Fire


                  retract




                                                                               No Rule
                                                                                Found




                                                                                   exit



                                                                                            19
Conditional
 Elements
From CE for Expressions

not Bus( color = “red” )


exists Bus( color = “red” )


forall ( $bus : Bus( color == “red” ) )


forall ( $bus : Bus( floors == 2 )
               Bus( this == $bus, color == “red” ) )




                                                       21
From CE
for Expressions
From CE for Expressions

Using 'from' to reason over the nested list


rule “Find all the pets for a given owner”
when
   $owner : Person( name == “mark” )
             Pet( name == “rover” ) from $owner.pets




                                                       23
From CE for Expressions

'from' can work on any expression, not just a nested
field on a bound variable.


rule “Find People for given zip code”
when
   $zipCode : ZipCode()
   Person( ) from $hbn.getNamedQuery(“Find People”)
                        .setParameters( [ “zipCode” : $zipCode ] )
                        .list()

      Hibernate session




                                                                     24
Collect CE
Collect CE
rule "accumulate"
when
   $list : List( intValue > 100 )
             from collect( Bus( color == "red" ) )
then
   print "red buses “ + $list;
end




                                                     26
Accumulate CE
Accumulate CE
rule "accumulate"
when
   $sum : Number( intValue > 100 )
           from accumulate( Bus( color == "red", $t :
takings )
                            init( sum = 0 ),
                            action( sum += $t ),
                            result( sum ) )
then
   print "sum is “ + $sum;
end




                                                        28
Accumulate CE
rule "accumulate"
when
   $sum : Number( intValue > 100 )
           from accumulate( Bus( color == "red", $t :
takings )                                sum( $t ) )
then
   print "sum is “ + $sum;
end




                                                        29
Accumulate CE
Patterns and CE's can be chained with 'from'

rule "collect"
when
   $zipCode : ZipCode()
   $sum : Number( intValue > 100 )
          from accumulate( Bus( color == "red", $t : takings )
                             from $hbn.getNamedQuery(“Find
Buses”)

.setParameters( [ “zipCode” :
                          $zipCode ] )
                                         .list(),
                           sum( $t ) )
then                                                         30
Timers
Calendars
Timers
 rule “name”
    timer 1m30s
 when
    $l : Light( status == “on” )
 then
   SendEmail( “turn the light off” )



rule “name”
   timer (int: 0 1m30)
when
   $l : Light( status == “on” )
then
  SendEmail( “turn the light off” )


                                       32
Timers
Field Name Mandatory?   Allowed Values     Allowed Special Characters
Seconds      YES        0-59               ,-*/
Minutes      YES        0-59               ,-*/
Hours        YES        0-23               ,-*/
Day of month YES        1-31               ,-*?/LW
Month        YES        1-12 or JAN-DEC     ,-*/
Day of week YES         1-7 or SUN-SAT          ,-*?/L#
Year         NO         empty, 1970-2099    ,-*/



rule “name”
  timer ( cron: 0 0/15 * * * * )
when
   $l : Light( status == “on” )
then
  sendEmail( “turn the light off” )




                                                                        33
Calendars
rule "weekdays are high priority"
  calendars "weekday"
  timer (int:0 1h)
when
   Alarm()
then
   send( "priority high - we have an alarm” );
end

rule "weekend are low priority"
  calendars "weekend"
  timer (int:0 4h)
when
   Alarm()
then
   send( "priority low - we have an alarm” );
end

                                                 34
Truth Maintenance
Inference
TMS and Inference
rule "Issue Child Bus Pass"             Couples the logic
when
 $p : Person( age < 16 )
then
 insert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
                                    What happens when the Child
when                                      stops being 16?
 $p : Person( age >= 16 )
then
 insert(new AdultBusPass( $p ) );
end


                                                                  36
TMS and Inference
   Bad
    ●   Monolithic
    ●   Leaky
    ●   Brittle integrity - manual maintenance




                                                 37
TMS and Inference
 A rule “logically” inserts an object
 When the rule is no longer true, the object is
  retracted.
when                                  de-couples the logic

 $p : Person( age < 16 )
then
  logicalInsert( new IsChild( $p ) )
end
                                 Maintains the truth by
when                             automatically retracting
 $p : Person( age >= 16 )
then
  logicalInsert( new IsAdult( $p ) )
end

                                                             38
TMS and Inference
rule "Issue Child Bus Pass"
when
 $p : Person( )
       IsChild( person =$p )
then
 logicalInsert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"   The truth maintenance cascades
when
 $p : Person( age >= 16 )
       IsAdult( person =$p )
then
 logicalInsert(new AdultBusPass( $p ) );
end
                                                               39
TMS and Inference
rule "Issue Child Bus Pass"
when
 $p : Person( )
       not( ChildBusPass( person == $p ) )
then
   requestChildBusPass( $p );
                                  The truth maintenance cascades
End




                                                                   40
TMS and Inference
   Good
    ●   De-couple knowledge responsibilities
    ●   Encapsulate knowledge
    ●   Provide semantic abstractions for those encapsulation
    ●   Integrity robustness – truth maintenance




                                                                41
Tooling
Guided Editor




                43
Interactive Debugging




                        44
Decision Tables




                  45
DSLs




       46
DSLs




       47
Rule Flow




            48
Drools Fusion
Scalability

Rule engines do not scale for CEP. They have a single point of insertion
and are single threaded, CEP has concurrent streams of events.



       session.insert( event ) ;   $c : Custumer( type == “VIP” )
                                   BuyOrderEvent( customer == $c )

          Single Point of
              entry
                                         Patterns, evaluate
                                       facts sequentially in a
                                           single thread.




                                                                       50
Scalability
                                        So lets allow multiple
                                       named entry points for
                                           those streams


EntryPoint entryPoint = session.getEntryPoint( “Home Broker Stream” );
entryPoint.insert( event ) ;


   So now we can insert                    When not specified uses
     different streams                     the “default” entry-point
        concurrently

   $c : Custumer( type == “VIP )
   BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream”




                                        Patterns can now optional
                                        specify their entry-point.


                                                                           51
Automatic Life-Cycle
                Management
All Fact life-cycles must be managed by the user, so
retractions are manual.

 declare StockTick              Just use the declare statement to
  @role( event )                declare a type as an event and it
 end                           will be retracted when it is no longer
                                              needed


declare StockTick
 @role( event )
 @timestamp( timestampAttr )

 companySymbol : String
 stockPrice : double                 The declare statement can also
 timestampAttr : long                 specify an internal model, that
end                                external objects/xml/csv map on to.
                                     We support Smooks and JAXB



                                                                         52
Operators
Rule engines do not have rich enough set of temporal comparison
operators                                     BackAckEvent must occur
                                                                between 1s and 10s 'after'
  $c : Custumer( type == “VIP )                                      BuyOrderEvent
  $oe : BuyOrderEvent( customer == $c )
             from entry-point “Home Broker Stream”
        BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe )
             from entry-point “Stock Trader Stream”



 The Full set of Operators are supported
          ●   coincides         ●   overlaps             ●   starts
          ●   before            ●   overlappedby         ●   startedby
          ●   after             ●   during               ●   finishes
          ●   meets             ●   includes             ●   finishedby
          ●   metby



                                                                                             53
Operators




            54
Operators

$c : Custumer( type == “VIP )
$oe : BuyOrderEvent( customer == $c )
            from entry-point “Home Broker Stream”
      not BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe )
            from entry-point “Stock Trader Stream”



             Existing Drools 'not'
          Conditional Elements can
           be used to detect non-
            occurrence of events




                                                                           55
Sliding time windows
Rule engines react to events happening now, there is no
temporal understanding of changes over time.

 StockTicker( symbol == “RHAT” ) over window:time( 5s )                     5s
 StockTicker( symbol == “RHAT” ) over window:length( 1000 )
                                                                         1000 tickers




  That isn't much without the ability to deal with aggregations, rules
  engines suck.




                                                                                        56
Aggregations
Rule Engines do not deal with aggregations
                                                                    Over 5 seconds

$n : Number( intValue > 100 )
       from accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ),
                         average( $s.price ) )


                                Aggregate ticker price
 The pattern 'Number'            for RHAT over last 5
  reasons 'from' the                   seconds
  accumulate result




$n : accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ),
                 average( $s.price ) > 100 )


  We can use some sugar to reduce
             verbosity
                                                                                       57
Drools Flow
Drools Flow

 A workflow engine combining processes and
 Integration       rules
    ●   From loose coupling (decision services)
    ●   To advance integration (process rules)
   Unification
    ●   Rules and processes are different types of business
        knowledge assets
    ●   Infrastructure
         ●   Timers/Schedulers
         ●   Testing
         ●   Communication/Services
    ●   Tooling
         ●   IDE
         ●   repository, management
         ●   Auditing
         ●                                                    59
Truth Maintenance
Inference
Rules and
                        processes
generic




                              ?
                                           Decision
                                           Services
SCOPE




                Process
specific




                 Rules




           tightly coupled    COUPLING   loosely coupled
                                                           61
Business Logic Lifecycle




                           62
Example




          63
RuleFlowGroup
Workflow can control my rules?




                                 64
RuleFlowGroup



    Rule Flow Group




                      65
RuleFlowGroup




                66
Constraints




              Java code constraint




                                     67
Constraints
Rules can control my workflow?


                         LHS “when”
                        Rule Constraint




                                          68
Example


   Business decisions are externalized using a decision
    service




                      rule
               rule Decision1
                 when Decision1
                 rule Decision1
                   // conditions
                   when when
                 then // conditions
                           //
                   // actions
                   then
               end    conditions
                      // actions
                 end     then
                         //
                     actions
                     end                                   69
Example


   What if there is a lot of business logic like this?




                    rule Decision1       rule Decision1
           rule       when Decision1
                      rule                 when Decision1
                                           rule                  rule             rule
    rule Decision1      // conditions        // conditionsrule Decision1    rule Decision1
                        when Decision1
      when Decision1 rule  rule              when Decision1
                                                rule
      rule Decision1 then // conditions rule rule conditions Decision1 when Decision1
                    rule Decision1            Decision1
                                           then //          when Decision1
                                                            rule              rule Decision1
        // conditionswhen when
                      rule Decision1
                                                when          // conditions     // conditions
        when when       then // conditionswhen Decision1 when when
                            Decision1
                        // actions         rule actions
                                             // Decision1
                                             then // conditions                 when when
      then // conditions// conditions end // conditionsthen // conditionsthen // conditions
                // end when when
        // actions
        then
                           // actions
                           then              when when
                                                // actions
                                                then
                      then // conditions then // conditions// actions
                                                              then
                                                                      //                //
                                                                                // actions
                                                                                then
    end               end
           conditions// actions  //
                              // actions   end        //
                                                   // actions    conditions       conditions
           // actions   then                 // actions end
                                             then                // actions end   // actions
      end     then end end actions end end actions end
                           conditions
                           //                   conditions
                                                //                  then      end    then
                // end         then        end      then              //                //
          actions             //                  //         actions           actions
          end             actions             actions        end               end
                          end                 end

                                                                                                70
Flow of Control




       Process
       Engine




       Rules
       Engine



                  71
Inversion of Control




              Process
              Engine

     Agenda




              Rules
              Engine




                        72
Self monitoring and
              adaptive
declare ProcessStartedEvent
  @role( event )
end


rule "Number of process instances above threshold" when
  Number( nbProcesses : intValue > 1000 )
       from accumulate(
            e: ProcessStartedEvent(
  processInstance.processId ==
"com.sample.order.OrderProcess" )
                   over window:size(1h),
             count(e) )
then
  System.err.println( "WARNING: Nb of order processes in
the last                      hour > 1000: " +
nbProcesses );
                                                           73
Domain Specific Processes




                            74
Domain Specific Processes




                            75
Integrated debug and audit




                             76
Unified API
Definitions
    Runtime
          Language
Definitions
jBPM
File file = new File (“.....”); // file to XML process definition

ProcessDefinition processDefinition =
   ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) );

ProcessInstance processInstance =
   new ProcessInstance(processDefinition);
Jess
Rete engine = new Rete();

FileReader file = new FileReader("myfile.clp");

Jesp parser = new Jesp(file, engine);

parser.parse(false);


Esper

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();

EPStatement countStmt = admin.createEPL( "...." );

countStmt.start();
                                                                               78
Definitions
Drools Flow

KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider();

kbuilder.addResource(
   ResourceFactory.newClassPathResource( “myflow.drf”,
   ResourceType.DRF );

If ( kbuilder.hasErrors() ) {
    log.error( kbuilder.hasErrors().toString() );
}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbase.getKnowledgePackages() );




                                                                             79
Definitions

Drools Expert

KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider();

kbuilder.addResource(
   ResourceFactory.newClassPathResource( “myrules.drl”,
   ResourceType.DRL );

If ( kbuilder.hasErrors() ) {
    log.error( kbuilder.hasErrors().toString() );
}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbase.getKnowledgePackages() );




                                                                             80
Drools Integration Deployment Descriptors

<change-set>
   <add>
     <resource source='classpath:myapp/data/myflow.drf' type='DRF' />
     <resource source='http:myapp/data/myrules.drl' type='DRL' />
     <resource source='classpath:data/IntegrationExampleTest.xls'
                 type="DTABLE">
          <decisiontable-conf input-type="XLS"
                                worksheet-name="Tables_2" />
     </resource>
   <add>
</change-set>


KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider();
kbuilder.addResource(
   ResourceFactory.newFileResource( “changeset.xml”,
                                     ResourceType.ChangeSet );




                                                                             81
Unified Event Model
Mixins
Interface Markers
Stateful Knowledge
Session




                     85
Knowledge Runtime




                    86
Coming in 5.1
   BPMN2 (80% of Workflow)
   Integration
    ●   OSGi ready
    ●   Spring
    ●   Camel
   Seamless Remoting
   Simulation/Testing
   New Rete Algorithm “true modify”




                                       87
Spring + camel




from("direct:test-with-session").
to("drools:sm/ksession1?dataFormat=drools-xstream");


                                                       88
Questions?
                        • Dave Bowman: All right, HAL; I'll
                          go in through the emergency
                          airlock.
                        • HAL: Without your space helmet,
                          Dave, you're going to find that
                          rather difficult.
                        • Dave Bowman: HAL, I won't argue
                          with you anymore! Open the
                          doors!
                        • HAL: Dave, this conversation can
                          serve no purpose anymore.
                          Goodbye.
Joshua: Greetings, Professor Falken.
Stephen Falken: Hello, Joshua.
Joshua: A strange game. The only
winning move is not to play. How
about a nice game of chess?


                                                              89

More Related Content

What's hot

Aula de Sistemas Distribuídos - Comunicação Indireta
Aula de Sistemas Distribuídos - Comunicação IndiretaAula de Sistemas Distribuídos - Comunicação Indireta
Aula de Sistemas Distribuídos - Comunicação IndiretaVictor Hazin da Rocha
 
Drools5 Community Training: Module 1.5 - Drools Expert First Example
Drools5 Community Training: Module 1.5 - Drools Expert First ExampleDrools5 Community Training: Module 1.5 - Drools Expert First Example
Drools5 Community Training: Module 1.5 - Drools Expert First ExampleMauricio (Salaboy) Salatino
 
Solve cross cutting concerns with aspect oriented programming (aop)
Solve cross cutting concerns with aspect oriented programming (aop)Solve cross cutting concerns with aspect oriented programming (aop)
Solve cross cutting concerns with aspect oriented programming (aop)Siva Prasad Rao Janapati
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
Drools Expert and Fusion Intro : London 2012
Drools Expert and Fusion Intro  : London 2012Drools Expert and Fusion Intro  : London 2012
Drools Expert and Fusion Intro : London 2012Mark Proctor
 
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)Alphorm
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Marco Breveglieri
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축I Goo Lee
 
People soft application-designer-practice-8.43
People soft application-designer-practice-8.43People soft application-designer-practice-8.43
People soft application-designer-practice-8.43cesarvii
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
ePBCS Gridbuilder Deep Dive - Last Minute KScope Souvenirs
ePBCS Gridbuilder Deep Dive - Last Minute KScope SouvenirsePBCS Gridbuilder Deep Dive - Last Minute KScope Souvenirs
ePBCS Gridbuilder Deep Dive - Last Minute KScope SouvenirsKyle Goodfriend
 
AManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformAManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformByungjin Park
 
Rules Programming tutorial
Rules Programming tutorialRules Programming tutorial
Rules Programming tutorialSrinath Perera
 

What's hot (20)

Aula de Sistemas Distribuídos - Comunicação Indireta
Aula de Sistemas Distribuídos - Comunicação IndiretaAula de Sistemas Distribuídos - Comunicação Indireta
Aula de Sistemas Distribuídos - Comunicação Indireta
 
Drools5 Community Training: Module 1.5 - Drools Expert First Example
Drools5 Community Training: Module 1.5 - Drools Expert First ExampleDrools5 Community Training: Module 1.5 - Drools Expert First Example
Drools5 Community Training: Module 1.5 - Drools Expert First Example
 
Solve cross cutting concerns with aspect oriented programming (aop)
Solve cross cutting concerns with aspect oriented programming (aop)Solve cross cutting concerns with aspect oriented programming (aop)
Solve cross cutting concerns with aspect oriented programming (aop)
 
Web Development In Oracle APEX
Web Development In Oracle APEXWeb Development In Oracle APEX
Web Development In Oracle APEX
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
Drools Expert and Fusion Intro : London 2012
Drools Expert and Fusion Intro  : London 2012Drools Expert and Fusion Intro  : London 2012
Drools Expert and Fusion Intro : London 2012
 
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
People soft application-designer-practice-8.43
People soft application-designer-practice-8.43People soft application-designer-practice-8.43
People soft application-designer-practice-8.43
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
ePBCS Gridbuilder Deep Dive - Last Minute KScope Souvenirs
ePBCS Gridbuilder Deep Dive - Last Minute KScope SouvenirsePBCS Gridbuilder Deep Dive - Last Minute KScope Souvenirs
ePBCS Gridbuilder Deep Dive - Last Minute KScope Souvenirs
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
AManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with TerraformAManaging Kong API Gateway with Terraform
AManaging Kong API Gateway with Terraform
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Rules Programming tutorial
Rules Programming tutorialRules Programming tutorial
Rules Programming tutorial
 

Similar to Lille2010markp

JUDCon India 2012 Drools Expert
JUDCon  India 2012 Drools ExpertJUDCon  India 2012 Drools Expert
JUDCon India 2012 Drools ExpertMark Proctor
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Chris Richardson
 
What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013Mark Proctor
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Geoffrey De Smet
 
Proses Pencatatan Transaksi
Proses Pencatatan TransaksiProses Pencatatan Transaksi
Proses Pencatatan TransaksiFair Nurfachrizi
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdddeimos
 
Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Mark Proctor
 
The Actuary and FAS 163
The Actuary and FAS 163The Actuary and FAS 163
The Actuary and FAS 163kylemrotek
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceMichał Kurzeja
 
Accounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdfAccounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdfMaiSaleh20
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Mark Proctor
 
Lecture5 mba
Lecture5 mbaLecture5 mba
Lecture5 mbagldazo
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.jsSarah Drasner
 
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09Peter_Glassman
 
Recs Presentation
Recs PresentationRecs Presentation
Recs PresentationSylverflash
 

Similar to Lille2010markp (20)

JUDCon India 2012 Drools Expert
JUDCon  India 2012 Drools ExpertJUDCon  India 2012 Drools Expert
JUDCon India 2012 Drools Expert
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)
 
What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
 
Accounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting InformationAccounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting Information
 
Proses Pencatatan Transaksi
Proses Pencatatan TransaksiProses Pencatatan Transaksi
Proses Pencatatan Transaksi
 
Chapter 4
Chapter 4Chapter 4
Chapter 4
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
 
Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)
 
The Actuary and FAS 163
The Actuary and FAS 163The Actuary and FAS 163
The Actuary and FAS 163
 
SQL Server 2008 Portfolio
SQL Server 2008 PortfolioSQL Server 2008 Portfolio
SQL Server 2008 Portfolio
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
 
Actor Model
Actor ModelActor Model
Actor Model
 
Accounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdfAccounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdf
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)
 
Lecture5 mba
Lecture5 mbaLecture5 mba
Lecture5 mba
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
 
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
 
Financial ratio
Financial ratioFinancial ratio
Financial ratio
 
Recs Presentation
Recs PresentationRecs Presentation
Recs Presentation
 

More from Ch'ti JUG

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaCh'ti JUG
 
Bonita Open Solution
Bonita Open SolutionBonita Open Solution
Bonita Open SolutionCh'ti JUG
 
Adobe flash platform java
Adobe flash platform javaAdobe flash platform java
Adobe flash platform javaCh'ti JUG
 
MC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteMC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteCh'ti JUG
 
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projetsChti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projetsCh'ti JUG
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGCh'ti JUG
 
Drools Planner Chtijug 2010
Drools Planner Chtijug 2010Drools Planner Chtijug 2010
Drools Planner Chtijug 2010Ch'ti JUG
 
Terracotta Ch'ti Jug
Terracotta Ch'ti JugTerracotta Ch'ti Jug
Terracotta Ch'ti JugCh'ti JUG
 

More from Ch'ti JUG (10)

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Spring 3.1
Spring 3.1Spring 3.1
Spring 3.1
 
Bonita Open Solution
Bonita Open SolutionBonita Open Solution
Bonita Open Solution
 
Adobe flash platform java
Adobe flash platform javaAdobe flash platform java
Adobe flash platform java
 
MC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteMC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree Agilite
 
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projetsChti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUG
 
Drools Planner Chtijug 2010
Drools Planner Chtijug 2010Drools Planner Chtijug 2010
Drools Planner Chtijug 2010
 
HTML5 ADEO
HTML5 ADEOHTML5 ADEO
HTML5 ADEO
 
Terracotta Ch'ti Jug
Terracotta Ch'ti JugTerracotta Ch'ti Jug
Terracotta Ch'ti Jug
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 

Recently uploaded (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 

Lille2010markp

  • 1. Mark Proctor Project Lead ● The SkyNet funding bill is passed. ● The system goes online on August 4th, 1997. ● Human decisions are removed from strategic defense. ● SkyNet begins to learn at a geometric rate. ● It becomes self-aware at 2:14am Eastern time, August 29th ● In a panic, they try to pull the plug. ● And, Skynet fights back
  • 2. Introduction Drools Drools Drools Drools Expert Flow Fusion Guvnor Business Logic integration Platform 2
  • 5. Classes C a s h f lo w A cco u n t D a te d a te lo n g a c c o u n t N o d o u b le a m o u n t d o u b le b a la n c e in t t y p e lo n g a c c o u n t N o A c c o u n t in g P e r io d D a te s ta r t D a te e n d 5
  • 6. Creating Views with Triggers date amount type accountNo AccountingPeriod 12-Jan-07 100 CREDIT 1 start end 2-Feb-07 200 DEBIT 1 01-Jan-07 31-Mar-07 18-May-07 50 CREDIT 1 9-Mar-07 75 CREDIT 1 Account accountNo balance 1 0 increase balance for AccountPeriod Credits decrease balance for AccountPeriod Debits select * from Account acc, select * from Account acc, Cashflow cf, AccountPeriod ap Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.type == DEBIT cf.date >= ap.start and cf.date >= ap.start and cf.date <= ap.end cf.date <= ap.end trigger : acc.balance += cf.amount trigger : acc.balance -= cf.amount CashFlow CashFlow date amount type date amount type 12-Jan-07 100 CREDIT 2-Feb-07 200 DEBIT 9-Mar-07 75 CREDIT Account accountNo balance 1 -25 6
  • 7. What is a Rule salience <int> Quotes on Rule names are agenda-group <string> optional if the rule name has no-loop <boolean> no spaces. auto-focus <boolean> duration <long> .... • rule “<name>”     <attribute> <value>     when         <LHS>     then         <RHS> RHS can be any valid java. Or MVEL. Other languages end could be added. 7
  • 8. Imperative vs Declarative Methods that must specific passing of be called directly instances • public void helloMark(Person person) { Rules can never     if ( person.getName().equals( “mark” ) { be called directly        System.out.println( “Hello Mark” );     } Specific instances } cannot be passed. • rule “Hello Mark” LHS     when         Person( name == “mark” )     then         System.out.println( “Hello Mark” ); end RHS 8
  • 9. What is a Pattern P a tte rn O b je c t T y p e F ie ld C o n s t r a in t F ie ld N a m e R e s t r ic t io n E v a lu a t o r V a lu e S h o w e r( te m p e r a tu re = = “ h o t” ) 9
  • 10. Bringing it Together select * from Account acc, Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.date >= ap.start and cf.date <= ap.end Pattern trigger : acc.balance += cf.amount Pattern Binding field Binding rule “increase balance for AccountPeriod Credits” when Variable Restriction ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, Literal Restriction date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; Multri Restriction - Variable end Restriction field Binding Consequence (RHS) 10
  • 11. Rules as a “view” date amount type accountNo AccountingPeriod 12-Jan-07 100 CREDIT 1 start end 2-Feb-07 200 DEBIT 1 01-Jan-07 31-Mar-07 18-May-07 50 CREDIT 1 9-Mar-07 75 CREDIT 1 Account accountNo balance 1 0 rule “increase balance for AccountPeriod rule “decrease balance for AccountPeriod Credits” Debits” when when ap : AccountPeriod() ap : AccountPeriod() acc : Account( $accountNo : accountNo ) acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, CashFlow( type == DEBIT, accountNo == $accountNo, accountNo == $accountNo, date >= ap.start && <= ap.end, date >= ap.start && <= ap.end, $ammount : ammount ) $ammount : ammount ) then then acc.balance += $amount; acc.balance -= $amount; end CashFlow end CashFlow date amount type date amount type 12-Jan-07 100 CREDIT 2-Feb-07 200 DEBIT 9-Mar-07 75 CREDIT Account accountNo balance 1 -25 11
  • 12. Patterns in more details CashFlow( type == “credit” ) $ap : AccountPeriod() CashFlow( date >= $ap.start ) $ap : AccountPeriod() CashFlow( date >= $ap.start && <= $ap.end ) $ap : AccountPeriod() CashFlow( type == “credit”, date >= $ap.start && <= $ap.end ) 12
  • 13. More Pattern Examples Person( $age : age ) Person( age == ( $age + 1 ) ) Person( $age : age ) Person( eval( age == $age + 1 ) ) Person( $age1 : age ) Person( $age2 : age ) eval( $age2 == $age1 + 1 ) 13
  • 14. More Pattern Examples Person(age > 30 && < 40 || hair == “black”) Person(age > 30 && < 40 || hair in (“black”, “brown”) ) Person( (age > 30 && < 40 && hair == “black”) || (age > 50 && hair == “grey”) ) Person(pets contain $rover ) Person(pets[’rover’].type == “dog”) Person(pets[0].type == “dog”) 14
  • 15. What is a Production Rule System Codification of the business Repository of knowledge inserted Java instances Inference Engine Production Pattern Working Memory Matcher Memory (rules) (facts) Agenda insert Rules can change update on the fly retract 15
  • 16. Production Rule System Approximated by SQL and Views T a b le s A cco unt A c c o u n t in g P e r io d C a s h f lo w O b je c t T y p e s A cco unt A c c o u n t in g P e r io d C a s h f lo w V ie w s v ie w 1 v ie w 2 V ie w m a in v ie w R u le s r u le 1 r u le 2 agenda agenda 16
  • 17. Conflict Resolution with Salience Salience rule “Print blance for AccountPeriod” salience -50 when ap : AccountPeriod() acc : Account( ) then System.out.println( acc.accountNo + “ : “ acc.balance ); end Agenda 1 increase balance 2 decrease balance arbitrary 3 increase balance 4 print balance 17
  • 18. RuleFlow rule “increase balance for AccountPeriod Credits” ruleflow-group “calculation” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end ruleflow-group rule “Print blance for AccountPeriod” ruleflow-group “report” when ap : AccountPeriod() acc : Account( ) then System.out.println( acc.accountNo + “ : “ acc.balance ); end 18
  • 19. Two Phase System Determine possible rules to fire Agenda Evaluation Working Memory Action Rule insert modify Found Select Fire Rule Rule to Fire retract No Rule Found exit 19
  • 21. From CE for Expressions not Bus( color = “red” ) exists Bus( color = “red” ) forall ( $bus : Bus( color == “red” ) ) forall ( $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) 21
  • 23. From CE for Expressions Using 'from' to reason over the nested list rule “Find all the pets for a given owner” when $owner : Person( name == “mark” ) Pet( name == “rover” ) from $owner.pets 23
  • 24. From CE for Expressions 'from' can work on any expression, not just a nested field on a bound variable. rule “Find People for given zip code” when $zipCode : ZipCode() Person( ) from $hbn.getNamedQuery(“Find People”) .setParameters( [ “zipCode” : $zipCode ] ) .list() Hibernate session 24
  • 26. Collect CE rule "accumulate" when $list : List( intValue > 100 ) from collect( Bus( color == "red" ) ) then print "red buses “ + $list; end 26
  • 28. Accumulate CE rule "accumulate" when $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) init( sum = 0 ), action( sum += $t ), result( sum ) ) then print "sum is “ + $sum; end 28
  • 29. Accumulate CE rule "accumulate" when $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) sum( $t ) ) then print "sum is “ + $sum; end 29
  • 30. Accumulate CE Patterns and CE's can be chained with 'from' rule "collect" when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) from $hbn.getNamedQuery(“Find Buses”) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then 30
  • 32. Timers rule “name” timer 1m30s when $l : Light( status == “on” ) then SendEmail( “turn the light off” ) rule “name” timer (int: 0 1m30) when $l : Light( status == “on” ) then SendEmail( “turn the light off” ) 32
  • 33. Timers Field Name Mandatory? Allowed Values Allowed Special Characters Seconds YES 0-59 ,-*/ Minutes YES 0-59 ,-*/ Hours YES 0-23 ,-*/ Day of month YES 1-31 ,-*?/LW Month YES 1-12 or JAN-DEC ,-*/ Day of week YES 1-7 or SUN-SAT ,-*?/L# Year NO empty, 1970-2099 ,-*/ rule “name” timer ( cron: 0 0/15 * * * * ) when $l : Light( status == “on” ) then sendEmail( “turn the light off” ) 33
  • 34. Calendars rule "weekdays are high priority" calendars "weekday" timer (int:0 1h) when Alarm() then send( "priority high - we have an alarm” ); end rule "weekend are low priority" calendars "weekend" timer (int:0 4h) when Alarm() then send( "priority low - we have an alarm” ); end 34
  • 36. TMS and Inference rule "Issue Child Bus Pass" Couples the logic when $p : Person( age < 16 ) then insert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" What happens when the Child when stops being 16? $p : Person( age >= 16 ) then insert(new AdultBusPass( $p ) ); end 36
  • 37. TMS and Inference  Bad ● Monolithic ● Leaky ● Brittle integrity - manual maintenance 37
  • 38. TMS and Inference  A rule “logically” inserts an object  When the rule is no longer true, the object is retracted. when de-couples the logic $p : Person( age < 16 ) then logicalInsert( new IsChild( $p ) ) end Maintains the truth by when automatically retracting $p : Person( age >= 16 ) then logicalInsert( new IsAdult( $p ) ) end 38
  • 39. TMS and Inference rule "Issue Child Bus Pass" when $p : Person( ) IsChild( person =$p ) then logicalInsert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" The truth maintenance cascades when $p : Person( age >= 16 ) IsAdult( person =$p ) then logicalInsert(new AdultBusPass( $p ) ); end 39
  • 40. TMS and Inference rule "Issue Child Bus Pass" when $p : Person( ) not( ChildBusPass( person == $p ) ) then requestChildBusPass( $p ); The truth maintenance cascades End 40
  • 41. TMS and Inference  Good ● De-couple knowledge responsibilities ● Encapsulate knowledge ● Provide semantic abstractions for those encapsulation ● Integrity robustness – truth maintenance 41
  • 46. DSLs 46
  • 47. DSLs 47
  • 48. Rule Flow 48
  • 50. Scalability Rule engines do not scale for CEP. They have a single point of insertion and are single threaded, CEP has concurrent streams of events. session.insert( event ) ; $c : Custumer( type == “VIP” ) BuyOrderEvent( customer == $c ) Single Point of entry Patterns, evaluate facts sequentially in a single thread. 50
  • 51. Scalability So lets allow multiple named entry points for those streams EntryPoint entryPoint = session.getEntryPoint( “Home Broker Stream” ); entryPoint.insert( event ) ; So now we can insert When not specified uses different streams the “default” entry-point concurrently $c : Custumer( type == “VIP ) BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” Patterns can now optional specify their entry-point. 51
  • 52. Automatic Life-Cycle Management All Fact life-cycles must be managed by the user, so retractions are manual. declare StockTick Just use the declare statement to @role( event ) declare a type as an event and it end will be retracted when it is no longer needed declare StockTick @role( event ) @timestamp( timestampAttr ) companySymbol : String stockPrice : double The declare statement can also timestampAttr : long specify an internal model, that end external objects/xml/csv map on to. We support Smooks and JAXB 52
  • 53. Operators Rule engines do not have rich enough set of temporal comparison operators BackAckEvent must occur between 1s and 10s 'after' $c : Custumer( type == “VIP ) BuyOrderEvent $oe : BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe ) from entry-point “Stock Trader Stream” The Full set of Operators are supported ● coincides ● overlaps ● starts ● before ● overlappedby ● startedby ● after ● during ● finishes ● meets ● includes ● finishedby ● metby 53
  • 54. Operators 54
  • 55. Operators $c : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” not BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe ) from entry-point “Stock Trader Stream” Existing Drools 'not' Conditional Elements can be used to detect non- occurrence of events 55
  • 56. Sliding time windows Rule engines react to events happening now, there is no temporal understanding of changes over time. StockTicker( symbol == “RHAT” ) over window:time( 5s ) 5s StockTicker( symbol == “RHAT” ) over window:length( 1000 ) 1000 tickers That isn't much without the ability to deal with aggregations, rules engines suck. 56
  • 57. Aggregations Rule Engines do not deal with aggregations Over 5 seconds $n : Number( intValue > 100 ) from accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ), average( $s.price ) ) Aggregate ticker price The pattern 'Number' for RHAT over last 5 reasons 'from' the seconds accumulate result $n : accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ), average( $s.price ) > 100 ) We can use some sugar to reduce verbosity 57
  • 59. Drools Flow A workflow engine combining processes and  Integration rules ● From loose coupling (decision services) ● To advance integration (process rules)  Unification ● Rules and processes are different types of business knowledge assets ● Infrastructure ● Timers/Schedulers ● Testing ● Communication/Services ● Tooling ● IDE ● repository, management ● Auditing ● 59
  • 61. Rules and processes generic ? Decision Services SCOPE Process specific Rules tightly coupled COUPLING loosely coupled 61
  • 63. Example 63
  • 65. RuleFlowGroup Rule Flow Group 65
  • 67. Constraints Java code constraint 67
  • 68. Constraints Rules can control my workflow? LHS “when” Rule Constraint 68
  • 69. Example  Business decisions are externalized using a decision service rule rule Decision1 when Decision1 rule Decision1 // conditions when when then // conditions // // actions then end conditions // actions end then // actions end 69
  • 70. Example  What if there is a lot of business logic like this? rule Decision1 rule Decision1 rule when Decision1 rule when Decision1 rule rule rule rule Decision1 // conditions // conditionsrule Decision1 rule Decision1 when Decision1 when Decision1 rule rule when Decision1 rule rule Decision1 then // conditions rule rule conditions Decision1 when Decision1 rule Decision1 Decision1 then // when Decision1 rule rule Decision1 // conditionswhen when rule Decision1 when // conditions // conditions when when then // conditionswhen Decision1 when when Decision1 // actions rule actions // Decision1 then // conditions when when then // conditions// conditions end // conditionsthen // conditionsthen // conditions // end when when // actions then // actions then when when // actions then then // conditions then // conditions// actions then // // // actions then end end conditions// actions // // actions end // // actions conditions conditions // actions then // actions end then // actions end // actions end then end end actions end end actions end conditions // conditions // then end then // end then end then // // actions // // actions actions end actions actions end end end end 70
  • 71. Flow of Control Process Engine Rules Engine 71
  • 72. Inversion of Control Process Engine Agenda Rules Engine 72
  • 73. Self monitoring and adaptive declare ProcessStartedEvent @role( event ) end rule "Number of process instances above threshold" when Number( nbProcesses : intValue > 1000 ) from accumulate( e: ProcessStartedEvent( processInstance.processId == "com.sample.order.OrderProcess" ) over window:size(1h), count(e) ) then System.err.println( "WARNING: Nb of order processes in the last hour > 1000: " + nbProcesses ); 73
  • 77. Unified API Definitions Runtime Language
  • 78. Definitions jBPM File file = new File (“.....”); // file to XML process definition ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) ); ProcessInstance processInstance = new ProcessInstance(processDefinition); Jess Rete engine = new Rete(); FileReader file = new FileReader("myfile.clp"); Jesp parser = new Jesp(file, engine); parser.parse(false); Esper EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(); EPStatement countStmt = admin.createEPL( "...." ); countStmt.start(); 78
  • 79. Definitions Drools Flow KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myflow.drf”, ResourceType.DRF ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); 79
  • 80. Definitions Drools Expert KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myrules.drl”, ResourceType.DRL ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); 80
  • 81. Drools Integration Deployment Descriptors <change-set> <add> <resource source='classpath:myapp/data/myflow.drf' type='DRF' /> <resource source='http:myapp/data/myrules.drl' type='DRL' /> <resource source='classpath:data/IntegrationExampleTest.xls' type="DTABLE"> <decisiontable-conf input-type="XLS" worksheet-name="Tables_2" /> </resource> <add> </change-set> KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newFileResource( “changeset.xml”, ResourceType.ChangeSet ); 81
  • 83.
  • 87. Coming in 5.1  BPMN2 (80% of Workflow)  Integration ● OSGi ready ● Spring ● Camel  Seamless Remoting  Simulation/Testing  New Rete Algorithm “true modify” 87
  • 89. Questions? • Dave Bowman: All right, HAL; I'll go in through the emergency airlock. • HAL: Without your space helmet, Dave, you're going to find that rather difficult. • Dave Bowman: HAL, I won't argue with you anymore! Open the doors! • HAL: Dave, this conversation can serve no purpose anymore. Goodbye. Joshua: Greetings, Professor Falken. Stephen Falken: Hello, Joshua. Joshua: A strange game. The only winning move is not to play. How about a nice game of chess? 89