feature flags mit togglz

31
Feature Flags mit Togglz Christian Kaltepoth

Upload: christian-kaltepoth

Post on 24-Jun-2015

735 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Feature Flags mit Togglz

Feature Flags mit Togglz

Christian Kaltepoth

Page 2: Feature Flags mit Togglz

Über mich● Christian Kaltepoth● Senior Software Developer● Fokus: JEE, Web, JSF, CDI, ...● Open Source Developer

ingenit GmbH & Co. KG● Gegründet 1997● Softwareprojekte Java & .NET● Fokus: Webanwendungen & BI● Schulung und Beratung● 123domain.eu Domainmanagement

Page 3: Feature Flags mit Togglz

Continuous Delivery

Page 4: Feature Flags mit Togglz

Continuous Delivery Patterns

● Branching vermeiden / Branch by Abstraction● Continuous Integration● Blue / Green Deployment● Continuous Deployment● Dark Launching / Dark Testing● Feature Toggles

Page 5: Feature Flags mit Togglz

Feature Toggles

Page 6: Feature Flags mit Togglz

Pending Features

Page 7: Feature Flags mit Togglz

Erprobung in Produktionssystem

Page 8: Feature Flags mit Togglz

Im Notfall

Page 9: Feature Flags mit Togglz

Feature Flags for the Java plattform

Page 10: Feature Flags mit Togglz

Entwicklungsziele

● Einfache Nutzung● Geringer Integrationsaufwand● Integration in die Anwendungsarchitektur● Unterstützung von Security Frameworks

Page 11: Feature Flags mit Togglz

Was ist ein Feature?

● Neue Funktion● Alternative Implementierung● Optimierung● ...

Page 12: Feature Flags mit Togglz

Installation

● Webseite: http://www.togglz.org/● ZIP-Archiv / Maven Central● Modular aufgebaut

Page 13: Feature Flags mit Togglz

Schritt 1:

Feature-Definition

Page 14: Feature Flags mit Togglz

Feature Definition

public enum MyFeatures implements Feature {

@Label("First Feature") FEATURE_ONE,

@EnabledByDefault @Label("Second Feature") FEATURE_TWO;

@Override public boolean isActive() { return FeatureContext.getFeatureManager().isActive(this); }

}

Page 15: Feature Flags mit Togglz

Schritt 2:

Konfigurationsklasse

Page 16: Feature Flags mit Togglz

Konfiguration

public class MyTogglzConfig implements TogglzConfig {

public Class<? extends Feature> getFeatureClass() { return MyFeatures.class; }

public StateRepository getStateRepository() { return new FileBasedStateRepository( new File("/somewhere/features.properties")); }

public UserProvider getUserProvider() { return new ServletUserProvider(); }

}

Page 17: Feature Flags mit Togglz

@Componentpublic class MyTogglzConfig implements TogglzConfig {

@Autowired private DataSource dataSource;

public Class<? extends Feature> getFeatureClass() { return MyFeatures.class; }

public StateRepository getStateRepository() { return new JDBCStateRepository(dataSource); }

public UserProvider getUserProvider() { return new SpringSecurityUserProvider("ADMIN"); }

}

Spring

Page 18: Feature Flags mit Togglz

Verwendung

public void someBusinessMethod() { // some code

if( MyFeatures.FEATURE_ONE.isActive() ) {

// new code for FEATURE_ONE

}

// more code }

Page 19: Feature Flags mit Togglz

JSF Integration

<a4j:commandButton execute="@this" value="Reset Sorting" action="#{carsSortingBean.reset}" render="table" rendered="#{features['FEATURE_ONE']}" />

Page 20: Feature Flags mit Togglz

Und jetzt?

Wie aktiviere ich nun Features?● Direkt über die Datei / Datenbank● Togglz Admin Console

Page 21: Feature Flags mit Togglz

Togglz Admin Console

Was ist die Admin Console?● Integrierte Webanwendung● Erlaubt es Features zu aktivieren/deaktivieren● Verwendet Togglz UserProvider

Installation● JAR Archiv zur Applikation hinzufügen● Fertig!

http://localhost:8080/myapp/togglz

Page 22: Feature Flags mit Togglz

Togglz Admin Console

Page 23: Feature Flags mit Togglz

Togglz Admin Console

Page 24: Feature Flags mit Togglz

Framework Integration

Page 25: Feature Flags mit Togglz

Unterstützte Security APIs

Page 26: Feature Flags mit Togglz

@Componentpublic class MyTogglzConfiguration implements TogglzConfig {

/* ..... */

@Override public UserProvider getUserProvider() { return new SpringSecurityUserProvider("ADMIN"); }

}

Security

Page 27: Feature Flags mit Togglz

public class MyTogglzConfiguration implements TogglzConfig {

/* ..... */

@Override public UserProvider getUserProvider() { return new SeamSecurityUserProvider(); }}

public class SeamSecurityAuthorizer {

@Secures @FeatureAdmin public boolean isFeatureAdmin(Identity identity) { // check role }}

Page 28: Feature Flags mit Togglz

Erweiterbarkeit

● State Repositories● User Provider● Auffinden der Konfigurationklasse● Komplexe Deployment-Szenarien● Web-Frameworks?

Page 29: Feature Flags mit Togglz

Zusammenfassung

Togglz ...● unterstützt den Continuous Delivery Prozess.● ist einfach zu integrieren / verwenden.● integriert sich mit bekannten Frameworks.● ist beliebig erweiterbar.

Page 30: Feature Flags mit Togglz

Fragen?

Page 31: Feature Flags mit Togglz

Vielen Dank für die Aufmerksamkeit!