jetty 配置集群

本文是把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当中。

配置 JDBCSessionIdManager

在全局的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>

配置JDBCSessionManager

这里是采用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>

使jetty 添加jnidi module

cd /opt/jetty
cd my-base
java -jar ../start.jar --add-to-startd=jndi

 http://www.eclipse.org/jetty/documentation/current/jndi.html

启动jetty

demo-base>java -jar ../start.jar

配置成功, jdbc保存session适合小型的集群, 大型集群可以考虑mongodb, redis, memcache.

相关推荐