【发布时间】:2015-09-21 16:32:39
【问题描述】:
我正在尝试使用this 设置会话集群
我的码头.xml:
....
<Set name="sessionIdManager">
<New id="jdbcIdMgr" class="org.eclipse.jetty.server.session.JDBCSessionIdManager">
<Arg>
<Ref id="Server"/>
</Arg>
<Set name="workerName"><Property name="jetty.jdbcSession.workerName" default="node1"/></Set>
<Set name="scavengeInterval"><Property name="jetty.jdbcSession.scavenge" default="1800"/></Set>
<Call name="setDriverInfo">
<Arg><Property name="jetty.jdbcSession.driverClass"
default="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"/></Arg>
<Arg><Property name="jetty.jdbcSession.connectionURL"
default="jdbc:mysql://${datasource.dbServerName}:${datasource.dbServerPort}/${datasource.dbName}"/></Arg>
</Call>
</New>
</Set>
.....
我的 jetty-web.xml :
<Get name="Server">
<Get id="jdbcIdMgr" name="sessionIdManager"/>
</Get>
<Set name="sessionHandler">
<New class="org.eclipse.jetty.server.session.SessionHandler">
<Arg>
<New id="jdbcmgr" class="org.eclipse.jetty.server.session.JDBCSessionManager">
<Set name="idManager">
<Ref id="jdbcIdMgr"/>
</Set>
</New>
</Arg>
</New>
</Set>
问题是我在服务器启动期间遇到了 NPE,因为服务器实例未设置为我的 WebAppContext 实例,所以我无法使用 sessionIdManager 获取我的 sessionIdManager:
<Get name="Server">
<Get id="jdbcIdMgr" name="sessionIdManager"/>
</Get>
我查看了 jetty-maven 插件源,发现一开始它配置了我的 WebAppContext 实例,然后调用了 setServer:
//set up the webapp and any context provided
this.server.configureHandlers();
configureWebApplication();
this.server.addWebApplication(webApp);
如何正确设置会话集群内容?
【问题讨论】:
-
您在滥用
jetty-maven-plugin的角色(用于测试简单的网络应用程序)。您最好通过添加为您的实例配置的start.ini将您的项目设为正式的${jetty.base}。 -
@JoakimErdfelt 我们已经有很多应用程序配置为使用 jetty-maven 插件。重新配置所有东西会有点贵。我发布了我在下面找到的解决方案。可以接受吗?
标签: java webserver jetty embedded-jetty maven-jetty-plugin