Author Archive
How to control HTML element when it got focused
by tonny.xu on Oct.31, 2007, under Java Tech
Today, a little bit difficult problem was resolved. The original question is like this:
- Give a page which mainly contains 2 DIV areas and both have a table element inside it. Each of the DIV tag are set to hidden scroll bar, and these 2 tables are exactly have the same setting(cellspacing, cellpadding, etc. ), so that’s making these 2 tables looks like an excel file which have a freezeed bar.
- There are many select boxes and check boxes in these 2 tables, and each element has a tab index value assigned, so that, tab key will navigate element between 2 tables.
- There is another div element to control the scrolling status and make them scroll at the same time and scroll to same place.(by capture onScroll event.)
- The problems is when you navigate tab from element to element , the synchronize scroll will be failed.
I tried a lot of ways, and finally find out, the problem lies on the default focus properties deal by Browser itself, and the browser takes control of how to show the element no matter how you set its position properties. And as most of the web programmer will do, we choose to use onfocus event, and can not get the right thing done.
The way to resolve this problem is using another different event : onbeforeactivate
Here is the demo file, you can download it and try it yourself. May be you have a better way to resolve this problem, please let me know: tonny.xu[a]gmail.com
How to import Maven Project to Eclipse with "pom.xml"
by tonny.xu on Oct.25, 2007, under Java Tech
Struts 2.0.9 bundle shipped with a sample named show-case, if you want to use it in your Eclipse Europa, you need to add a Maven plugin for Eclipse Europa. Please visit this page:
- http://maven.apache.org/eclipse-plugin.html
NOTE: The new version of this plugin needs Eclipse Europa and JavaSE 5.0+
After installed this plugin, you can read a project which shipped with pom.xml, but not normally build.xml. Please follow the steps:
- Menu<File> ⇒ <Import…> ⇒ General[Maven 2 Project] ⇒ [Select the pom.xml File]
It will really cost you some time, maybe you can drink 2 cups+ coffee before you get your maven project work in your Eclipse. Have Fun.
Besides, because I installed some server adapters before I install Maven 2 Plugin, I had to reinstall Europa before I can use Maven plugin. So, I got a basic rule for eclipse user: Only install the plugin when you need it!
And moreover, the project you imported from Maven to Europa, you need to tweak a lot of configurations, and I suggest you just configure it manual than use Maven plugin.
The most simplest way to use Ant build file. ^_^
Why I can not find the Glassfish server adapter in my company’s computer?(First post after I came to Japan)
by tonny.xu on Oct.24, 2007, under Java Tech
Today, I was preparing the development environment for the new coming project, after installed Eclipse Europa and Glassfish, I need to combine these 2 things together so that I can continue my job.
As usual, I clicked the link below, but this time, I can not find the Glassfish server adapter.
(Click the "Download additional server adapters")![]()
(Though you can see that I have added GlassFish server adapter, but I will show you where is wrong.)
After I clicked the link, it automatically searching and installing available server adapters for me. My company has a proxy server which is opened on port 8080 and can both serve HTTP and HTTPS, so I setup the proxy server for Eclipse, and I found Geronimo very fast, but, BUT, I can not find this god damn GlassFish server adapter!!
WHY? I have checked the GlassFish project home page, and they said, Europa will search GlassFish’s web site for the latest available plugin automatically, but why it don’t show itself to my Europa??? and at the same time, BEA’s server adapter is also missing from the available list.
Then I want to take a deep look into the Eclipse to find out whether those GlassFish guys really put their Web site URL to Europa, but to tell the truth, it’s not a easy work. I can not find out where they configure the necessary URL to search for. Then after I wasted few time to redo it again, Finally, Suddenly, I found out why!
BECAUSE Some sites used a SSL connection for their god damn update URL, and I didn’t configured to use proxy for SSL connection! While others are all using simply HTTP connection!
DAMN IT!
So, next time, don’t forget to set up your SSL connection proxy!
OutOfMemory:PermGen Space异常的处理和分析
by tonny.xu on Aug.15, 2007, under Java Tech
Java程序员没有遇到过OutOfMemory简直就是不可能的事情!
可见在Java的世界中,太多的不确定因素导致Java运行程序直接崩溃,直接抛出OutOfMemory异常,而一旦遇到了这个问题,调查起来就非常的困难。在JDK 5.0以前,OutOfMemory只有这么一句话: java.lang.OutOfMemory Exception…基本上无从下手,无从分析。从JDK 5.0以后对OutOfMemory增加了许多的详细说明,为这个异常的分析提供了很大的便利。
这次遇到的问题就是会抛出OutOfMemory:PermGen Space的异常,这个异常非常有意思,根据【此文章】的描述,这是一个Sun JVM的bug,从2003年开始,一只到现在都没有解决。而且提出来的解决方案是使用JRockit。Bug产生的原因已经找到,就是因为JVM在分配PermGen Space的时候出现了PermGen Space不足的情况,默认情况下 PermGen的大小为64M,在不换用JRockit的情况下,可以在启动JVM的时候添加一个参数: -XX: MaxPermSize= 128m| 256m| 512m。
那么究竟什么是PermGen呢?
PermGen 原来是指Permanent Generation,本身是在Java的垃圾收集机制(GC)中产生的一个概念。Java的垃圾收集机制最早只是遍历所有的对象,如果发现某个对象没有被引用,则回收,这是在早期的Java 1.0和Java 1.1的时候的GC规则。慢慢的,这样一种“愚蠢的”GC算法成为了JVM性能的瓶颈,在拥有大量数据的Java应用程序中,GC的算法被高度强化,于是各种各样高效的JVM GC算法被发展了起来。从J2SE也就是Java 1.2开始,JVM引入了多种GC算法,其中一种用的非常多的就是Generational Collection,中文也叫做“分代收集法”。
分代收集法摈弃了对所有对象的遍历,而是采用一些经验属性去避免额外的工作(While naive garbage collection examines every live object in the heap, generational collection exploits several empirically observed properties of most applications to avoid extra work)。其中导入了一个非常关键的概念:infant mortality (幼儿死亡率),这表示越是新生成的变量或者对象,越容易被收集。下面一张图表示了对象的生命周期,横轴表示的是测试到对象的生命周期,纵轴表示在一个指定的生命周期上被回收的对象数量。
可以看到,在使用了分代收集法以后,年轻一代的对象被收集的比例最高。并且在内存中的对象会按照不同的“年龄”来划分,当一个年龄段的对象满了以后,在这个年龄段上就会发生垃圾收集,从最年轻的一代开始,一直到“永生代”,在内存中,所有的对象可以划分为很多代,最后的一代“永生代”就是“Permanent Generation”,这里就是直接引出“Permanent Generation”概念的地方。具体可以参考下图:
根据前面所说的情况,在分代垃圾收集的情况下会产生Permanent Generation的概念,而这个分代垃圾收集法是并行收集和并发收集的基础,所以Permanent Generation会一直存在,那么这个Permanent Generation究竟是做什么用的呢?这里保存了JVM中所有对象的类信息,包括类的元数据,还有方法描述等等,所以这一代内存垃圾收集算法是不一样的,在Java大程序的情况下,尤其是J2EE 或者说Java EE的大型应用程序上,Permanent Generation的大小会直接限定能载入类的数量和大小。
【解决办法】就是设定JVM启动的时候参数,可以如下设置:
java -XX: PermSize=64m -XX: MaxPermSize=128m
另外PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。
更多的请参考 【Java官方站点】
另外,还可以在Java启动的时候添加下面的参数来看GC的运行情况:
Java -verbosegc
(完)
My Dear Waiting
by tonny.xu on Aug.12, 2007, under Blog System
Thanks to xiayuan, thank u to make this wonderful flash album for waiting and thus I have chance to view so many lovely pictures.
2 view lovely waiting’s historical growth, click me.
Part II: How to use JConsole
by tonny.xu on Aug.10, 2007, under Java Tech
接着前一篇Blog,现在JConsole已经可以启动了。而且JMX的配置方面也整理了一下。JConsole的具体使用界面上,有以下这样的一些截图:
连接上远端的JVM以后可以通过JConsole看到如下截图:
图1:“概述”界面
图2:“内存”界面
图3:“线程”界面
图4:“类”界面
图5:“VM 摘要”界面
图6:“MBean”界面
前面的5个标签页,主要通过图表的方式,将JVM的运行状况用图表的方式表示出来,可以看到内存,CPU,线程,类的概况,以及各个方面的详细图表情况,这样的图表方式可以非常方便的看到系统运行时的压力以及瓶颈在哪里。
第六张标签页显示了MBean的情况,MBean是JMX体系下的一种JavaBean,可以通过MBean所提供的方法,获取某个具体对象的运行情况,甚至可以得到一些对象的Dump数据。MBean非常的多,使用方法也比较麻烦,具体请参看下面的文章:Overview of Monitoring and Management.
(完)
Part I: How to use JConsole
by tonny.xu on Aug.09, 2007, under Java Tech
JConsole是一个JDK中提供的JVM监视与管理的工具,主要是通过JMX来提供监视与管理。
默认情况下,JVM是不启动JMX服务,并提供被监视与被管理的能力的,必须在启动Java程序之前,在Java [opt] [app]中指定JMX的服务。JConsole提供本地和远程的两种监管方式,远程又可以分为直接监视,另外一种是通过JMX的服务器来管理。
根据目前我的需要,我举一个很简单的远程监管例子。因为JConsole本身也要耗费一定的资源,所以用远程方式是比较推荐的。
首先启动JConsole:
(因为在日文系统中,所以显示的为日文)
选择下面的Remote Access,输入host:portNumb的格式,另外输入用户名和密码,用户名和密码存储在<JAVA_HOME>/lib/management目录下,将jmxremote.password.template 复制为management.jmxremote.password(如果需要可以将文件的只读属性打开)。注意:这个文件是放在JRE的lib目录下。修改过以后的内容大致如下:
######################################
# File permissions of the jmxremote.password file
######################################
# …monitorRole 333
controlRole 333
另外,默认情况下,SSL是被打开的,需要在被监视的机器上生成相应的SSL证书。在Java中可以使用keytool来生成,具体步骤如下:
- 在命令行输入 keytool -genkey
- 其次输入 keytool -certreq 来生成一个签名过的证书
- 将证书导入 keytool -import
- KeyTool具体的用法参考下面两个链接: (Solaris and Linux) (Windows).
- 以上第一个命令会产生一个.keystore的文件,保存在c:\documents and setting\<username>\.keystore
其中第三条将需要你将第二步生成的CSR文件提交给VeriSign这样公司验证,然后返回给你一个可以使用CER证书,然后在Import,我们主要目的是为了体验JConsole,所以这一步我们就略过。所以我们设定不使用SSL,具体设置如下:
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
注意:这两行将使用非认证,非SSL的情况,在真实的服务器上要小心,很容易留下漏洞的。
在Windows系统下,如果你将Tomcat安装为服务模式,则可以在右下角Tray 图标中点击配置Tomcat,可以在例如下图的属性中配置,非常的简单:
如果不使用Windows系统,则需要在Catalina.bat中改写Java运行的参数。
改完了Tomcat的配置,启动Tomcat。
在远程机器上点击JConsole的连接即可。JConsole的具体使用以及分析下次继续。
——————————————————-
JMX 的配置主要在Java程序启动的时候使用,这里重新整理了一下,更加清晰易懂一些:
方法1: 最简单的方式:不用密码,不用SSL
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=<define a random port>
方法2: 使用密码,不用SSL
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access在$CATALINA_BASE/conf/目录下添加jmxremote.password文件,并添加下面两行:
monitorRole <Your password>
controlRole <Your password>在$CATALINA_BASE/conf/目录下添加jmxremote.access文件,并添加下面两行:
monitorRole readOnly
controlRole readWrite
这两种方法是最简单的,并且第二种方法具有一定的安全性。具体可以参考Tomcat的文档:Monitoring
Java的性能调校
by tonny.xu on Aug.09, 2007, under Blog System
以前做Java的项目,基本上不会遇到对性能进行调校的事情,但是最近遇到了一个比较严重的问题。具体情况不便详细说,但是大致情况如下:
- Server: Intel Xeon Duo 2 *2
- Memory: 4G
- Disk: 3500G
- JDK: 1.5.0_02
- Web Server: Tomcat 5.5.19
- Application: Some kind of OpenSource Project A which contains about 27M’s package.
在Tomcat中配置了虚拟主机,运行了4份A的独立版本。运行起来以后,内存占用3G左右,在安装第5份的时候出现OutOfMemory的异常,由此引发了JVM性能调校的课题。
首先找到了一片比较浅显的文档:
- Java Tuning White Paper, Sun Microsystems, [live].
其中提到了性能调校的几个要点:
- 在所有对JVM的调校进行之前,先做以下的检查:
- 是否使用了最新的Java Release?
- Java是否更新到了最新的update?
- OS的补丁是否已经更新到最新?
- OS中是否还跑着其他许多不需要的应用程序?
- 其次对JVM进行以下的调校:
- 是否使用了Server HotSpot?
- 有没有使用并行GC?(ParallelGC)
- 初始化堆内存(heap size)大小是多少?推荐使用物理内存的1/64
- 最大堆内存(heap size)是多少?推荐使用物理内存的1/4
- 调校之前一定要准确的收集系统的运行情况数据并进行分析
- 可以参考使用JVM的管理与监视相关文档
在这样的指导下。我准备对我的系统做以下的操作步骤:
在Java tuning white paper中直接提到了一些GC调整的方式,在使用了ParallelGC以后,系统的运行确实能提高不少,但是具体的仍然有问题,等我的Monitoring和Profiling结束以后再报告。
Restart my blogging
by tonny.xu on Aug.09, 2007, under Blog System
Keeping going Tonny!
From Nov 2006 till now, I didn’t write a single post, and now, I gonna restart my blogging life.
and I will stick to blogging until I feel tired again.
天声人語の勉強(11月25日)
by tonny.xu on Nov.26, 2006, under Foreign Languages
本日から、朝日新聞提供している有名なコラム「天声人語」を勉強します。
今天开始学习著名的由朝日新闻提供的专栏[天声人语]。
まず、天声人語の背景を紹介させていただきます。
首先,让我介绍一下[天声人语]的背景。
天声人語(てんせいじんご)
朝日新聞朝刊一面下段のコラム。長い歴史がある。命名者は杉村楚人冠(すぎむら そじんかん)
明治37年(1904年)に初めて登場した朝刊1面のコラム。「名文」としての評価が高いが、日々、その時代のありさまを鮮明な映し出していて、よく読まれている。大学入試の題材として採用されることも多い。執筆者は原則として一人。当初は西村天囚、内藤湖南、鳥居素川、長谷川如是閑、大山郁夫、永井釈瓢斎、日本の代表的言論人が筆をとり、戦後は嘉治隆一、荒垣秀雄、入江徳郎、疋田桂一郎、深代惇郎、辰濃和男、白井健策、栗田亘が担当している。
ラテン語のVox populi, Vox dei(民の声は天の声)の訳語から来ている。
天声人语
朝日新闻早刊一版下面部分的一个专栏。具有很长的历史,由杉村楚人冠命名。
明治37年(1904年)第一次在早刊的第一版登场。作为“名文”,人们对它的评价很高。每天的内容,都能鲜明的反映出那个时代的境况,有很高的人气,更有很多被作为大学入学考试的试题。执笔者原则上只有一个人,最开始由西村天囚,内藤湖南,鸟居素川,长谷川如是闲,大山郁夫,永井释瓢斋等这些在日本有代表性的人物执笔。战后,由嘉治隆一、荒垣秀雄、入江徳郎、疋田桂一郎、深代惇郎、辰濃和男、白井健策、栗田亘继续执笔。
天声人语的名字来自于拉丁语中的Vox populi,Vox dei(人民的声音是上天的声音)翻译而来。
単語:
鮮明な ☆ せんめい ☆ Vivid/Clear ☆ 鲜明的
執筆者 ☆ しっぴつしゃ ☆ Writer/Author ☆ 执笔者/作者
2006年11月25日の天声人語
筋肉のマヒのため、自宅からスクールバスに乗るまでの200メートルを歩くのに数十分かかる少女がいた。日々大きな苦痛を背負っているとみえた少女には、しかし、朝の楽しみがあったという。
単語:
筋肉 ☆ きんにく ☆ 肌肉
麻痺 ☆ マヒ ☆ 麻痹,麻木
スクールバス ☆ SchoolBus ☆ 校车
苦痛 ☆ くつう ☆ 痛苦
負う ☆ おう ☆ 背负,负担,遭受翻訳:
因为肌肉的麻痹,有个少女从自己家里出来,走完到乘坐校车的200米需要数十分钟,但是,每天,看上去背负着巨大痛苦的少女,却说每天早上都有快乐。
まず喫茶店の前で、店員の女性とあいさつを交わす。言語障害もあるので、周りには「うーうー」としか聞こえないが、女性には「おはよう」と聞こえている。仕出屋の前で最初の休みをとり、猫のクロにもあいさつする。
単語:
交わす ☆ かわす ☆ Exchange ☆ 交换
周りに ☆ まわりに ☆ Around/Surrounding ☆ 周围
仕出屋 ☆ しでや ☆ 。。。 ☆ 食品店
クロ ☆ Black ☆ 黑色翻訳:
首先,在茶店的门前,和店里的女员工相互打个招呼。因为还存在语言上的障碍,在周围的人们就只听到“うーうー”的声音,店里的女员工知道她在说“早上好”。在(小吃店?)门口做第一次休息,并且和一只黑猫打招呼。
続いて、まばらに木の生えた所で休み、おしまいの休みは草花の植えてある家の前でとる。マツバボタンにそっと触れて、朝のあいさつは終わる。「少女の朝の数十分の生活を知ったとき、わたしは衝撃を受けました……この少女によって、『子どもが見える』ということの意味を教えられました」。灰谷健次郎さんが「希望への橋——わたしの子ども原論」に書いている(『子どもが生きる』所収・世界思想社)。
単語:
疎らな ☆ まばらな ☆ sparse/sporadic ☆ 稀疏的
生える ☆ はえる ☆ Grow/spring up ☆ 生长
お仕舞い ☆ おしまい ☆ Closing ☆ 邻近的
草花 ☆ くさばな ☆ 花花草草
植える ☆ うえる ☆ Plant ☆ 种植
マツバボタン ☆ ???
そっと ☆ Softly ☆ 轻轻地
触れる ☆ ふれる ☆ Touch ☆ 触摸
触る ☆ さわる ☆ Touch ☆ 触摸
衝撃 ☆ しょうげき ☆ Shock ☆ 冲击
原論 ☆ げんろん ☆ Theory ☆ 理论
生きる ☆ いきる ☆ Be alive ☆ 活生生的
所収 ☆ しょしゅう ☆ Carrying of a book ☆ 收录翻訳:
接下来,在一个长着稀疏的树木的地方休息,接下来在一个种植了花花草草的房子前休息。轻轻的触摸着“マツバボタン?”,早上的问候就算是结束了。“当了解到这个少女每天早上数十分钟的生活的时候,我受到了一种震撼……从这个少女身上,我了解到了[孩子能能看见]这个说法的意义所在”。灰谷健次郎在他的《通向希望的桥–我的孩子的理论》中如是写道。(由世界思想社出版的《活生生的孩子》所收录)
小説「兎の眼」や「太陽の子」で知られる灰谷さんが、72歳で亡くなった。神戸で小学校の教師を務めた経験に立ち、学校や大人の社会への厳しい論評を続けた。
単語:
小説 ☆ しょうせつ ☆ Novel ☆ 小说
兎 ☆ うさぎ(ウサギ) ☆ Rabbit ☆ 兔子
務める ☆ つとめる ☆ Working/Job ☆ 工作
論評 ☆ ろんぴょう ☆ Comment/Criticism ☆ 评论翻訳:
因小说《兔子的眼睛》和《太阳之子》而闻名的灰谷君,在72岁的时候去世。因为有在神户当小学老师的经验,所以一直在对学校以及大人们的社会进行严厉的评论。
「子どもの発する声から人間所在の危機を推察することは十分可能なのに、そうしようとしない教師は自らの人間性を見出せないままでいる、という悲劇まで加わる」(『学校のゆくえ』岩波書店)。
単語:
発する ☆ はっする ☆ Fire/Ignite/Exhale ☆ 所发出的
所在 ☆ しょざい ☆ Locality/whereabouts ☆ 存在的
危機 ☆ きき ☆ Crisis ☆ 危机
推察 ☆ すいさつ ☆ Suppose ☆ 推测
見出す ☆ みいだす ☆ Find out/Discover ☆ 发现
悲劇 ☆ ひげき ☆ Tragedy ☆ 悲剧
加わる ☆ くわわる ☆ Join in/become involved in something ☆ 促成
ゆくえ ☆ ゆくえ ☆ Whereabouts ☆ 关于
岩波 ☆ いまなみ翻訳:
“从小孩子发出的声音就可以推测出人类所在的危机,有的老师不仅做不到,而且看不到自己的人性所在,这就促成了悲剧”。(《关于学校》岩波书店)
子どもたちを見るだけではなく、見つめなければ「子どもが見える」ことにはならない。現代の家庭や教育の現場を照らす手がかりを、あの少女や命あるものたちとの触れ合いで得たのだろう。
単語:
見詰める ☆ みつめる ☆ Stare/Gaze fixedly at someone or something ☆ 注视
照らす ☆ てらす ☆ Shine on/Illuminate ☆ 照耀到
手がかり ☆ てがかり ☆ Scent/Clue ☆ 线索/抓头,抓手
命 ☆ みこと/いのち ☆ Command/Life ☆ 命令/生命
触れ合う ☆ ふれあう ☆ Come into contact with ☆ 结合在一起翻訳:
不仅仅是看看孩子们,不注视着他们的话,就你就“看不到孩子”。在现代家庭和教育的照耀下的种种手段,正是造成那个少女或者说命运之类的东西的原因吧。