分类
Java 笔记

RMI服务多网卡问题

项目中使用了一些RMI服务,部署发现在linux环境下监听了端口,但无法被其他机器调用。于是打印出log分析情况。
注:如果使用spring框架,打印日志需要引入slfj4-api。
在开发环境下(Windows)输出日志如下:

同样的程序部署到生产(linux),输出日志如下:

可以看到,在window下监听的是内网地址,但在linux下是本地127.0.0.1。

分类
Java

[原创]JAVA通用属性验证工具

在程序开发中,少不了属性的效验。最常用的应该是 hibernate 的 validator 或 apache 的 commons-validator 。

这两种框架各有优缺点,首先是 Hibernate的validator,它臃肿了,依赖很多其他jar包。在不使用hibernate框架时使用它还是很不方便的。其次是apache的commons-validator,虽然很灵活,但是配置麻烦,好像没有基于注解的。这两个框架都不适合移动端。所以自己写了一个轻量的验证工具。

下载地址:zz-validator
本着开源的精神,项目已上传到github上了。为保证代码最新,推荐在github上下载。
地址:https://github.com/wangzhengzhen/fast-validator
没来得及补文档,所以在代码中注释尽量详细,下面也简单说明一下使用方法:

分类
Android Java 笔记

解析HTTP协议实现文件上传

在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解,(表单默认情况下使用application/x-www-form-urlencoded)。

在multipart/form-data中Content-Type是这样的:

boundary是表示分隔,用于分隔多个文件。格式是 — 后面可以跟随一串随机数。

分类
Java 笔记

J2EE基础框架集成

Spring 4出来很长一段时间了,现在最新稳定版是4.2.4。我把外面做项目常用的框架集成写了一个demo,从请求到保存数据。可以作为项目快速搭建与开发。如果要提高效率和形成团队规范,还需要深度开发。
项目为Maven工程,始用Eclipse创建。导入项目后可能需要一段时间让Eclipse自动下载依赖包。依赖包主要有:Spring、Spring Web、Spring Jdbc、MyBatis、Mybatis Spring、MySQL Connect Java、Apache Common DBCP2、Log4j2。

项目结构如下:
20151220132534
数据库脚本:

分类
Java

读取密钥异常:illegal Key Size

JAVA读取pfx密钥报出:java.security.InvalidKeyException:illegal Key Size
这是因为用到了jdk sercurity, 而jdk sercurity使用的jar包 $JAVA_HOME/lib/security/local_policy.jar 和 $JAVA_HOME/jre/lib/security/US_export_policy.jar 中有对技术出口的限制,加密只有128bit,而没有限制的则有256bit。

解决方法:

1.到oracle官网下载对应的jce。我用的jdk8,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

2.把下载后的文件解压,找到 local_policy.jar 和 US_export_policy.jar ,覆盖jdk目录下,$JAVA_HOME/jre/lib/security 和 $JAVA_HOME/lib/security 下的文件。(有的版本jdk可能不存 $JAVA_HOME/lib/security 目录,则可以忽略))

分类
Apache Java 笔记

mod_jk奇怪的连接问题

最近进行了一次生产环境的迁移。原来的环境是做了虚拟化,所以迁移时把原来的虚拟机保持状态停用,再复制一份。但就是这么简单的理论上不会有问题的迁移,出现了奇怪问题。具体表现在,系统运行一段时间后tomcat无响应。
生产上的应用系统是使用apache+tomcat集群,所有的请求由apache的mod_jk转发至tomcat的apj13监听端口。系统运行一段时间后,tomcat无响应。tomcat1的apj13端口是8010,tomcat2的监听端口是8011。使用

netstat -nt|grep 8010|wc -l
netstat -nt|grep 8011|wc -l

查看到各有二百多个连接。

分类
Java

Spring整合ehcache

20150505171917
20150505171928

ehcache参数说明

name:cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。如果在CacheManager中直接加入了一个其他名字的cache,系统会把defaultCache的设置给它clone一份。
maxElementsInMemory:cache 中最多可以存放的元素的数量。如果放入cache中的元素超过这个数值,有两种情况:1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。
eternal :意思是是否永驻内存。如果值是true,cache中的元素将一直保存在内存中,不会因为时间超时而丢失,所以在这个值为true的时候,timeToIdleSeconds和timeToLiveSeconds两个属性的值就不起作用了。

分类
Java 编程

常用开源软件maven坐标

Maven仓库查询
http://search.maven.org
补充:查询maven仓库中已存在软件的版本,可以在仓库url(http://repo1.maven.org/maven2/)后面加上groupid(把groupid中的.换成/)。如spring的groupid是org.springframework,则maven仓库中的版本列表地址是: http://repo1.maven.org/maven2/org/springframework

分类
Java 笔记

端口批量转发工具v1.1

之前因为工作需求,开发了一款端口转发工具,实现原理参见:JAVA实现端口转发功能。这段程序只能针对一个端口转发,要实现多个转发功能就需要运行多个程序,所以便开发了新的增强版端口转发工具。

新版端口批量转发工具的配置文件是参考另一款转发工具 (rinetd) 的格式来实现的,完全可以和rinetd配置文件共用。使用格式如下:

listenIP listenPort destinationIP destinationPort
参数说明:
listenIP:本地监听网卡地址,输入0.0.0.0接受所有连接
listenPort:本地监听端口
destinationIP:转发目标地址
destinationPort:转发目标端口

分类
Java 笔记

JAVA实现端口转发功能

使用vmware workstation发现NAT模式端口转发存在一些问题。

1.在windows系统下虚拟XP,在XP中使用VPN,然后用ccproxy架设代理。虚拟xp使用的是NAT模式连网,使用vmware workstation自带的端口转发工具设置808端口转发(ccproxy代理端口)不能上网。

2.在centos系统下vmware workstation的网络工具中,没有NAT端口转发选项。手动更改配置文件实现端口转发失败。

其实我要的功能很简单,就一个端口转发。在B机器上安装好虚拟机C,用A机器去连接。因为B机器和A机器是不同网段且不相通(但是A能连接B),所以A连接C需要B转发。使用vmware workstation自带转发实现不了,于是自己写了一个端口转发的小程序。是使用JAVA编写的,能运行于全平台。