Togglz выдает ошибку IllegalStateException
Я продолжаю получать IllegalStateException: не удалось найти FeatureManager при установке togglz в веб-приложении на Maven. Я точно следовал инструкциям. В моем приложении maven у меня есть следующие настройки в моем файле pom.xml:
<dependency>
<groupId>org.togglz</groupId>
<artifactId>togglz-core</artifactId>
<version>2.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.togglz</groupId>
<artifactId>togglz-console</artifactId>
<version>2.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.togglz</groupId>
<artifactId>togglz-servlet</artifactId>
<version>2.1.0.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
А также следующее в файле web.xml:
<context-param>
<param-name>org.togglz.core.manager.TogglzConfig</param-name>
<param-value>com.test.test.ana.FeatureFlagConfiguration</param-value>
</context-param>
<servlet>
<servlet-name>TogglzConsoleServlet</servlet-name>
<servlet-class>org.togglz.console.TogglzConsoleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TogglzConsoleServlet</servlet-name>
<url-pattern>/togglz/*</url-pattern>
</servlet-mapping>
Это примерное приложение maven работает нормально, но когда я пытаюсь перейти в виртуальный каталог togglz, оно выдает IllegalStateException: не удалось найти ошибку FeatureManager, оно не дает гораздо более подробной информации, чем это. Любые предложения относительно того, что на самом деле означает эта ошибка? Я просто пытаюсь получить пример проекта, который использует togglz, который работает. Я не могу использовать весну или CDI, только сервлеты. (да, у меня настроен сервлет 3.0)
Заранее спасибо,
Изменить: Вот точный след стека:
[ERROR ] SRVE0777E: Exception thrown by application class 'org.togglz.core.context.FeatureContext.getFeatureManager:49'
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.
at org.togglz.core.context.FeatureContext.getFeatureManager(FeatureContext.java:49)
at org.togglz.core.manager.LazyResolvingFeatureManager.getDelegate(LazyResolvingFeatureManager.java:24)
at org.togglz.core.manager.LazyResolvingFeatureManager.getCurrentFeatureUser(LazyResolvingFeatureManager.java:49)
at org.togglz.console.TogglzConsoleServlet.isFeatureAdmin(TogglzConsoleServlet.java:68)
at org.togglz.console.TogglzConsoleServlet.service(TogglzConsoleServlet.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285)
at [internal classes]
1 ответ
Если вы находитесь в простой среде сервлетов, вам нужно будет сделать следующие вещи после добавления зависимостей Maven:
Реализуйте свою функцию enum
Это обычно выглядит так:
public enum MyFeatures implements Feature {
@EnabledByDefault
@Label("First Feature")
FEATURE_ONE,
@Label("Second Feature")
FEATURE_TWO;
public boolean isActive() {
return FeatureContext.getFeatureManager().isActive(this);
}
}
Настройте Togglz, внедрив TogglzConfig
Типичный пример выглядит так:
public class MyTogglzConfiguration implements TogglzConfig {
public Class<? extends Feature> getFeatureClass() {
return MyFeatures.class;
}
public StateRepository getStateRepository() {
return new FileBasedStateRepository(new File("/tmp/features.properties"));
}
public UserProvider getUserProvider() {
return new ServletUserProvider();
}
}
Зарегистрируйте свой класс конфигурации в web.xml
В простой среде сервлетов вам теперь нужно зарегистрировать свою реализацию TogglzConfig, добавив что-то вроде этого в ваш web.xml:
<context-param>
<param-name>org.togglz.core.manager.TogglzConfig</param-name>
<param-value>com.example.myapp.MyTogglzConfiguration</param-value>
</context-param>
Вы также должны явно указать Togglz, что вы не хотите, чтобы он просматривал FeatureManager из Spring или CDI, а создал сам экземпляр и управлял им:
<context-param>
<param-name>org.togglz.FEATURE_MANAGER_PROVIDED</param-name>
<param-value>true</param-value>
</context-param>
В средах Servlet 3.0 TogglzFilter обычно выбирается автоматически. Однако вы также можете зарегистрировать его вручную:
<filter>
<filter-name>TogglzFilter</filter-name>
<filter-class>org.togglz.servlet.TogglzFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TogglzFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Я надеюсь, что это поможет. Если это все еще не работает, пожалуйста, включите полную трассировку стека в ваш вопрос.