SQL Database Design For Developers at php[tek] 2024
Drooling for drools (JBoss webex)
1. ●
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
Mark Proctor
Co-Creator
Project Lead
2. 2
Topics
What's new in 5.1
Drools and OSS Community
History
Unified Vision
Expert
Fusion
Flow
11. 11
Boot Camps
San Francisco 2009 (40+ attendees)
● Sponsored by Third Pillar
● Sun, FAMC, OSDE, Kaseya, Fedex, TU Group, Intermountain
Healthcare, Gap, Sony Pictures, Lockheed Martin, Kaiser, HP,
Wells Fargo, US Navy Research, FOLIOfn, Boeing .....
San Diego 2010 (80+ attendess)
● Sponsored by US Navy
● 5 day event, with 2 days focus on the healthcare industry
● OSDE, AT&T, SAIC, US Navy Research, Kaiser, Clinica,
Intermountain Healthcare, GE Healthcare, VA, Boeing,
Nationwide ....
12. 12
Boot Camps
Rules Fest 11th
October
● 3 day conferene + 1 day boot camp
USA and EMA in Febuary, watch blog for news
● http://blog.athico.com
13. 13
Community Collaboration
40% of Drools work now done in the community
● US Navy Healthcare
● OSDE (Argentina's largest healthcare organisation)
● Intalio
14. 14
Sample Industries and Users
Investment
● Millennium Investment Group (MIG)
Logistics
● Fedex
Airline
● Sabre
Mortgage
● Franklin American
Healthcare
● OSDE
31. 31
The Future
Full Hybrid Engine
● http://community.jboss.org/wiki/DroolsLanguageEnhancements
●Nested Objects
●Casting Nested Objects
●Positional Constraints
●POSL - Positional-Slotted
Language
●Method Calls
●Maps and Arrays
(Collections)
●Collections and XPath like
filtering
●Free form Expressions
●Managed Object Graphs
(MOGS)
●Nested Patterns and Queries
●Queries and Unification
●Ontologies and Relations via
●Query Based Backward
Chaining with POSL
●Triples with Hybrid POJO Graph
Notation.
●Escapes for Dialects
●Accumulate Improvements to
Support Haskell map/fold/filter
and MVEL projection/fold
● Otherwise
● Branch (Labelled Else)
● Rule Execution Groups
● Rule Dependency Meta-Rule
Language
●Parallel Meta-Rule Language
● Field Versioning
●Logical Closures/OnFalse
●Opportunistic Backward
Chaining, Lazy Field/Object
Values
●...
42. 42
D a te d a te
d o u b le a m o u n t
in t ty p e
lo n g a c c o u n tN o
C a s h flo w
lo n g a c c o u n tN o
d o u b le b a la n c e
A c c o u n t
D a te s ta r t
D a te e n d
A c c o u n tin g P e r io d
Classes
43. 43
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account( $accountNo : accountNo )
CashFlow( type == CREDIT,
accountNo == $accountNo,
date >= ap.start && <= ap.end,
$ammount : ammount )
then
acc.balance += $amount;
end
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
trigger : acc.balance += cf.amount
Credit Cashflow Rule
44. 44
rule “increase balance for AccountPeriod
Credits”
when
ap : AccountPeriod()
acc : Account( $accountNo : accountNo )
CashFlow( type == CREDIT,
accountNo == $accountNo,
date >= ap.start && <= ap.end,
$ammount : ammount )
then
acc.balance += $amount;
end
rule “decrease balance for AccountPeriod
Debits”
when
ap : AccountPeriod()
acc : Account( $accountNo : accountNo )
CashFlow( type == DEBIT,
accountNo == $accountNo,
date >= ap.start && <= ap.end,
$ammount : ammount )
then
acc.balance -= $amount;
end
Rules as a “view”
date amount type
12-Jan-07 100 CREDIT 1
2-Feb-07 200 DEBIT 1
18-May-07 50 CREDIT 1
9-Mar-07 75 CREDIT 1
CashFlow
accountNo
CashFlow
date amount type
12-Jan-07 100 CREDIT
9-Mar-07 75 CREDIT
CashFlow
date amount type
2-Feb-07 200 DEBIT
AccountingPeriod
start end
01-Jan-07 31-Mar-07
Account
accountNo balance
1 0
Account
accountNo balance
1 -25
46. 46
not Bus( color = “red” )
Conditional Elements
exists Bus( color = “red” )
forall ( $bus : Bus( floors == 2 )
Bus( this == $bus, color == “red” ) )
forall ( $bus : Bus( color == “red” ) )
47. 47
Accumulate CE
rule "accumulate"
when
acc( Bus( color == "red", $t : takings );
$min : min( $t ), $max : max( $t );
$min > 100 && $max < 200 )
then
println( "range is “ + $min + “ “ + $max );
end
48. 48
Accumulate CE
Patterns and CE's can be chained with 'from'
rule "collect"
when
$zipCode : ZipCode()
acc( Bus( color == "red", $t : takings )
from $hbn.getNamedQuery(“Find Buses”)
.setParameters( [ “zipCode” :
$zipCode ] ).list();
$sum : sum( $t );
$sum > 100 )
then
print "sum is “ + $sum;
end
53. 53
Timers
rule “name”
timer (int: 1m30s 0)
when
$l : Light( status == “on” )
then
modify( $l ) { status = “off” };
When the light is on, and has been
on for 1m30s then turn it off
54. 54
Timers
rule “name”
timer ( cron: 0 0/15 * * * * )
when
Alarm( )
then
sendEmail( ”Alert Alert Alert!!!” )
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 , - * ? / L W
Month YES 1-12 or JAN-DEC , - * /
Day of week YES 1-7 or SUN-SAT , - * ? / L #
Year NO empty, 1970-2099 , - * /
Send alert every quarter of an hour
55. 55
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
Execute now and after
1 hour duration
Execute now and after
4 hour duration
61. 61
Drools Fusion: Enables...
Event Detection:
● From an event cloud or set of streams, select all the
meaningful events, and only them.
[Temporal] Event Correlation:
● Ability to correlate events and facts declaring both temporal
and non-temporal constraints between them.
● Ability to reason over event aggregation.
Event Sequencing:
● A → ( B OR C ) → D
Event Abstraction:
● Ability to compose complex events from atomic events AND
reason over them
62. 62
Drools Fusion: Features
Support to Event semantics:
● Usually immutable, but not enforced
● Strong temporal relationships
● Managed lifecycle
● Point-in-time and Interval events
Time semantics
● Discrete
Temporal relationships
● All 13 operators defined by James Allen (+ negations)
63. 63
Drools Fusion: Temporal Reasoning
P o i n t - P o i n t P o i n t - I n t e r v a l I n t e r v a l - I n t e r v a l
A b e f o r e B
A m e e t s B
A o v e r la p s B
A f in is h e s B
A in c lu d e s B
A s t a r t s B
A c o in c id e s B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
64. 64
Drools Fusion: Temporal Reasoning
P o i n t - P o i n t P o i n t - I n t e r v a l I n t e r v a l - I n t e r v a l
A a f t e r B
A m e t B y B
A o v e r la p e d B y B
A f in is h e d B y B
A d u r in g B
A f in is h e s B
A
B
A
B
A
B
A
B
A
B
A
B
65. 65
$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”
Operators
Existing Drools 'not'
Conditional Elements can
be used to detect non-
occurrence of events
BackAckEvent must occur
between 1s and 10s 'after'
BuyOrderEvent
66. 66
Aggregations
Rule Engines do not deal with aggregations
acc( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s );
$avg : avg( $s.price );
$avg > 100 )
Over 5 seconds
Aggregate ticker price
for RHAT over last 5
seconds
67. 67
CEP Applied at FedEx Custom
Critical
Time specific deliveries for critical freight
Exclusive use non-stop door-to-door services
Blended Surface and Air services to minimize cost and transit
time
Extra care in handling and specially equipped vehicles
● Temperature Control, Secured Services, Hazardous Material, Constant
Surveillance
* Presented by Adam Mollemkopf at ORF 2009
68. 68
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
69. 69
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
70. 70
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
71. 71
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
72. 72
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
73. 73
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
74. 74
At least 50% of Alerts can be reasoned automatically, promoting
staff savings and improved Customer and Driver experiences.
Risk Avoidance via pro-active monitoring
● Reduction in insurance claims and shipment service failures
Minimum 30% efficiency gains in shipment monitoring , saving
at least 15% of Operations staff cost.
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
75. 75
Some numbers (from early 2010):
● 24 x 7 sessions, no downtime
● Average of 500k+ facts/events concurrently in memory
● Business hours: 1M+ facts/events concurrently
● Response time for reasoning cycles:
● Average: 150 ms
● Peak: 1.2 sec
● Several hundred rules
CEP Applied at FedEx Custom
Critical * Presented by Adam Mollemkopf at ORF 2009
86. 86
Events and Processes
declare ProcessStartedEvent
@role( event )
end
rule "Number of process instances above threshold" when
acc( e: ProcessStartedEvent(
processId == "com.sample.order.OrderProcess" )
over window:size(1h),
$c : count(e),
$c > 1000)
then
System.err.println( "WARNING: Nb of order processes in the last
hour > 1000: " + nbProcesses );
end
88. 88
Questions?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?