1 of 18

HAL UberFire�Migration POC

March 7 2014

2 of 18

The Task

  • Convert the HAL codebase:
    • From GWTP MVP framework to UberFire Workbench
    • From GIN IoC (Guice) to Errai IOC (CDI)

3 of 18

The Task

  • Keep:
    • Overall application structure
    • As much code as possible
    • Same look & feel

4 of 18

The Task

  • Constraints:
    • Find a way to migrate incrementally
    • Have something working by March 11

5 of 18

6 of 18

How GWTP Works:�Nested Presenters

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

… (3 more)

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

… (many more)

7 of 18

How GWTP Works:�Nested Presenters

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

… (3 more)

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

… (many more)

revealInParent()

PlaceManager.revealPlace(“role-assignment”)

8 of 18

How GWTP Works:�Nested Presenters

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

… (3 more)

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

… (many more)

revealInParent()

PlaceManager.revealPlace(“role-assignment”)

9 of 18

How GWTP Works:�Nested Presenters

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

… (3 more)

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

… (many more)

revealInParent()

PlaceManager.revealPlace(“role-assignment”)

10 of 18

How GWTP Works:�Nested Presenters

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

… (3 more)

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

… (many more)

revealInParent()

PlaceManager.revealPlace(“role-assignment”)

11 of 18

Migration Phase 1:�Horizontal Slices

RootPresenter

AdministrationPresenter

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

Remove

UF

Perspectives

No Change

Administration

Perspective

ProfilePerspective

StandaloneRuntime

Perspective

DomainRuntime

Perspective

Mostly

Unchanged

12 of 18

Phase 1 Details

  • UberFire now manages the Header, Footer, and the perspective presenters
    • The 7 HAL perspective presenters call into UberFire’s PlaceManager and ask it to navigate to their corresponding UF Perspective
  • Some classes are instantiated by GIN; others by Errai. We’ve used Providers & Producers to build bridges in both directions.
  • Errai IOC bootstraps first, followed by GIN
  • Lots more; we could bore you for hours :-)

13 of 18

14 of 18

Migration Phase 2:�Vertical Slices

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

ViewPresenter

No Change

ServerMgmtApplication

Presenter

StandaloneRuntime

Presenter

DomainRuntime

Presenter

UF

Perspectives

Administration

Perspective

ProfilePerspective

StandaloneRuntime

Perspective

DomainRuntime

Perspective

Mostly

Unchanged

Fully Errai & UF

15 of 18

Phase 2 Details

  • Startup ordering problem (Errai vs. GIN) becomes much more prevalent
    • Sometimes necessary to change static field access to @Inject and let the container sort things out
    • Sometimes necessary to move static field access out of constructor and into a @PostConstruct method
  • Deciding which beans to convert over to Errai vs. leave in GIN can be tricky (but becomes easier over time as more and more already live in Errai)

16 of 18

Actual Progress

  • Phase 1
  • Phase 2
    • In progress for Administration perspective
    • Currently juggling bean management between GIN and Errai to find a working combination
    • https://github.com/jfuerth/hal-core/tree/errai (work in progress)

17 of 18

HAL’s future with UberFire

  • GWT-based PatternFly (RCUE) implementation, likely on top of GWTBootstrap
  • Keycloak integration for SSO and user/group management UI
  • Easier compile-time modularity
  • Fancy new I18N tools

18 of 18

Open Questions / TODO

  • We will probably add a feature like GWTP’s @Gatekeeper to UberFire
  • We are not sure if HAL should migrate to UberFire’s RBAC system, or use the new UF Gatekeeper system to continue using the existing HAL RBAC
  • Code Splitting