2017-01-31 1 views
0

私のSpring MVCアプリケーションにTogglzを統合すると、以下のようになりました。依存関係以下はTogglz:java.lang.IllegalStateException:FeatureManagerを見つけることができませんでした

例外

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) 

のmavenで定義されています -

<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> 

マイConfigクラス -

public enum MyFeatures implements Feature { 


    @Label("First Feature") 
    FEATURE_ONE, 

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

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

    } 
} 
クラス -

@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")); 
    } 
} 

マイ特集

上記の設定はうまくいきましたが、私は "java.lang.IllegalStateException:ToggruzConfigまたはTogglzBootstrapの実装が見つかりませんでした。" このエラーは、状況のparamsの下に追加した後に消えていたが、今私が持っている

public class WebAppInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) { 

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


} 

答えて

0

「のFeatureManagerが見つかりませんでした」Spring統合は、何らかの理由で、あなたのアプリで動作していないように見えます。基本的にTogglzは、Spring固有のBeanFinder実装を使用して、Springアプリケーションコンテキストからインスタンスを検索します。この方法でTogglzはTogglzConfigを参照し、ブートストラップにはFeatureManagerとなります。

私の推測では、ここのブロックは、あなたのアプリのApplicationContextを見つけることができません。あなたは、対応するブレークポイントを設定することでこれを確認できます。

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

も春のContextLoaderListenerを登録し、正しく起動されていることを確認してください。それがなければ、Togglzの検索コードは正しく動作しません。

こちらがお役に立てば幸いです。

+0

再生するための簡単なステップを追加するだけです。 サンプルmvcプロジェクト - https://github.com/spring-projects/spring-mvc-showcase から開始し、次に私のtogglz設定を追加すると、まったく同じエラーが発生します。 – user2112430

関連する問題