易鲸捷大数据库 2015-01-23
本文是把session 存在数据库当中, 为测试方便采用hsql数据库,hsql数据库比较小, 使用起来很方便, 在产品环境还是换会mysql 数据库好一些。
配置参考下面页面
http://www.eclipse.org/jetty/documentation/current/session-clustering-jdbc.html
主要有2个部分要配置, session ID manager和session manager。
session ID manager是确保session IDs是唯一的,并把session 信息保持在数据库当中。所有web application可以用同一个session ID manager。
session manager是管理session 的生命周期,比如 (create/update/invalidate/expire),session mangager在每一个web application 都应该创建一个实例, 所以应该配置在jetty当中的
context xml或者WEB-INF/jetty-web.xml
当中。
在全局的jetty.xml中配置, 配置了数据库连接池c3p0, 需要把c3p0-0.9.5, mchange-commons-java-0.2.9,
hsqldb 放在etc/lib下面
<!-- data source jndi--> <Set name="sessionIdManager"> <New id="jdbcidmgr" class="org.eclipse.jetty.server.session.JDBCSessionIdManager"> <Arg> <Ref id="Server"/> </Arg> <Set name="workerName">fred</Set> <Set name="DatasourceName">jdbc/DSTest</Set> <Set name="scavengeInterval">60</Set> </New> </Set> <Call name="setAttribute"> <Arg>jdbcIdMgr</Arg> <Arg> <Ref id="jdbcidmgr"/> </Arg> </Call> <!-- jdbc config <Set name="sessionIdManager"> <New id="jdbcidmgr" class="org.eclipse.jetty.server.session.JDBCSessionIdManager"> <Arg><Ref id="Server"/></Arg> <Set name="workerName">fred</Set> <Call name="setDriverInfo"> <Arg>org.hsqldb.jdbc.JDBCDriver</Arg> <Arg>jdbc:hsqldb:hsql://localhost/session?user=SA</Arg> </Call> <Set name="scavengeInterval">60</Set> </New> </Set> <Call name="setAttribute"> <Arg>jdbcIdMgr</Arg> <Arg><Ref id="jdbcidmgr"/></Arg> </Call> --> <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg></Arg> <Arg>jdbc/DSTest</Arg> <Arg> <New class="com.mchange.v2.c3p0.ComboPooledDataSource"> <Set name="driverClass">org.hsqldb.jdbc.JDBCDriver</Set> <Set name="jdbcUrl">jdbc:hsqldb:hsql://localhost/session?user=SA</Set> <Set name="user">SA</Set> </New> </Arg> </New>
这里是采用context xml file配置方式
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Ref name="Server" id="Server"> <Call id="jdbcIdMgr" name="getAttribute"> <Arg>jdbcIdMgr</Arg> </Call> </Ref> <Set name="sessionHandler"> <New class="org.eclipse.jetty.server.session.SessionHandler"> <Arg> <New id="jdbcmgr" class="org.eclipse.jetty.server.session.JDBCSessionManager"> <Set name="sessionIdManager"> <Ref id="jdbcIdMgr"/> </Set> </New> </Arg> </New> </Set> </Configure>
cd /opt/jetty cd my-base java -jar ../start.jar --add-to-startd=jndi
http://www.eclipse.org/jetty/documentation/current/jndi.html
demo-base>java -jar ../start.jar
配置成功, jdbc保存session适合小型的集群, 大型集群可以考虑mongodb, redis, memcache.