分类:编程语言

Hibernate乐观锁引发的StaleObjectStateException分析

前言 最近一个项目中使用了Hibernate的乐观锁,不巧的是出现了乐观锁最容易报的错:org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction 下面将通过一个模拟的实例重现问题,并做相应的分析。 乐观锁的作用 乐观锁的主要作用是为了解决事务并发带来的问题,相对于悲观锁而言,乐观锁机制采取了更加宽松的加锁机制; 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性,但随之而来的就是数据库性能的大量开销,特别是对长事务而言; 乐观锁机制在一定程度上解决了这个…

阅读全文 »

POI事件驱动读取Excel分析

前言 前一篇文章http://codingo.xyz/index.php/2017/06/29/poi_excel/介绍了实际项目中读取Excel导致内存溢出的问题,最后总结了在读取大Excel情况下,优先使用事件驱动模式读取,但是文件并没有对事件驱动模式做过多分析,本文将对事件驱动模式做简单分析。 xml解析器 jdk本身提供了两种XMl解析器: 1.像文档对象模型(Document Object Model,DOM)解析器这样的树型解析器(tree parser),它们将读入的XML文档转换成树结构; 2.像用于XML的简单API(Simple API for XML,SAX)解析器这样的…

阅读全文 »

Poi读取Excel引发的内存溢出

前言 最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了。 分析 1.dump内存文件 liunx使用如下命令: 2.使用Eclipse Memory Analysis进行分析 异常如下: POI在加载Excel引发了内存泄漏,中间创建了大量的对象,占用了大量的内存 3.查看上传的Excel大小 经查看发现很多Excel大小在9M的文件 4.查看代码POI读取Excel的方式 发现使用的是用户模式,这样会占用大量的内存;POI提供了2中读取Excel的模式,分别是: 用户模式:也就是poi下的usermodel有关包,它对用户友好,有统一的接口…

阅读全文 »

Spring整合Hessian与分析

前言 上一篇文章Hessian入门体验与分析介绍了hessian的简单入门,并且从源码层面对Hessian的调用流程进行了分析;发现使用原生的Hessian还是比较繁琐的,下面看看Spring与Hessian进行整合并且进行简要分析。 使用 提供三个模拟块,分别模拟client,server以及被依赖的jar;对应的模块名称分别是:hessianClient,hessianServer以及hessianJar 1.hessianJar介绍 hessianJar主要提供被hessianClient和hessianServer依赖的公共类,这里主要提供了接口类IHessianService和poj…

阅读全文 »

基于JMS实现RPC功能

前言 JMS的点对点消息传送模式允许JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接收消息;点对点消息传送模式既支持异步“即发即弃”消息传送方式,又支持同步请求/应答消息传送方式;点对点消息传送模式支持负载均衡,它允许多个接收者监听同一队列,并以此来分配负载;所以完全可以以JMS的点对点消息传送模式实现一套RPC框架。 准备 jdk:jdk1.7.0_80 jms:apache-activemq-5.10.0 serialize:protostuff 整体结构 整个实现包括:rpc-jms-common,rpc-jms-client,rpc-jms-server; 以及测试模…

阅读全文 »

HttpClient执行Https请求与分析

Https介绍 HTTPS:为了保证隐私数据能加密传输,采用SSL/TLS协议用于对HTTP协议传输的数据进行加密,也就是HTTPS。 SSL:SSL(Secure Sockets Layer)协议是由网景公司设计,后被IETF定义在RFC 6101中,目前的版本是3.0。 TLS:TLS可以说是SSL的改进版。是由IETF对SSL3.0进行了升级而出现的,定义在RFC 2246,实际上我们现在的HTTPS都是用的TLS协议。 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息;TLS/SSL中使用了非对称加密,对称加密以…

阅读全文 »

Ivy入门:Eclipse整合Ivy

前言 最近因为来的一家新公司,项目中大量使用了ivy来进行依赖管理,并没有用现在相对主流的Maven;两者可以进行简单的比较,Ivy仅提供依赖管理功能,但是Maven是一个软件项目管理综合工具,能够管理构建、报告、文档,以及根据中心化的信息来管理依赖,Ivy更多的是和Ant一起使用。 Eclipse整合Ivy 1.ivy插件安装 Help->Eclipse Marketplace…输入ivy,如下图所示: 点击安装即可,安装完在Window->Preferences下出现了ivy目录,如下图所示: 2.简单实例 ivy官网地址:http://ant.apache.org/ivy/ …

阅读全文 »

Hessian入门体验与分析

简介 Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能;相比WebService,Hessian更简单、快捷。 官网地址:http://hessian.caucho.com/index.xtp 下面主要针对Hessian入门级使用,以及进行部门源码分析。 简单使用 提供三个模拟块,分别模拟client,server以及被依赖的jar;对应的模块名称分别是:hessianClient,hessianServer以及hessianJar 代码结构如下图所示: 1.hessianJar介绍 hessianJar主要提供被hessianClient和he…

阅读全文 »