欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jetty 配置集群 hsqldbmongodbredis集群 

程序员文章站 2022-03-26 10:08:31
...

本文是把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.

 

http://laravel.iteye.com