Java

Java的方方面面

修复eclipse中关闭jboss的bug

  eclipse都3.5SR1了,这个bug还是没修复,是jboss不行么...在eclipse的server中配置一个jboss的server,如果jndi端口非标的话,即使修改server的属性,但停止server时,还是会去连默认的1099端口...问题就在于eclipse中jboss server的停止命令没写好。

YourKit Java Profiler

前天正好要用到profiler,看到yourkit有新版,以前网上有流传它的破解版,而且还是SHOCK做的,我一向是很欣赏SHOCK的破解能力的,但看到只有破解版,估计也是不对称加密导致的。新版没有破解,所以就自己准备研究一下。

yourkit的license配置分成服务器分配和文件分配两种,我手头也没有正版的license,所以就用了一个试用版的,然后结合静态分析,得出了结论。

Resin的connectionMax

  最近在工作中遇到resin3.x在高负荷情况下有系统停摆现象,恰好找到一篇文章,和我所遇到的一模一样。很奇怪的无论是3.0开发树还是3.1开发树都没有公开这个参数,在配置文件中无法进行配置。

  错误表现为当待处理链接达到512后,系统停止处理(打开页面超慢)。

  处理方法:把com.caucho.server.port.Port中的_connectionMax变量适当进行调整。

com.caucho.server.port.Port
 // default timeout
  private long _socketTimeout = DEFAULT;
 
  private int _connectionMax = 512;//这个参数外部无法调节
  private int _minSpareConnection = 16;
 
  private int _keepaliveMax = DEFAULT;
 
  private long _keepaliveTimeout = DEFAULT;
  private long _keepaliveSelectThreadTimeout = DEFAULT;
Parsed in 0.001 seconds

下载源码包,重新进行编译并替换运行库后生效。

ElGamal

  上个星期日,在公司做完事,上网无意之中看到QuipuKit,一个java faces的商用组件。查看之下发觉好像还不错的样子,450美刀一份。想起来自resin 3.1.x破解之后,好像好久没反编译过东西了,碰巧这个东西的试用版还是全功能的,就拉下来看了一下。很快就定位了注册验证的部分。用的是ElGamal算法(离散对数问题),注册信息用ElGamal签名之后,通过公钥验证。本来以为会是RSA或是DSA的,以前没接触过ElGamal,于是本着探索的精神,去挖了一下这个算法。原理性的东西不多写了,和RSA有点像,大数,乘方,模运算,三者混合而成,签名过程会产生两个Signature,然后目的端用一个等式验证。

ElGamal wrote:

  ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。

myface1.1.5中的默认转换

今天在做一个数据导出JSF的时候,发现新的myfaces1.1.5的数据默认转换写法有点不一样了。

itemValue赋值的变化
<f:view>
  <h:form>
    <h:selectOneMenu id="exptype" value="#{exp.type_no}">
      <f:selectItem itemLabel="业务1" itemValue="#{1}"/>
    </h:selectOneMenu>
    <h:commandButton value="导出指定用户"/>
    <h:messages showDetail="true"/>
  </h:form>
</f:view>
Parsed in 0 seconds

并且默认对应的数值转换类型为Long,对应上面的itemValue,Java的Bean的写法为

默认格式转换getter和setter
 public void setType_no(Long type_no) {
      //...
  }
 
  public Long getType_no() {
    return type_no;
  }
Parsed in 0 seconds

crontab中java程序乱码

最近部署一个JAVA程序到Linux中的crontab,遇到了乱码。因为以前一直都用英文信息,所以一直没遇到这个问题。原来还是环境变量的问题,因为在crontab系统里不会携带用户的环境参数。因此,需要额外添加。不过有点奇怪的是其中一些变量,不需要显式export出来就可以了,比如PATH,JAVA_HOME之类的,而LANG参数则需要显式export才可以,否则,就是好多问号,乱码....

crontab所引用的sync.cron
#!/bin/sh
export LANG="en_US.UTF-8"
JAVA_HOME=/opt/jdk1.6.0_01
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:/usr/bin:/bin
 
LogFile=$HOME/pubprogram/dataimp3/logs/sync2no_$(date +%Y%m%d).log
echo "-------------------------------------------" >> $LogFile
echo $(date +"%Y-%m-%d %H:%M:%S") >> $LogFile
echo "-------------------------------------------" >> $LogFile
$HOME/pubprogram/dataimp3/syncn2o >> $LogFile 2>&1
echo "------------------End----------------------" >> $LogFile
Parsed in 0.01 seconds

同步内容