4. Guvnor Now
● Fixed Layout
● Hard to build new UI layouts and components
● Lack of “role” oriented UIs
● JCR Backend
● Package oriented deployment
● Non standardized deployment models
● Rule re-use is hard
5. Future 6.x
● UberFire
– All panels are plugins
– Flexible Layout
– Perspectives
– Contextual toolbars, menus
● Security obfustication
– Built in Security
– Will build out base components
● Problem views, property editors, documentation viewer,
Cheat Sheets
6. Future 6.x
● GIT backend
● Jar oriented deployment
– Maven plugin
– Fits in Maven operational infrastructure
● Better rule reuse
– KBase includes
● Declarative programming models with CDI
– @Inject @KBase @Ksession
7. Future 6.x
● New Algorithm
– Merges ideas from: Rete, Leaps, Unlinking
● Big DRL clean up and Changes
– Biggest changes since 3.0
– Lots of new advanced language features
● Conditional Branches, Event Sequencing
● More Advanced AI
– JTMS, Defeasible Logic
– Description Logic
● Continue to improve programming models
– How we write and structure rules and groups of
rules,
17. Some Features
●
Decoupled components
●
Easily aggregation of components
●
Layout Manager, Perspectives and Views
●
Embeddable in any application
●
Reuse components as Eclipse plugins(*)
20. Technical Overview
●
Light weight container abstraction for Panels
●
Standard Life cycle and callbacks
– @Start, @Close, @Hide, @Show
●
Abstracted API
– Menus, Toolbars, Panels (reuse)
●
Virtual File System
– NIO2 back-port
●
Persisted Perspectives
●
Bus architecture abstracts all components from
the workbench
– Allows ease of 3rd party embedability
21. Sample Code
@Dependent
@WorkbenchEditor(identifier = "TextEditor")
public class TextEditorPresenter {
public interface View extends IsWidget {
void setContent(String content);
void setDirty(boolean dirty);
}
@Inject
public View view;
@Inject
private Caller<VFSService> vfsServices;
@OnStart
public void onStart(final Path path) {
this.path = path;
vfsServices.call( new RemoteCallback<String>() {
@Override
public void callback(String response) {
view.setContent( response );
}
} ).readAllString( path );
}
@OnClose
public void onClose() {
this.path = null;
}
@WorkbenchPartTitle
public String getTitle() {
return "Text Editor [" + path + "]";
}
@WorkbenchPartView
public IsWidget getWidget() {
return view;