drools happenings 7.0 - devnation 2016

82

Upload: mark-proctor

Post on 15-Feb-2017

1.110 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Drools Happenings 7.0 - Devnation 2016
Page 2: Drools Happenings 7.0 - Devnation 2016

Mark Proctor

Drools 7.0 Happenings

Page 3: Drools Happenings 7.0 - Devnation 2016

Where we are

Page 4: Drools Happenings 7.0 - Devnation 2016

Where we were mid 2013

Page 5: Drools Happenings 7.0 - Devnation 2016

6.4• 6.0 Nov 2013 • 6.4 2016

• Upgrade to Pattern Fly • Fully redesign the execution server UI • Improved and augmented process runtime views

Page 6: Drools Happenings 7.0 - Devnation 2016

KIE - Knowledge Is Everything• Drools • jBPM • DashBuilder • OptaPlanner • UberFire

Page 7: Drools Happenings 7.0 - Devnation 2016

The Family

Drools

jBPMDashBuilder

OptaPlanner

GWT

Errai

UberFire

Commons

Drools WB

Kie WB

Page 8: Drools Happenings 7.0 - Devnation 2016

Product Maturity Model

Page 9: Drools Happenings 7.0 - Devnation 2016

Remote Java Developer

Page 10: Drools Happenings 7.0 - Devnation 2016

Citizen Developer

Page 11: Drools Happenings 7.0 - Devnation 2016

Associate Process Manager

Page 12: Drools Happenings 7.0 - Devnation 2016

Senior Process Manager

Page 13: Drools Happenings 7.0 - Devnation 2016

Case Management

Page 14: Drools Happenings 7.0 - Devnation 2016

Case Management

Page 15: Drools Happenings 7.0 - Devnation 2016

Usability / Pattern Fly

Page 16: Drools Happenings 7.0 - Devnation 2016

Workbench / Data Modeller

Page 17: Drools Happenings 7.0 - Devnation 2016

Workbench / Data Modeller

Page 18: Drools Happenings 7.0 - Devnation 2016

jBPM Reports

Page 19: Drools Happenings 7.0 - Devnation 2016

jBPM Reports

Page 20: Drools Happenings 7.0 - Devnation 2016

Execution Server

Page 21: Drools Happenings 7.0 - Devnation 2016

Web Stack

Page 22: Drools Happenings 7.0 - Devnation 2016

GWT 2.8 + Errai

• Client-side depending injection (consistent with CDI).

• Client-side templating. • 2-way data-binding with Pojos. • Dynamic runtime modules. • qualifier annotations to determine

which dependencies. • a bean satisfies. • Constructor field and setter injections.

• More CDI and EJB features: • @Alternative, @Specializes,

@Produced scopes, CDI Events, JPA, …

• Injecting native Javascript objects into doc with JSInterop.

• Support for native DOM-based UI • support for GWT 2.8 + Java8.

Page 23: Drools Happenings 7.0 - Devnation 2016

Errai UI

• Bind Java class elements to elements in an HTML template.

• Template files can be HTML fragments or full pages.

• The HTML file is the template. • The Java class is a template bean • Data field can be @Bound to the model

and automatically updated

Page 24: Drools Happenings 7.0 - Devnation 2016

Errai - Data Binding

Page 25: Drools Happenings 7.0 - Devnation 2016

UberFire Rich Client Framework

• Perspective • Screen • Page Composer • Security • Permissions • Preferences (TODO)

Page 26: Drools Happenings 7.0 - Devnation 2016

Form Builder

Page 27: Drools Happenings 7.0 - Devnation 2016

Old Form Builder

Page 28: Drools Happenings 7.0 - Devnation 2016

Bootstrap Grid Views

Page 29: Drools Happenings 7.0 - Devnation 2016

Bootstrap Grid Views

Page 30: Drools Happenings 7.0 - Devnation 2016

Web Forms for Java Developers

• Pojo • JPA • Bean Validator

Page 31: Drools Happenings 7.0 - Devnation 2016

Form Builder Video

Page 32: Drools Happenings 7.0 - Devnation 2016

OpenShift JVM

Page 33: Drools Happenings 7.0 - Devnation 2016

Provisioning the Form app

Page 34: Drools Happenings 7.0 - Devnation 2016

DashBuilder / Page Composer

Page 35: Drools Happenings 7.0 - Devnation 2016

DashBuilder Example

Page 36: Drools Happenings 7.0 - Devnation 2016

DashBuilder Example

Page 37: Drools Happenings 7.0 - Devnation 2016

jBPM Runtime View

Page 38: Drools Happenings 7.0 - Devnation 2016

Data Set Creation

• SQL • Bean (Java Class) • CSV • Elastic Search

Page 39: Drools Happenings 7.0 - Devnation 2016

Data Set Configuration

Page 40: Drools Happenings 7.0 - Devnation 2016

Data Set Preview

Page 41: Drools Happenings 7.0 - Devnation 2016

Advanced Configuration

Page 42: Drools Happenings 7.0 - Devnation 2016

Data Set Explorer

Page 43: Drools Happenings 7.0 - Devnation 2016

Cache

Page 44: Drools Happenings 7.0 - Devnation 2016

DashBuilder Video

Page 45: Drools Happenings 7.0 - Devnation 2016

User Group Admin Video

Page 46: Drools Happenings 7.0 - Devnation 2016

Permissions Video

Page 47: Drools Happenings 7.0 - Devnation 2016

Execution Server

Page 48: Drools Happenings 7.0 - Devnation 2016

Rule Execution Server

Page 49: Drools Happenings 7.0 - Devnation 2016

Rest Call

Page 50: Drools Happenings 7.0 - Devnation 2016

Rest Call

Page 51: Drools Happenings 7.0 - Devnation 2016

Phreak

Page 52: Drools Happenings 7.0 - Devnation 2016

ReteOO• Node Sharing • Alpha Indexing • Beta Indexing • Tree based graphs • Modify-in-place • Property Reactive • Sub-networks • Backward Chaining • Lazy Truth Maintenance • Heap Based Agenda Queue • Dynamic Rules

Page 53: Drools Happenings 7.0 - Devnation 2016

Phreak• Lazy Evaluation • Isolated Rule Evaluation • Incremental Goal Oriented Evaluations • Set Oriented Propagations

• Set Oriented Match (Future) • Stack baed evaluations, with pause and resume

Page 54: Drools Happenings 7.0 - Devnation 2016

Layered Memory

Page 55: Drools Happenings 7.0 - Devnation 2016

Bit Masks and Linking

Page 56: Drools Happenings 7.0 - Devnation 2016

Bit Masks and Linking

Page 57: Drools Happenings 7.0 - Devnation 2016

Bit Masks and Linking

A

D

R1

Not B

Not

C

R2

R1 = A not ( B not ( C ) ) DR2 = A B C

Page 58: Drools Happenings 7.0 - Devnation 2016

Thread Safety / State Machine

Page 59: Drools Happenings 7.0 - Devnation 2016

State Transition

INACTIVE

FIRE_ALL_RULES FIRE_UNTIL_HALT

HALTING

EXECUTE_TASK

fireAllRules fireUntilHalt

at rest

halt halt

executeTask

Page 60: Drools Happenings 7.0 - Devnation 2016

fireAllRules() fireUntilHalt()

sync(engineLock)

isFiring() == trueTrue

False

waitAndEnter(FIRE_ALL_RULES)

fireLoop(RestHandler.FIRE_ALL_RULES)

fireAllRules()

sync(engineLock)

state=FIRE_UNTIL_HALTTrue

False

waitAndEnter(FIRE_UNTIL_HALT)

fireLoop(RestHandler. FIRE_UNTIL_HALT)

fireUntilHalt()

Page 61: Drools Happenings 7.0 - Devnation 2016

fireLoopLoop

fireLoop(restHandler)

head=takeAll()returnedFireCount=0loop=true

flush(head)

head != null

True

head=takeAll()

returnedFireCount = fireNextItem()

False

isFiring() == true

true

false

atRest(head, returnedFireCount

head=handleRest(restHandler)

isFiring() == true

immediateHalt()

true false

flush(head)

Page 62: Drools Happenings 7.0 - Devnation 2016

FIRE_UNTIL_HALT FIRE_ALL_RULES

sync(queueLock)

RestHander.FIRE_UNTIL_HALT

head = takeAll()

queueLock.wait()

head == null &&state == FIRE_UNTIL_HALT

true

return head

false

head = takeAll()

The thread will sleep until the addEntry notifies it to wake up

sync(engineLock)

RestHander.FIRE_ALL_RULES

head = takeAll()

state = INACTIVE

head == null

true

return head

false

Page 63: Drools Happenings 7.0 - Devnation 2016

WaitAndEnter immediateHalt

state!=INACTIVE

True

true

engineLock.wait()

state = newState

waitAndEnter(newState)

The thread will sleep until the immediateHalt is called which calls the engineLock.notify. Note this method must always be called from inside of a sync(engineLock) block.

immedateHalt()

sync(engineLock)

state!=INACTIVE

false

true

state = INACTIVE

engineLock.notify()This will wake any threads currently waiting in the waitAndEnter method.

Page 64: Drools Happenings 7.0 - Devnation 2016

Multicore Scalability

Page 65: Drools Happenings 7.0 - Devnation 2016

Immutable Use Cases

Page 66: Drools Happenings 7.0 - Devnation 2016

OOPath

Page 67: Drools Happenings 7.0 - Devnation 2016

Reactive List Comprehensionrule R when\n" + Adult( $child: /children )then\n" + list.add( $child.getName() );end

Page 68: Drools Happenings 7.0 - Devnation 2016

Nested Reactive List Comprehensionrule R when\n" + Adult( $child: /children )then\n" + list.add( $child.getName() );end

rule R when\n" + Man( $toy: /wife/children/toys )then\n" + list.add( $toy.getName() );end

Page 69: Drools Happenings 7.0 - Devnation 2016

No Comprehension or Reactivity

rule R when\n" + Man( $toy: /wife/children/toys )then\n" + list.add( $toy.getName() );end

rule R when\n" + Man( $toy: /wife/children.toys )then\n" + list.add( $toy.getName() );end

Page 70: Drools Happenings 7.0 - Devnation 2016

Constraints

rule R when\n" + Man( $toy: /wife/children{age > 10}/toys )then\n" + list.add( $toy.getName() );end

rule R when\n" + Man( $toy: /wife/children{age > 10, name.length > 5}.toys )then\n" + list.add( $toy.getName() );end

Page 71: Drools Happenings 7.0 - Devnation 2016

Non Reactivity

rule R when\n" + Man( $toy: ?/wife/children{age > 10}/toys )then\n" + list.add( $toy.getName() );end

rule R when\n" + Man( $toy: /wife/children{age > 10}?/toys )then\n" + list.add( $toy.getName() );end

Page 72: Drools Happenings 7.0 - Devnation 2016

Casting and Type Filtering

rule R when\n" + Man( $name: /wife/children{ #BabyGirl, favoriteDollName.startsWith(\”A\”) }.name )then\n" + list.add( $name );end

Page 73: Drools Happenings 7.0 - Devnation 2016

Back Referencing

rule R when\n" + Man( $toy: /wife/children/toys{ name.length == ../name.length } )then\n" + list.add( $toy.getName() );end

Page 74: Drools Happenings 7.0 - Devnation 2016

Out of Pattern Usage

query isContainedIn( Thing $x, Thing $y ) $y := /$x/childrenor ( $z := /$x/children and isContainedIn( $z, $y; ) )end

Page 75: Drools Happenings 7.0 - Devnation 2016

Pojo Rules

Page 76: Drools Happenings 7.0 - Devnation 2016

DRL Fire Alarm Example

Page 77: Drools Happenings 7.0 - Devnation 2016

Pojo-Rules Fire Alarm Example

Page 78: Drools Happenings 7.0 - Devnation 2016

DRL Fire Alarm Example

Page 79: Drools Happenings 7.0 - Devnation 2016

Pojo-Rules Fire Alarm Example

Page 80: Drools Happenings 7.0 - Devnation 2016

DRLX

Page 81: Drools Happenings 7.0 - Devnation 2016

DRLX

• Java super-set • Java pre-processing using Antlr Java8.g

• Similar approach to pizza language that gave us generics • Will output pojo-rules underneath • But be more succinct and friendly that poco-rules

Page 82: Drools Happenings 7.0 - Devnation 2016