【发布时间】:2015-02-23 16:28:57
【问题描述】:
我正在尝试将 Tomcat 应用程序移植到 JettyRunner 9.2 我想将我的应用程序移动到 Heroku,因此我需要使用嵌入式服务器或 JettyRunner 来启动它。我认为 JettyRunner 是最简单的,因为我可以保留 WAR 格式,并在必要时轻松移植。
任何帮助将不胜感激。如果我不能很快让它工作,我可以尝试嵌入式 Tomcat,或者查看不需要我更改容器的托管。
如果使用 Jetty 的其他方法 - 也许嵌入式 Jetty 会更容易,请告诉我并指出一些细节。
所以,对于应用行为。该应用程序似乎可以正常移植并且可以正常启动,但是登录时出现错误。这是一个例外
2014-12-26 05:18:21.189:WARN:oejs.session:org.eclipse.jetty.server.session.HashSessionManager@69f63d95Timer: Problem scavenging sessions
java.lang.NullPointerException
at com.sun.faces.application.view.ViewScopeContextManager.destroyBeans(Unknown Source)
at com.sun.faces.application.view.ViewScopeContextManager.sessionDestroyed(Unknown Source)
at com.sun.faces.application.view.ViewScopeManager.sessionDestroyed(Unknown Source)
at com.sun.faces.application.WebappLifecycleListener.sessionDestroyed(Unknown Source)
at com.sun.faces.config.ConfigureListener.sessionDestroyed(Unknown Source)
at org.eclipse.jetty.server.session.AbstractSessionManager.removeSession(AbstractSessionManager.java:772)
at org.eclipse.jetty.server.session.AbstractSession.timeout(AbstractSession.java:302)
at org.eclipse.jetty.server.session.HashSessionManager.scavenge(HashSessionManager.java:358)
at org.eclipse.jetty.server.session.HashSessionManager$Scavenger.run(HashSessionManager.java:84)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
这是我的 jetty 和 jsf 依赖项:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.2.6.v20141205</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.2.6.v20141205</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.9</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
这是我的 pom 的 maven jetty 插件部分:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${org.eclipse.jetty.version}</version>
<configuration>
<webApp>
<overrideDescriptor>src/main/webapp/WEB-INF/jetty-web-override.xml</overrideDescriptor>
</webApp>
<contextXml>src/main/webapp/WEB-INF/jetty-context.xml</contextXml>
</configuration>
</plugin>
我的 web.xml 中的侦听器
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
jetty-web-override.xml
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>
javax.enterprise.inject.spi.BeanManager
</resource-env-ref-type>
</resource-env-ref>
jetty-env.xml
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="webAppCtx" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="BeanManager" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>
<Ref id="webAppCtx"/>
</Arg>
<Arg>BeanManager</Arg>
<Arg>
<New class="javax.naming.Reference">
<Arg>javax.enterprise.inject.spi.BeanManager</Arg>
<Arg>org.jboss.weld.resources.ManagerObjectFactory</Arg>
<Arg/>
</New>
</Arg>
</New>
</Configure>
最后,jetty.context:
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="serverClasses">
<Array type="java.lang.String">
<Item>-org.eclipse.jetty.servlet.ServletContextHandler.Decorator</Item>
</Array>
</Set>
</Configure>
【问题讨论】:
-
Stacktrace 中的 NPE 似乎是 Glassfish / Faces 问题。
-
是 - 可能与 View Scoped beans 有关 - 但尚未找到任何相关内容
标签: maven jsf heroku jetty cdi