これが jetty の問題なのか、shiro の問題なのかはわかりませんが、開発に Jetty-Maven プラグインを使用しようとしています。必要な重要な機能の 1 つは、ファイルが変更されたときの Jetty のホット再デプロイです。ただし、jetty がアプリケーションをリロードしようとすると、Shiro は次の例外をスローします。これを修正するために何ができるかわかりません。
[Scanner-0] ERROR org.apache.shiro.web.servlet.AbstractFilter - Unable to start Filter: [No WebEnvironment found: no EnvironmentLoaderListener registered?].
java.lang.IllegalStateException: No WebEnvironment found: no EnvironmentLoaderListener registered?
at org.apache.shiro.web.util.WebUtils.getRequiredWebEnvironment(WebUtils.java:276)
at org.apache.shiro.web.servlet.ShiroFilter.init(ShiroFilter.java:73)
at org.apache.shiro.web.servlet.AbstractShiroFilter.onFilterConfigSet(AbstractShiroFilter.java:152)
at org.apache.shiro.web.servlet.AbstractFilter.init(AbstractFilter.java:97)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:123)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:732)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:279)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1314)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:722)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:275)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.maven.plugin.JettyRunMojo.restartWebApp(JettyRunMojo.java:527)
at org.eclipse.jetty.maven.plugin.JettyRunMojo$1.filesChanged(JettyRunMojo.java:481)
at org.eclipse.jetty.util.Scanner.reportBulkChanges(Scanner.java:676)
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:539)
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
私の web.xml は次のようになります。
<?xml version="1.0" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- SHIRO CONFIGURATION ============================================== -->
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<!-- DATA SOURCE ====================================================== -->
<resource-ref>
<description>Account Data Source</description>
<res-ref-name>jdbc/AccountDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
そして最後に、これが私の maven pom ファイルの関連部分です。
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.0.0.RC2</version>
<configuration>
<jettyXml>src/jetty/jetty.xml</jettyXml>
<scanIntervalSeconds>1</scanIntervalSeconds>
<webApp>
<contextPath>/</contextPath>
<overrideDescriptor>src/jetty/override-web.xml</overrideDescriptor>
</webApp>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
</dependencies>
</plugin>
</plugins>
編集:別の関連情報。私は Eclipse でファイルを編集しており、M2E Maven Integration for Eclipse プラグインを使用しています。Eclipse やこのプラグインがファイルを再コンパイルする方法に関係している可能性があります。