2017-01-31 3 views
0

Ich bekomme unter Ausnahme, wenn Toggz mit meiner Spring MVC App integriert wird.Togglz: java.lang.IllegalStateException: Konnte den FeatureManager nicht finden

Ausnahme

java.lang.IllegalStateException: Could not find the FeatureManager. For web applications please verify that the TogglzFilter starts up correctly. In other deployment scenarios you will typically have to implement a FeatureManagerProvider as described in the 'Advanced Configuration' chapter of the documentation. 
    org.togglz.core.context.FeatureContext.getFeatureManager(FeatureContext.java:53) 
    org.togglz.core.manager.LazyResolvingFeatureManager.getDelegate(LazyResolvingFeatureManager.java:24) 
    org.togglz.core.manager.LazyResolvingFeatureManager.getCurrentFeatureUser(LazyResolvingFeatureManager.java:49) 
    org.togglz.console.TogglzConsoleServlet.isFeatureAdmin(TogglzConsoleServlet.java:75) 
    org.togglz.console.TogglzConsoleServlet.service(TogglzConsoleServlet.java:62) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.togglz.servlet.TogglzFilter.doFilter(TogglzFilter.java:100) 

Unter Abhängigkeiten in Maven definiert sind -

<dependency> 
    <groupId>org.togglz</groupId> 
    <artifactId>togglz-core</artifactId> 
    <version>2.3.0.Final</version> 
</dependency> 

<!-- Spring integration (optional) --> 
<dependency> 
    <groupId>org.togglz</groupId> 
    <artifactId>togglz-spring-web</artifactId> 
    <version>2.3.0.Final</version> 
</dependency> 
<!-- Togglz Admin Console --> 
<dependency> 
    <groupId>org.togglz</groupId> 
    <artifactId>togglz-console</artifactId> 
    <version>2.3.0.Final</version> 
</dependency> 

Meine Config-Klasse -

@Component 
public class MyTogglzConfiguration implements TogglzConfig { 

    /* ..... */ 

    @Override 
    public UserProvider getUserProvider() { 
     return new UserProvider() { 
      @Override 
      public FeatureUser getCurrentUser() { 
       return new SimpleFeatureUser("admin", true); 
      } 
     }; 
    } 

    @Override 
    public Class<? extends Feature> getFeatureClass() { 
     // TODO Auto-generated method stub 
     return MyFeatures.class; 
    } 

    @Override 
    public StateRepository getStateRepository() { 
     // TODO Auto-generated method stub 
     return new FileBasedStateRepository(new File("c:/tmp/features.properties")); 
    } 
} 

Meine Eigenschaft Class-

public enum MyFeatures implements Feature { 


    @Label("First Feature") 
    FEATURE_ONE, 

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

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

    } 
} 

Oben Konfiguration sollte gearbeitet haben, aber ich war ich bekam "java.lang.IllegalStateException: Konnte keine Implementierung von TogglzConfig oder TogglzBootstrap finden." Dieser Fehler wurde nach der Zugabe unter kontext params gegangen, aber jetzt habe ich „kann nicht Feature finden“

public class WebAppInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) { 

     servletContext.setInitParameter("org.togglz.FEATURE_MANAGER_PROVIDED", "true"); 
    } 


} 

Antwort

0

Es sieht aus wie der Frühling Integration ist aus irgendeinem Grunde nicht in der App zu arbeiten. Grundsätzlich verwendet Togglz Spring-spezifische BeanFinder Implementierungen, um Instanzen aus dem Spring-Anwendungskontext nachzuschlagen. Auf diese Weise sieht Togglz TogglzConfig zum Bootstrap ein FeatureManager.

Meine Vermutung ist, dass dieser Block hier nicht in der Lage ist, die ApplicationContext für Ihre App zu finden. Sie können dies überprüfen, indem Sie einen entsprechenden Haltepunkt setzen:

https://github.com/togglz/togglz/blob/2.3.0.Final/spring-web/src/main/java/org/togglz/spring/web/spi/SpringWebBeanFinder.java#L30-L40

Achten Sie auch darauf, dass Spring ContextLoaderListener registriert ist und korrekt aufgerufen. Ohne es funktioniert Togglz Lookup-Code nicht richtig.

Ich hoffe, das hilft.

+0

Nur um einfachere Schritte zum Reproduzieren hinzuzufügen. Ich habe genau den gleichen Fehler, wenn ich mit Probe mvc Projekt starten - https://github.com/spring-projects/spring-mvc-showcase und dann meine togglez Konfiguration hinzufügen. – user2112430

Verwandte Themen