项目中使用了一些RMI服务,部署发现在linux环境下监听了端口,但无法被其他机器调用。于是打印出log分析情况。
注:如果使用spring框架,打印日志需要引入slfj4-api。
在开发环境下(Windows)输出日志如下:
同样的程序部署到生产(linux),输出日志如下:
可以看到,在window下监听的是内网地址,但在linux下是本地127.0.0.1。
标签: java
在程序开发中,少不了属性的效验。最常用的应该是 hibernate 的 validator 或 apache 的 commons-validator 。
这两种框架各有优缺点,首先是 Hibernate的validator,它臃肿了,依赖很多其他jar包。在不使用hibernate框架时使用它还是很不方便的。其次是apache的commons-validator,虽然很灵活,但是配置麻烦,好像没有基于注解的。这两个框架都不适合移动端。所以自己写了一个轻量的验证工具。
下载地址:zz-validator
本着开源的精神,项目已上传到github上了。为保证代码最新,推荐在github上下载。
地址:https://github.com/wangzhengzhen/fast-validator
没来得及补文档,所以在代码中注释尽量详细,下面也简单说明一下使用方法:
在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解,(表单默认情况下使用application/x-www-form-urlencoded)。
在multipart/form-data中Content-Type是这样的:
boundary是表示分隔,用于分隔多个文件。格式是 — 后面可以跟随一串随机数。
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 目录,则可以忽略))
最近进行了一次生产环境的迁移。原来的环境是做了虚拟化,所以迁移时把原来的虚拟机保持状态停用,再复制一份。但就是这么简单的理论上不会有问题的迁移,出现了奇怪问题。具体表现在,系统运行一段时间后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
查看到各有二百多个连接。
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两个属性的值就不起作用了。
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实现端口转发功能。这段程序只能针对一个端口转发,要实现多个转发功能就需要运行多个程序,所以便开发了新的增强版端口转发工具。
新版端口批量转发工具的配置文件是参考另一款转发工具 (rinetd) 的格式来实现的,完全可以和rinetd配置文件共用。使用格式如下:
使用vmware workstation发现NAT模式端口转发存在一些问题。
其实我要的功能很简单,就一个端口转发。在B机器上安装好虚拟机C,用A机器去连接。因为B机器和A机器是不同网段且不相通(但是A能连接B),所以A连接C需要B转发。使用vmware workstation自带转发实现不了,于是自己写了一个端口转发的小程序。是使用JAVA编写的,能运行于全平台。