同一个tomcat不同项目的session共享问题(三)

需要准备的软件:

apache-tomcat-7.0.79

Redis服务器

tomcat-redis-session-manager-1.2.jar

jedis-2.5.2.jar

commons-pool2-2.0.jar

这个tomcat-redis-session-manager版本暂时只支持tomcat7.0。支持8.0的下一篇再讲。

准备的测试程序:

a.war。重新命名一个b,都放到webapps下。

3个jar包都放到tomcat的lib下。

需要修改的配置:

修改两tomcat的context.xml:

<Context>  
  
    <!-- Default set of monitored resources -->  
    <WatchedResource>WEB-INF/web.xml</WatchedResource>  
  
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->  
    <!-- 
    <Manager pathname="" /> 
    -->  
  
    <!-- Uncomment this to enable Comet connection tacking (provides events  
         on session expiration as well as webapp lifecycle) -->  
    <!-- 
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> 
    -->  
  
  <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
   host="localhost"  
   port="6379"  
   database="0"  
   maxInactiveInterval="60" />  
</Context>

这里的host是指redis的服务器所在ip

启动redis服务


网上说这样已经能看到效果了。但我自己试了不知道,为什么哪里有问题。为此我还改了一个地方:

tomcat 的 server.xml,找到 Host 节点,加入配置

<Context path="/a"  debug="9" reloadable="true" sessionCookiePath="/" />  
<Context path="/b"  debug="9" reloadable="true" sessionCookiePath="/" />

这个是为了让2个程序共享一个sessionid。然后再重新启动tomcat就可以了。


a.war.zip

下载之后去掉.zip就行。

同一个tomcat不同项目的session共享问题(二)

问题描述: 
session常常用来存储一些公共信息供不同页面访问,比如用户登录信息。访问同一个tomcat下的不同项目所创建的session是不一样的。自然地面临了如何共享session的问题。

解决思路: 
解决数据共享问题的思路无非两种 
1、找个公共的地方存放共享的数据 
2、不同数据源之间做数据同步

解决方案: 
1、修改tomcat的server.xml文件 
每一个web应用程序都有唯一一个ServletContext实例对象,被该web应用下面的每一个servlet共享。通过修改tomcat的server.xml,使不同web应用的ServletContext可以互相访问。然后,用ServletContext的setAttribute()方法把session存入ServletContext中,在另一个web程序就可以用getAttribute()方法取得传递过来的session。

server.xml文件修改如下:

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">
    <Context path="/WebappA"  debug="9" reloadable="true" crossContext="true"/> //WebappA为项目名,crossContext="true"是关键    
    <Context path="/WebappB"  debug="9" reloadable="true" crossContext="true"/>
</Host>

crossContext属性的意思是:如果设置为true,你可以通过ServletContext.getContext() 调用另外一个WEB应用程序,获得ServletContext 然后再调用其getAttribute() 得到你要的对象。

Java代码如下:

WebappA:

HttpSession session = request.getSession();
session.setAttribute("userId", "test");
ServletContext ContextA =session .getServletContext();
ContextA.setAttribute("session", session );

WebappB:

HttpSession sessionB = request.getSession();  
ServletContext ContextB = sessionB.getServletContext();  
ServletContext ContextA= ContextB.getContext("/WebappA");// 这里面传递的是 WebappA的虚拟路径
HttpSession sessionA =(HttpSession)ContextA.getAttribute("session");
System.out.println("userId: "+sessionA.getAttribute("userId"));

tomcat 集群配置,Session复制共享(一)

tomcat不同服务器之间session共享是分布式环境必须的课题。

同步方案有许多种,这篇先来说说tomcat自带的方法

本配置在tomcat7上验证通过。通过此方法配置的集群,session信息将会被自动复制到各个节点。

官方文档:

http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html

1、配置Server.xml

在Server.xml中,找到被注释<Cluster/>节点,修改为如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
bind="127.0.0.1"
address="228.0.0.4"<!--保留ip,用于广播-->
port="45564"
frequency="500"
dropTime="3000"/> 
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"<!--如果是在同一台机器上的两个tomcat做负载,则此端口则不能重复-->
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

2、修改web.xml

在web.xml中,标志为 <distributable/>

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 
<display-name>session</display-name> 
<distributable/> 
</web-app>

新手搭建Jenkins进行持续集成

Jenkins简要说明

Jenkins是一个持续集成的工具。不管是在开发中,还是在与测试的沟通中,总是不断要自己进行打包编译,发布到服务器上,也要不断交付给测试相关的更新包,这不仅麻烦,有时还会有缺失。持续集成软件的出现,为我们解决了上述问题。开发只管把开发编译没问题的代码上传svn即可。

我的部署环境

  • 开发语言:java
  • 开发IDE: idea
  • 集成环境:Maven
  • 运行环境:tomcat8
  • Jenkins:Jenkins ver. 2.60.1

当然,其它语言也支持,因为Jenkins提供很多的插件。

Continue reading “新手搭建Jenkins进行持续集成”

如何解决一些控件无法运行在高版本的Chrome下运行的问题

最近在项目中经常碰到需要各类浏览器插件的情况。

比如身份证读卡器、电子签单、自定义检验码等浏览器插件。以前开发的b/s项目可能比较简单,大不了在IE上安装就是。但是随机IE的版本落后,需要考虑的浏览器兼容性越来越多,还有一些新增的功能用不上,比如Html5,所以我们现在开发的 b/s项目统一只在chrome下运行。

但同时也带来了一个问题就是,在34版本之后,这些插件都不能使用了。 NPAPI 不再被支持,全部使用了 PPAPI 模式开发

解决的办法有几种,一个做插件认证,开发符合 PPAPI 模式的插件,但dll相关的操作已经被大大限制。而且还需要通过C++再封装,增加了开发的难度。

 

我有另外一种思路,就是开发一个客户端工具,所有需要用到的插件都可以封装在这个客户端工具里,同时监听本地某个端口。

 

网页上利用Html5 的WebSocket功能,与本地交互。这样就很方便地达到我们想要实现的目的。

 

对于有界面的控件,也可以这样来实施,客户端工具接收到某个消息 之后,就弹出界面,确定之后返回消息 。

Continue reading “如何解决一些控件无法运行在高版本的Chrome下运行的问题”

四神分析报告生成系统 演示视频

四神分析报告设计器使用视频

将分为几个视频一一来演示

1、软件的基本介绍

菜单等各项功能

http://www.tudou.com/programs/view/n3irr3RUkHw/

2、绑定文字

最基本的功能,从数据库中抽取数据填写到Word里。

http://www.tudou.com/programs/view/IbRgs62JtD4/

3、数据筛选

4、数据计算

求和,平均数

5、插件引用

6、嵌入Word表格

7、嵌入图表

曲线图,饼图。。其他图

数据库转换工具SqlServer To Oracle DbConvert

数据库转换工具 DbConvert

1、SqlServer To Oracle

介绍:能快速把Sqlserver数据库转换到Oracle数据库

下载地址

http://pan.baidu.com/s/1o6sKNBc

2、购买软件

随便一个用户名即可,把 用户名和机器码发到我的邮箱

i4color@qq.com

目前软件处于免费阶段

3、说明

目前该工具需安装Oracle客户端,以后再开发无需客户端的版本。

使用方法还是很简单的,目前暂时不支持函数和存储过程的转换

未注册版本限制5个表,10个字段,200行数据。

目前是Beta版本,可能Bug较多,还有些字段转换未实现,比如binary、varbinary。还有触发器的转换未实现。

4、截图

5、版本历史

2012-8-29 1.0 Beta  暂不支持函数和存储过程的转换