Your SlideShare is downloading. ×
0
Not Quite There Yet
•The SkyNet funding bill is passed.
•The system goes online on August 4th, 1997.
•Human decisions are ...
Who am I?
• Drools co-founder
• JBoss (2005)
• Red Hat (2006)
• Polymita Acquisition 2012
• Red Hat Platform Architect
Sat...
KIE - Knowledge Is Everything
KIE
Drools jBPMOptaPlanner UberFire
Guvnor
Drools-WB jBPM-WB
KIE-WB
Saturday, 29 June 13
GitHub
• URL:
• https://github.com/droolsjbpm/
• Bootstrap project:
• https://github.com/droolsjbpm/droolsjbpm-
build-boot...
Changes
• Conventions:
• droolsjbpm -> kie
• knowlege -> kie
• Examples
• KnowledgeBase -> Kie
• StatefulKnowledgeSession ...
BRMS 6.0
Simplified Utilization
Saturday, 29 June 13
BRMS 5.0 Programmatic API
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.batch().add(...
KieModules
• Discovery
• META-INF/kmodule.xml
• Convention based
• No programmatic api for building
• Multiple Named entit...
Git Hub Examples• https://github.com/droolsjbpm/drools/tree/master/drools-
examples-api
Saturday, 29 June 13
KieModules
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/kie/6.0.0/kmodule">
</km...
11
Saturday, 29 June 13
KieModules• Named Entities and JAR on Classpath
• Creates one KieBase
• Includes resources from package matching
kbase nam...
13
Saturday, 29 June 13
KieModules• Named Entities, with inheritence and JAR on
Classpath
• Two projects, one “includes” from the other
<dependenc...
KieModules• Package location can over-ride kbase name defaults
<kbase name="WumpusMainKB" packages="org.drools.games.wumpu...
Dynamic KieModules
• JARs can be loaded from URLs into KieRepository
• Once loaded they can be resolved via ReleaseId
KieS...
Dynamic KieModules
• kie-ci use embedded maven for remote
discovery
<dependency>
<groupId>org.kie</groupId>
<artifactId>ki...
Dynamic Modules
// create a new kjar
InternalKieModule kJar2 = createKieJar(ks, releaseId, "rule2", "rule3");
// deploy it...
KieModules• Package location can over-ride kbase name defaults
<kbase name="WumpusMainKB" packages="org.drools.games.wumpu...
kmodule.xml Editor
Saturday, 29 June 13
Programmatic API
• Builder API, for tooling integration
• Incremental compilation, and problem
reporting
KieServices ks = ...
Dynamic KieModules
• kie-ci use embedded maven for remote
discovery
<dependency>
<groupId>org.kie</groupId>
<artifactId>ki...
BRMS 6.0
CDI
Saturday, 29 June 13
CDI Context and Dependency
• CDI injects named entities from the
kmodule.xml
• Injectable types
• KieServices
• KieContain...
KBase
@Inject
@KBase(value="jar1.KBase1", name="kb2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")...
KSession
@Inject
@KSession("jar1.KSession2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0" )
private...
BRMS 6.0
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Backward Chaining
Reactive Transitive
Closures
Saturday, 29 June 13
33
Reasoning with Graphs
●Location( “kitchen”,”house” )●Location( “office”,”house” )
●Location( “desk”,”office” ) ●Locatio...
34
Backward Chaining
query isContainedIn( String x, String y )
Location( x, y; )
or
( Location( z, y; ) and isContainedIn(...
Backward Chainingksession.insert( new Location("Office", "House") );
ksession.insert( new Location("Kitchen", "House") );
...
Backward Chainingrule "go" salience 10
when
$s : String( )
then
System.out.println( $s );
end
House
Location("Office",
"Ho...
Backward Chainingrule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "offi...
Backward Chainingrule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "offi...
Backward Chainingrule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "offi...
Backward Chainingrule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "offi...
Backward Chainingrule "go1"
when
String( this == "go1" )
isContainedIn("Office", "House"; )
then
System.out.println( "offi...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go2"
when
String( this == "go2" )
isContainedIn("Draw", "House"; )
then
System.out.println( "Draw ...
Backward Chaining
rule "go3"
when
String( this == "go3" )
isContainedIn("Key", "Office"; )
then
System.out.println( "Key i...
Backward Chaining
rule "go3"
when
String( this == "go3" )
isContainedIn("Key", "Office"; )
then
System.out.println( "Key i...
Backward Chaining
rule "go3"
when
String( this == "go3" )
isContainedIn("Key", "Office"; )
then
System.out.println( "Key i...
Backward Chaining
rule "go4"
when
String( this == "go4" )
isContainedIn(thing, "Office"; )
then
System.out.println( "thing...
Backward Chaining
rule "go4"
when
String( this == "go4" )
isContainedIn(thing, "Office"; )
then
System.out.println( "thing...
Backward Chaining
rule "go4"
when
String( this == "go4" )
isContainedIn(thing, "Office"; )
then
System.out.println( "thing...
Backward Chaining
rule "go5"
when
String( this == "go5" )
isContainedIn(thing, location; )
then
System.out.println( "thing...
Backward Chaining
rule "go5"
when
String( this == "go5" )
isContainedIn(thing, location; )
then
System.out.println( "thing...
Backward Chaining
rule "go5"
when
String( this == "go5" )
isContainedIn(thing, location; )
then
System.out.println( "thing...
Backward Chaining
rule "go5"
when
String( this == "go5" )
isContainedIn(thing, location; )
then
System.out.println( "thing...
BRMS 6.0
Score Cards
Saturday, 29 June 13
Score Cards• a) Setup Parameters
• b) Characteristic Section
Saturday, 29 June 13
Score Cards• UI Generates PMML
• DRL Generated from PMML
• DRL results in
• Calculated Score
• Ranked Reason Codes
• Can i...
6.0 JTMS
Saturday, 29 June 13
Justification-based Truth
• Drools 5.x
• Simple logical insertion TMS, like Clips, Jess and
others.
• Drools 6.0
• Contrad...
69
JTMS
Couples the logic
What happens when the Child
stops being 16?
rule "Issue Child Bus Pass"
when
$p : Person( age < ...
JTMS
• Bad
• Monolithic
• Leaky
• Brittle integrity - manual maintenance
Saturday, 29 June 13
71
JTMS
de-couples the logic
Maintains the truth by
automatically retracting
•A rule “logically” inserts an object
•When t...
72
JTMS
The truth maintenance cascades
rule "Issue Child Bus Pass"
when
$p : Person( )
IsChild( person =$p )
then
logicalI...
73
JTMS
rule "Issue Child Bus Pass"
when
$p : Person( )
not( ChildBusPass( person == $p ) )
then
requestChildBusPass( $p )...
74
JTMS
• Good
• De-couple knowledge responsibilities
• Encapsulate knowledge
• Provide semantic abstractions for those en...
JTMS
IsChild
ChildBusPas
Rule : isChildRule
Rule : IssueBusPas
+
+
Saturday, 29 June 13
JTMS
rule "Do not issue to banned people"
when
$p : Person( )
Banned( person =$p )
then
logicalInsert(new ChildBusPass( $p...
JTMS
IsChild
ChildBusPas
Rule : isChildRule
Rule : IssueBusPas
+
+
Rule : Do Not Issue
to Banned People
-
Saturday, 29 Jun...
BRMS 6.0
R.I.P Rete
Saturday, 29 June 13
R.I.P RETE
inspirations:
• Leaps, Collection Oriented Match, L/R Unlinking
New Innovations
• Full Rule, and Rule Segment U...
BRMS 6.0
UI - OpenShift Ready
Saturday, 29 June 13
5.x Critique
Saturday, 29 June 13
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
Saturday, 29 June 13
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
JCR
• Performance Issues
• Everything st...
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
JCR
• Performance Issues
• Everything st...
5.x Critique
Content
• Single tree structure (packages)
• Packages created project deployment units
• no real alignment wi...
5.x CritiqueDeployment
•Simple Snapshot system
•No real methodology
•Doesn’t align with any industry standards
Saturday, 2...
UF UberFire
Saturday, 29 June 13
Requirements
• GWT + Errai
• Modular design
• Plugins
• Common Life cycles
• Compile time composition of plugins, via mave...
UberFire Architecture Overview
Saturday, 29 June 13
Saturday, 29 June 13
•Modular
•Extensible
•Dynamic and Flexible layouts
•Perspectives
Saturday, 29 June 13
Simple POM Editor
Saturday, 29 June 13
Build and Deploy
Saturday, 29 June 13
Local Maven Repository and
Manager
Saturday, 29 June 13
Create or Clone Git Repos
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
Community Beta3
Demo
Saturday, 29 June 13
UI Improvments
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
Legacy Systems and Migration
• Legacy API Adapter JAR
• Most API’s should work with legacy adapter
• KnowledegAgents have ...
107
Questions?
• Dave Bowman: All right, HAL; I'll go in
through the emergency airlock.
• HAL: Without your space helmet, ...
Upcoming SlideShare
Loading in...5
×

Drools 6.0 (JudCon 2013)

3,527

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,527
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
113
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Drools 6.0 (JudCon 2013)"

  1. 1. Not Quite There Yet •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 Saturday, 29 June 13
  2. 2. Who am I? • Drools co-founder • JBoss (2005) • Red Hat (2006) • Polymita Acquisition 2012 • Red Hat Platform Architect Saturday, 29 June 13
  3. 3. KIE - Knowledge Is Everything KIE Drools jBPMOptaPlanner UberFire Guvnor Drools-WB jBPM-WB KIE-WB Saturday, 29 June 13
  4. 4. GitHub • URL: • https://github.com/droolsjbpm/ • Bootstrap project: • https://github.com/droolsjbpm/droolsjbpm- build-bootstrap Saturday, 29 June 13
  5. 5. Changes • Conventions: • droolsjbpm -> kie • knowlege -> kie • Examples • KnowledgeBase -> Kie • StatefulKnowledgeSession -> KieSession • StatelessKnowledgeSession - StatelesKieSession • Legacy API Adapter JAR • Most API’s should work with legacy adapter • KnowledegAgents have not been ported, PKG’s are not longer the unit of deployment Saturday, 29 June 13
  6. 6. BRMS 6.0 Simplified Utilization Saturday, 29 June 13
  7. 7. BRMS 5.0 Programmatic API KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.batch().add( newClassPathResource( "Model.drl", getClass() ), DRL ) .add( newClassPathResource( "Queries.drl", getClass() ), DRL ) .add( newClassPathResource( "General.drl", getClass() ), DRL ) .add( newClassPathResource( "Response.drl", getClass() ), DRL ) .add( newClassPathResource( "Events.drl", getClass() ), DRL ) .add( newClassPathResource( "UiView.drl", getClass() ), DRL ) .add( newClassPathResource( "Commands.drl", getClass() ), DRL ).build(); if ( kbuilder.hasErrors() ) { System.out.println( kbuilder.getErrors().toString() ); System.exit( 1 ); } KieBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kbaseConf.setOption( EqualityBehaviorOption.EQUALITY ); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kbaseConf ); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); Counter c = new Counter(); ksession = kbase.newStatefulKnowledgeSession(); Saturday, 29 June 13
  8. 8. KieModules • Discovery • META-INF/kmodule.xml • Convention based • No programmatic api for building • Multiple Named entities • Inheritence of Resources • Defaults for lazy people • Version built in a standard Saturday, 29 June 13
  9. 9. Git Hub Examples• https://github.com/droolsjbpm/drools/tree/master/drools- examples-api Saturday, 29 June 13
  10. 10. KieModules <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org/kie/6.0.0/kmodule"> </kmodule> KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession(); kSession.setGlobal("out", out); kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?")); kSession.fireAllRules(); Saturday, 29 June 13
  11. 11. 11 Saturday, 29 June 13
  12. 12. KieModules• Named Entities and JAR on Classpath • Creates one KieBase • Includes resources from package matching kbase name <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> <kbase name="kbase1"> <ksession name="ksession1"/> </kbase> </kmodule> KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession("ksession1"); kSession.setGlobal("out", out); kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?")); kSession.fireAllRules(); Saturday, 29 June 13
  13. 13. 13 Saturday, 29 June 13
  14. 14. KieModules• Named Entities, with inheritence and JAR on Classpath • Two projects, one “includes” from the other <dependency> <groupId>org.drools</groupId> <artifactId>named-kiesession</artifactId> <version>6.0.0-SNAPSHOT</version> </dependency> <kbase name="kbase2" includes="kbase1"> <ksession name="ksession2"/> </kbase> KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession("ksession2"); kSession.setGlobal("out", out); kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?")); kSession.fireAllRules(); kSession.insert(new Message("Dave", "Open the pod bay doors, HAL.")); kSession.fireAllRules(); Saturday, 29 June 13
  15. 15. KieModules• Package location can over-ride kbase name defaults <kbase name="WumpusMainKB" packages="org.drools.games.wumpus.server, org.drools.games.wumpus.server.view"> <ksession name="WumpusMainKS" /> </kbase> <kbase name="WumpusClientKB" packages="org.drools.games.wumpus.client"> <ksession name="WumpusClientKS"/> </kbase> KieContainer kc = KieServices.Factory.get().getKieClasspathContainer(); final KieSession serverKsession = kc.newKieSession( "WumpusMainKS"); final KieSession clientKsession = kc.newKieSession("WumpusClientKS"); Saturday, 29 June 13
  16. 16. Dynamic KieModules • JARs can be loaded from URLs into KieRepository • Once loaded they can be resolved via ReleaseId KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieModule kModule = kr.addKieModule(ks.getResources().newFileSystemResource( getFile("default-kiesession"))); KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId()); KieSession kSession = kContainer.newKieSession(); kSession.setGlobal("out", out); Object msg1 = createMessage(kContainer, "Dave", "Hello, HAL. Do you read me, HAL?"); kSession.insert(msg1); kSession.fireAllRules(); Saturday, 29 June 13
  17. 17. Dynamic KieModules • kie-ci use embedded maven for remote discovery <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> </dependency> KieServices ks = KieServices.Factory.get(); // Install example1 in the local maven repo before to do this KieContainer kContainer = ks.newKieContainer( ks.newReleaseId("org.drools", "named-kiesession", "6.0.0-SNAPSHOT")); KieSession kSession = kContainer.newKieSession("ksession1"); kSession.setGlobal("out", out); Object msg1 = createMessage(kContainer, "Dave", "Hello, HAL. Do you read me, HAL?"); kSession.insert(msg1); kSession.fireAllRules(); Saturday, 29 June 13
  18. 18. Dynamic Modules // create a new kjar InternalKieModule kJar2 = createKieJar(ks, releaseId, "rule2", "rule3"); // deploy it on maven repository.deployArtifact(releaseId, kJar2, kPom); // since I am not calling start() on the scanner it means it won't have automatic scheduled scanning KieScanner scanner = ks.newKieScanner(kieContainer); // scan the maven repo to get the new kjar version and deploy it on the kcontainer scanner.scanNow(); // create a ksesion and check it works as expected KieSession ksession2 = kieContainer.newKieSession("KSession1"); checkKSession(ksession2, "rule2", "rule3"); Saturday, 29 June 13
  19. 19. KieModules• Package location can over-ride kbase name defaults <kbase name="WumpusMainKB" packages="org.drools.games.wumpus.server, org.drools.games.wumpus.server.view"> <ksession name="WumpusMainKS" /> </kbase> <kbase name="WumpusClientKB" packages="org.drools.games.wumpus.client"> <ksession name="WumpusClientKS"/> </kbase> KieContainer kc = KieServices.Factory.get().getKieClasspathContainer(); final KieSession serverKsession = kc.newKieSession( "WumpusMainKS"); final KieSession clientKsession = kc.newKieSession("WumpusClientKS"); Saturday, 29 June 13
  20. 20. kmodule.xml Editor Saturday, 29 June 13
  21. 21. Programmatic API • Builder API, for tooling integration • Incremental compilation, and problem reporting KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write("src/main/resources/org/kie/example5/HAL5.drl", getRule()); KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built. if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:n" + kb.getResults().toString()); } KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); KieSession kSession = kContainer.newKieSession(); kSession.setGlobal("out", out); kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?")); kSession.fireAllRules(); Saturday, 29 June 13
  22. 22. Dynamic KieModules • kie-ci use embedded maven for remote discovery <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> </dependency> KieServices ks = KieServices.Factory.get(); // Install example1 in the local maven repo before to do this KieContainer kContainer = ks.newKieContainer( ks.newReleaseId("org.drools", "named-kiesession", "6.0.0-SNAPSHOT")); KieSession kSession = kContainer.newKieSession("ksession1"); kSession.setGlobal("out", out); Object msg1 = createMessage(kContainer, "Dave", "Hello, HAL. Do you read me, HAL?"); kSession.insert(msg1); kSession.fireAllRules(); Saturday, 29 June 13
  23. 23. BRMS 6.0 CDI Saturday, 29 June 13
  24. 24. CDI Context and Dependency • CDI injects named entities from the kmodule.xml • Injectable types • KieServices • KieContainer • KieBase • KieSession • StatelessKieSession Saturday, 29 June 13
  25. 25. KBase @Inject @KBase(value="jar1.KBase1", name="kb2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb2; @Inject @KBase(value="jar1.KBase1", name="kb2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb22; @Inject private KieBase defaultClassPathKBase; @Inject @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase defaultDynamicKBase; @Inject @KBase("jar1.KBase1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1v10; @Inject @KBase("jar1.KBase1") @KReleaseId(groupId = "jar1", artifactId = "art1", version = "1.1") private KieBase jar1KBase1v11; @Inject @KBase(value="jar1.KBase1", name="kb1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb1; Saturday, 29 June 13
  26. 26. KSession @Inject @KSession("jar1.KSession2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2v10; @Inject @KSession("jar1.KSession2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.1" ) private KieSession kbase1ksession2v11; @Inject @KSession(value="jar1.KSession2", name="ks1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks1; @Inject @KSession(value="jar1.KSession2", name="ks2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks2 ; @Inject @KSession(value="jar1.KSession2", name="ks2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks22; Saturday, 29 June 13
  27. 27. BRMS 6.0 Spring and Camel Saturday, 29 June 13
  28. 28. Spring and Camel Saturday, 29 June 13
  29. 29. Spring and Camel Saturday, 29 June 13
  30. 30. Spring and Camel Saturday, 29 June 13
  31. 31. Spring and Camel Saturday, 29 June 13
  32. 32. Backward Chaining Reactive Transitive Closures Saturday, 29 June 13
  33. 33. 33 Reasoning with Graphs ●Location( “kitchen”,”house” )●Location( “office”,”house” ) ●Location( “desk”,”office” ) ●Location( “chair”,”office” ) ●Location( “lamp”,”desk” ) ●Location( “draw”,”desk” ) ●Location( “computer”,”desk” ) ●Location( “key”,”draw” ) House Saturday, 29 June 13
  34. 34. 34 Backward Chaining query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  35. 35. Backward Chainingksession.insert( new Location("Office", "House") ); ksession.insert( new Location("Kitchen", "House") ); ksession.insert( new Location("Knife", "Kitchen") ); ksession.insert( new Location("Cheese", "Kitchen") ); ksession.insert( new Location("Desk", "Office") ); ksession.insert( new Location("Chair", "Office") ); ksession.insert( new Location("Computer", "Desk") ); ksession.insert( new Location("Draw", "Desk") ); House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  36. 36. Backward Chainingrule "go" salience 10 when $s : String( ) then System.out.println( $s ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  37. 37. Backward Chainingrule "go1" when String( this == "go1" ) isContainedIn("Office", "House"; ) then System.out.println( "office is in the house" ); end rule "go" salience 10 when $s : String( ) then System.out.println( $s ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  38. 38. Backward Chainingrule "go1" when String( this == "go1" ) isContainedIn("Office", "House"; ) then System.out.println( "office is in the house" ); end rule "go" salience 10 when $s : String( ) then System.out.println( $s ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  39. 39. Backward Chainingrule "go1" when String( this == "go1" ) isContainedIn("Office", "House"; ) then System.out.println( "office is in the house" ); end rule "go" salience 10 when $s : String( ) then System.out.println( $s ); end ksession.insert( "go1" ); ksession.fireAllRules(); --- go1 office is in the house query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  40. 40. Backward Chainingrule "go1" when String( this == "go1" ) isContainedIn("Office", "House"; ) then System.out.println( "office is in the house" ); end rule "go" salience 10 when $s : String( ) then System.out.println( $s ); end ksession.insert( "go1" ); ksession.fireAllRules(); --- go1 office is in the house query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end isContainedIn(x==Office, y==House) House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  41. 41. Backward Chainingrule "go1" when String( this == "go1" ) isContainedIn("Office", "House"; ) then System.out.println( "office is in the house" ); end rule "go" salience 10 when $s : String( ) then System.out.println( $s ); end ksession.insert( "go1" ); ksession.fireAllRules(); --- go1 office is in the house query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(x==Office, y==House) isContainedIn(x==Office, y==House) House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  42. 42. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  43. 43. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  44. 44. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  45. 45. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end isContainedIn(x==Draw, y==House) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  46. 46. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(z==Office, y==House) isContainedIn(x==Draw, y==House) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  47. 47. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(z==Office, y==House) isContainedIn(x==Draw, z==Office) isContainedIn(x==Draw, y==House) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  48. 48. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(z==Office, y==House) isContainedIn(x==Draw, z==Office) Location(z==Kitchen, y==House) isContainedIn(x==Draw, z==Kitchen) isContainedIn(x==Draw, y==House) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  49. 49. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end isContainedIn(x==Draw, y==Office) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  50. 50. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(z==Desk, y==Office) isContainedIn(x==Draw, y==Office) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  51. 51. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(z==Desk, y==Office) isContainedIn(x==Draw, z==Desk) isContainedIn(x==Draw, y==Office) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  52. 52. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end isContainedIn(x==Draw, y==Desk) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  53. 53. Backward Chaining rule "go2" when String( this == "go2" ) isContainedIn("Draw", "House"; ) then System.out.println( "Draw in the House" ); end query isContainedIn( String x, String y ) Location( x, y; ) or ( Location( z, y; ) and isContainedIn( x, z; ) ) end Location(x==Draw, y==Desk) isContainedIn(x==Draw, y==Desk) ksession.insert( "go2" ); ksession.fireAllRules(); --- go2 Draw in the House House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  54. 54. Backward Chaining rule "go3" when String( this == "go3" ) isContainedIn("Key", "Office"; ) then System.out.println( "Key in the Office" ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  55. 55. Backward Chaining rule "go3" when String( this == "go3" ) isContainedIn("Key", "Office"; ) then System.out.println( "Key in the Office" ); end ksession.insert( "go3" ); ksession.fireAllRules(); --- go3 House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  56. 56. Backward Chaining rule "go3" when String( this == "go3" ) isContainedIn("Key", "Office"; ) then System.out.println( "Key in the Office" ); end ksession.insert( "go3" ); ksession.fireAllRules(); --- go3 ksession.insert( new Location("Key", "Draw") ); ksession.fireAllRules(); --- Key in the Office House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  57. 57. Backward Chaining rule "go4" when String( this == "go4" ) isContainedIn(thing, "Office"; ) then System.out.println( "thing " + thing + " is in the Office" ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  58. 58. Backward Chaining rule "go4" when String( this == "go4" ) isContainedIn(thing, "Office"; ) then System.out.println( "thing " + thing + " is in the Office" ); end Out House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  59. 59. Backward Chaining rule "go4" when String( this == "go4" ) isContainedIn(thing, "Office"; ) then System.out.println( "thing " + thing + " is in the Office" ); end ksession.insert( "go4" ); ksession.fireAllRules(); --- go4 thing Key is in the Office thing Computer is in the Office thing Draw is in the Office thing Desk is in the Office thing Chair is in the Office Out House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  60. 60. Backward Chaining rule "go5" when String( this == "go5" ) isContainedIn(thing, location; ) then System.out.println( "thing " + thing + " is in " + location ); end House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  61. 61. Backward Chaining rule "go5" when String( this == "go5" ) isContainedIn(thing, location; ) then System.out.println( "thing " + thing + " is in " + location ); end Out House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  62. 62. Backward Chaining rule "go5" when String( this == "go5" ) isContainedIn(thing, location; ) then System.out.println( "thing " + thing + " is in " + location ); end Out Out House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  63. 63. Backward Chaining rule "go5" when String( this == "go5" ) isContainedIn(thing, location; ) then System.out.println( "thing " + thing + " is in " + location ); end ksession.insert( "go5" ); ksession.fireAllRules(); --- go5 thing Knife is in House thing Cheese is in House thing Key is in House thing Computer is in House thing Draw is in House thing Desk is in House thing Chair is in House thing Key is in Office thing Computer is in Office thing Draw is in Office thing Key is in Desk thing Office is in House Out Out thing Computer is in Desk thing Knife is in Kitchen thing Cheese is in Kitchen thing Kitchen is in House thing Key is in Draw thing Draw is in Desk thing Desk is in Office thing Chair is in Office House Location("Office", "House ") Location("Kitchen", "House") Location("Desk", "Office") Location("Chair", "Office") Location("Computer", "Desk") Location("Draw", "Desk") Location("Knife", "Kitchen") Location("Cheese", "Kitchen") Location("Key", "Draw") Saturday, 29 June 13
  64. 64. BRMS 6.0 Score Cards Saturday, 29 June 13
  65. 65. Score Cards• a) Setup Parameters • b) Characteristic Section Saturday, 29 June 13
  66. 66. Score Cards• UI Generates PMML • DRL Generated from PMML • DRL results in • Calculated Score • Ranked Reason Codes • Can import PMML 4.1 • but not exposed yet • Calculated Scores • Currently Summations • Weight coming • Not in PMML standard • Saturday, 29 June 13
  67. 67. 6.0 JTMS Saturday, 29 June 13
  68. 68. Justification-based Truth • Drools 5.x • Simple logical insertion TMS, like Clips, Jess and others. • Drools 6.0 • Contradiction handling with JTMS • Clean separation of exception logic • TMS now has pluggable Belief System • Simple TMS support • JTMS now possible. • Defeasible Logic soon • See drools-compiler • JTMSTest for lots of example tests Saturday, 29 June 13
  69. 69. 69 JTMS Couples the logic What happens when the Child stops being 16? rule "Issue Child Bus Pass" when $p : Person( age < 16 ) then insert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" when $p : Person( age >= 16 ) then insert(new AdultBusPass( $p ) ); end Saturday, 29 June 13
  70. 70. JTMS • Bad • Monolithic • Leaky • Brittle integrity - manual maintenance Saturday, 29 June 13
  71. 71. 71 JTMS de-couples the logic Maintains the truth by automatically retracting •A rule “logically” inserts an object •When the rule is no longer true, the object is retracted. rule "IsChild" when $p : Person( age < 16 ) then logicalInsert( new IsChild( $p ) ) end rule "IsAdult" when $p : Person( age >= 16 ) then logicalInsert( new IsAdult( $p ) ) end Saturday, 29 June 13
  72. 72. 72 JTMS The truth maintenance cascades rule "Issue Child Bus Pass" when $p : Person( ) IsChild( person =$p ) then logicalInsert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" when $p : Person() IsAdult( person =$p ) then logicalInsert(new AdultBusPass( $p ) ); end Saturday, 29 June 13
  73. 73. 73 JTMS rule "Issue Child Bus Pass" when $p : Person( ) not( ChildBusPass( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades Saturday, 29 June 13
  74. 74. 74 JTMS • Good • De-couple knowledge responsibilities • Encapsulate knowledge • Provide semantic abstractions for those encapsulation • Integrity robustness – truth maintenance Saturday, 29 June 13
  75. 75. JTMS IsChild ChildBusPas Rule : isChildRule Rule : IssueBusPas + + Saturday, 29 June 13
  76. 76. JTMS rule "Do not issue to banned people" when $p : Person( ) Banned( person =$p ) then logicalInsert(new ChildBusPass( $p ) , “neg” ); end Saturday, 29 June 13
  77. 77. JTMS IsChild ChildBusPas Rule : isChildRule Rule : IssueBusPas + + Rule : Do Not Issue to Banned People - Saturday, 29 June 13
  78. 78. BRMS 6.0 R.I.P Rete Saturday, 29 June 13
  79. 79. R.I.P RETE inspirations: • Leaps, Collection Oriented Match, L/R Unlinking New Innovations • Full Rule, and Rule Segment Unlinking • Lazy Evaluation, with Rule scoping • Set propagations Previous Innovations • Modify In Place • Property Reactive • Tree Based Graphs • Subnetwork support Saturday, 29 June 13
  80. 80. BRMS 6.0 UI - OpenShift Ready Saturday, 29 June 13
  81. 81. 5.x Critique Saturday, 29 June 13
  82. 82. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives Saturday, 29 June 13
  83. 83. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives JCR • Performance Issues • Everything stored as blob • No tagging, branching etc. • Webdav • Limited team providers Saturday, 29 June 13
  84. 84. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives JCR • Performance Issues • Everything stored as blob • No tagging, branching etc. • Webdav • Limited team providers Deployment • Binary blobs, on url Saturday, 29 June 13
  85. 85. 5.x Critique Content • Single tree structure (packages) • Packages created project deployment units • no real alignment with industry stadard • No easy rule use (only a single global area) • Loading “model” jars into packages • Poor hack, for dependency management Saturday, 29 June 13
  86. 86. 5.x CritiqueDeployment •Simple Snapshot system •No real methodology •Doesn’t align with any industry standards Saturday, 29 June 13
  87. 87. UF UberFire Saturday, 29 June 13
  88. 88. Requirements • GWT + Errai • Modular design • Plugins • Common Life cycles • Compile time composition of plugins, via maven • Flexible layouts • Perspectives • GIT Backend • High Availability • Maven integration for “projects” Saturday, 29 June 13
  89. 89. UberFire Architecture Overview Saturday, 29 June 13
  90. 90. Saturday, 29 June 13
  91. 91. •Modular •Extensible •Dynamic and Flexible layouts •Perspectives Saturday, 29 June 13
  92. 92. Simple POM Editor Saturday, 29 June 13
  93. 93. Build and Deploy Saturday, 29 June 13
  94. 94. Local Maven Repository and Manager Saturday, 29 June 13
  95. 95. Create or Clone Git Repos Saturday, 29 June 13
  96. 96. KIE - Knowledge Is Everything Saturday, 29 June 13
  97. 97. KIE - Knowledge Is Everything Saturday, 29 June 13
  98. 98. KIE - Knowledge Is Everything Saturday, 29 June 13
  99. 99. Community Beta3 Demo Saturday, 29 June 13
  100. 100. UI Improvments Saturday, 29 June 13
  101. 101. UberFire new Navigation System Saturday, 29 June 13
  102. 102. UberFire new Navigation System Saturday, 29 June 13
  103. 103. UberFire new Navigation System Saturday, 29 June 13
  104. 104. UberFire new Navigation System Saturday, 29 June 13
  105. 105. Legacy Systems and Migration • Legacy API Adapter JAR • Most API’s should work with legacy adapter • KnowledegAgents have not been ported, PKG’s are not longer the unit of deployment • JCR Migration Tool • Command Line Java code • Each Package maps to a GIT project Saturday, 29 June 13
  106. 106. 107 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. Joshya: Greetings, Professor Falken. Falken: Hello, Joshua. Joshya: A strange game. The only winning move is not to play. How about a nice game of chess? Saturday, 29 June 13
  1. A particular slide catching your eye?

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

×