<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Ivan Li 的大杂烩</title>
    <description>菩提本无木，明镜亦非苔，
本来无一物，何处惹尘埃。</description>
    <link>http://ivanl.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>用chkconfig 管理 Init 脚本[转贴]</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/211414" style="color:red;">http://ivanl.javaeye.com/blog/211414</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="f14">
用红帽子的&nbsp;chkconfig&nbsp;管理&nbsp;Init&nbsp;脚本
<br />
Jimmy&nbsp;Ball&nbsp;翻译：Feng&nbsp;Dahui&nbsp;
<br />
<br />
转载&nbsp;LinuxAid
<br />
<br />
<br />
<br />
&nbsp;
<br />
<br />
你的管理工具中多了个简单但非常有用的东东。&nbsp;
<br />
<br />
<br />
我喜欢发现新的UNIX&nbsp;命令，尤其是那些关于系统管理的。当我得知红帽子发布chkconfig&nbsp;这个工具，我想起了在IRIX--一个从
&nbsp;Silicon&nbsp;Graphics&nbsp;Inc.而来的UNIX变种--下的&nbsp;chkconfig。&nbsp;IRIX的chkconfig被用来激活/禁止系统初
始化的时候的服务,无需编辑，重命名或是移动&nbsp;/etc中的init脚本。&nbsp;
<br />
<br />
类似，Red&nbsp;Hat设计chkconfig的目的就是用来管理系统初始化的时候启动的服务。不过，在我仔细阅读手册并作了些测试后，我很快发现
&nbsp;Red&nbsp;Hat扩展了chkconfig，通过管理init脚本的符号连接得以最终控制启动关闭时的系统任务，真是节省时间！&nbsp;
<br />
<br />
<br />
关于启动的基础知识&nbsp;
<br />
<br />
<br />
当你的linux启动时,&nbsp;它显示的第一个进程是&nbsp;init。如果你以前没看到过显示init进程,&nbsp;输入：&nbsp;
<br />
<br />
#&nbsp;ps&nbsp;-ef&nbsp;|&nbsp;grep&nbsp;init&nbsp;
<br />
<br />
就会看到init的PID。&nbsp;简而言之，init&nbsp;运行&nbsp;/etc/inittab中描述的任务。&nbsp;
<br />
<br />
/etc/inittab中说明的任务在init之后就会启动，&nbsp;不过其它的任务启动很简单。例如，默认情况下&nbsp;Red&nbsp;Hat的
/etc/inittab&nbsp;对Ctrl-Alt-Delete键序设置了一个陷阱（trap），当这些键在控制台模式下（不是xdm）同时按下，就会运行
&nbsp;shutdown&nbsp;命令。&nbsp;在启动的时候，&nbsp;init基于/etc/inittab&nbsp;的设置选项设定这个特性，不过在这个键序发生的时候才会执行。&nbsp;
<br />
<br />
inittab&nbsp;的格式允许以&quot;#&quot;开始注释行，正常的条目用&nbsp;&quot;:&quot;&nbsp;界定。遵从如下的格式：&nbsp;
<br />
<br />
id:runlevel:action:process&nbsp;
<br />
<br />
id&nbsp;代表用户定义的唯一的标志，&nbsp;
<br />
runlevel&nbsp;可以使0-6的组合或者为空，&nbsp;
<br />
action&nbsp;来自一个关键词keyword&nbsp;描述init如何对待process，&nbsp;
<br />
process&nbsp;是要执行的命令。&nbsp;
<br />
<br />
<br />
描述action字段的各种关键字可以在inittab的手册中找到。常用的关键字,&nbsp;不是全部,&nbsp;UNIX平台包括这些:&nbsp;
<br />
<br />
initdefault--定义一个系统启动后进入的运行级&nbsp;
<br />
wait&nbsp;--会被执行一次的进程&nbsp;(当进入运行级的时候)。init&nbsp;进程将等待这个进程被终止。&nbsp;
<br />
boot&nbsp;--定义一个启动的时候执行的进程.&nbsp;
<br />
bootwait&nbsp;--与&nbsp;boot&nbsp;类似&nbsp;，不过&nbsp;init在继续运行前等待进程的终止&nbsp;
<br />
sysinit&nbsp;--定义一个进程在&nbsp;boot的时候执行，在任何&nbsp;boot或者bootwait&nbsp;inittab&nbsp;条目的前面执行。&nbsp;
<br />
<br />
runlevel&nbsp;字段指明系统状态。例如，运行级0代表系统关机，运行级6代表系统重启&nbsp;。不幸的事，不是所有的Linux&nbsp;发布都遵循同样的运行级定义&nbsp;。在Red&nbsp;Hat中，默认情况下支持下面这些&nbsp;
<br />
<br />
0.&nbsp;系统挂起&nbsp;
<br />
1.&nbsp;但用户Single-user&nbsp;mode&nbsp;
<br />
2.&nbsp;多用户，没有NFS&nbsp;
<br />
3.&nbsp;完整的多用户Complete&nbsp;multiuser&nbsp;mode&nbsp;
<br />
4.&nbsp;用户自定义&nbsp;
<br />
5.&nbsp;X11&nbsp;(XDM&nbsp;登陆)&nbsp;
<br />
6.&nbsp;重新启动&nbsp;
<br />
<br />
每一个运行级在&nbsp;/etc/rc.d下都有个相应的目录。如运行级5，目录就是/etc/rc.d/rc5.d&nbsp;。包含启动这个运行级的时候运行
的相关任务的相关文件。在&nbsp;Red&nbsp;Hat中,&nbsp;这些文件一般都是&nbsp;shell&nbsp;脚本的符号连接，可以在/etc/rc.d/init.d中找到。&nbsp;
<br />
<br />
让我们用一个简单的例子看一下这些东西，&nbsp;下面这两个例子行来自我们的inittab文件：&nbsp;
<br />
<br />
<br />
id:3:initdefault:&nbsp;
<br />
l3:3:wait:/etc/rc.d/rc&nbsp;3&nbsp;
<br />
<br />
在Red&nbsp;Hat系统中这很典型。一旦init被启动&nbsp;，读取/etc/inittab&nbsp;。&nbsp;从第一行，我们知道&nbsp;init&nbsp;将在系统启动后从运
行运行级3。一旦我们到了那个运行级&nbsp;，第二行告诉&nbsp;init&nbsp;去运行脚本&nbsp;/etc/rc.d/rc&nbsp;3&nbsp;并且在执行前等待终止.&nbsp;
<br />
<br />
在/etc/rc.d目录的rc&nbsp;脚本收到&nbsp;3作为一个参数。&nbsp;这个&nbsp;3&nbsp;相当于运行级3。结果&nbsp;rc&nbsp;脚本执行/etc/rc.d/rc3.d
目录中的所有脚本。它首先用参数&quot;stop&quot;执行所有&nbsp;K&nbsp;（代表&nbsp;&quot;kill&quot;杀掉进程或者服务）打头的脚本，接下来，它运行所有以&nbsp;字母&nbsp;S&nbsp;打头的
脚本，带有参数&quot;start&quot;&nbsp;启动进程或者服务。最后要指明，K和S脚本的执行顺序是基于排序的；&nbsp;名为&nbsp;S90mysql的脚本将在
&nbsp;S95httpd之前执行。&nbsp;
<br />
<br />
/etc/rc.d/rc3.d&nbsp;中的脚本实际是对/etc/rc.d/init.d中文件的符号连接。&nbsp;UNIX管理员可以在rc3.d中放制
文件，&nbsp;实际情况下Red&nbsp;Hat的init.d目录是所有脚本的第一位置，然后声称逻辑连接到&nbsp;rc*.d&nbsp;目录。手工作这些文件的管理很烦人、琐碎。
&nbsp;chkconfig现在接手这件事情!&nbsp;Red&nbsp;Hat&nbsp;的这个chkconfig工具就是专为管理/etc/rc.d/rc[0-6].d中的符号连
接而设计。&nbsp;
<br />
<br />
<br />
查看chkconfig&nbsp;的项（Entries）&nbsp;
<br />
<br />
chkconfig的二进制软件在&nbsp;/sbin下，默认权限允许任何用户执行&nbsp;。不过没有root权限的用户只能察看当前的chkconfig配置。输入&nbsp;
<br />
<br />
<br />
[root]#&nbsp;chkconfig&nbsp;--list&nbsp;|&nbsp;grep&nbsp;on&nbsp;
<br />
<br />
输出的部分内容大致如下：&nbsp;
<br />
<br />
amd&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:off&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
apmd&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:off&nbsp;4:on&nbsp;5:off&nbsp;6:off&nbsp;
<br />
arpwatch&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:off&nbsp;4:off&nbsp;5:off&nbsp;6:off&nbsp;
<br />
atd&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
autofs&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:off&nbsp;4:off&nbsp;5:off&nbsp;6:off&nbsp;
<br />
named&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:off&nbsp;4:off&nbsp;5:off&nbsp;6:off&nbsp;
<br />
bootparamd&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:off&nbsp;4:off&nbsp;5:off&nbsp;6:off&nbsp;
<br />
keytable&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
crond&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
syslog&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
netfs&nbsp;0:off&nbsp;1:off&nbsp;2:off&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
network&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
<br />
在输出的每一行，最开始的段代表在&nbsp;/etc/rc.d/init.d中的init脚本名。其余的区段表示脚本进入各个运行级时的各运行级0-6
的状态。&nbsp;例如，crond应当在进入运行级2，3，&nbsp;4，5&nbsp;的时候启动，当进入&nbsp;0,&nbsp;1&nbsp;and&nbsp;6的时候停止。我们可以通过find命令查找在
/etc/rc.d中所有crond结尾的文件确信我们设置的正确性：&nbsp;
<br />
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*crond'&nbsp;-print&nbsp;
<br />
/etc/rc.d/init.d/crond&nbsp;
<br />
/etc/rc.d/rc0.d/K60crond&nbsp;
<br />
/etc/rc.d/rc1.d/K60crond&nbsp;
<br />
/etc/rc.d/rc2.d/S40crond&nbsp;
<br />
/etc/rc.d/rc3.d/S40crond&nbsp;
<br />
/etc/rc.d/rc4.d/S40crond&nbsp;
<br />
/etc/rc.d/rc5.d/S40crond&nbsp;
<br />
/etc/rc.d/rc6.d/K60crond&nbsp;
<br />
<br />
注意chkconfig报告的每个&nbsp;&quot;off&quot;&nbsp;节&nbsp;(0,&nbsp;1,&nbsp;6)，&nbsp;一个&nbsp;kill脚本存在&nbsp;script&nbsp;is&nbsp;in&nbsp;place&nbsp;每
一个&quot;on&quot;&nbsp;节&nbsp;(2,&nbsp;3,&nbsp;4,&nbsp;5)，有一个&nbsp;start脚本。&nbsp;接下来，执行一个不同的&nbsp;find&nbsp;命令以确信每个发现的文件的类型：&nbsp;
<br />
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*crond'&nbsp;-exec&nbsp;file&nbsp;{}&nbsp;;&nbsp;
<br />
/etc/rc.d/init.d/crond:&nbsp;Bourne&nbsp;shell&nbsp;script&nbsp;text&nbsp;
<br />
/etc/rc.d/rc0.d/K60crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc1.d/K60crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc2.d/S40crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc3.d/S40crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc4.d/S40crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc5.d/S40crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
/etc/rc.d/rc6.d/K60crond:&nbsp;symbolic&nbsp;link&nbsp;to&nbsp;
<br />
../init.d/crond&nbsp;
<br />
<br />
这表明在init.d中找到的crond是一个shell脚本，找到的所有其他的文件都是对&nbsp;crond&nbsp;脚本的符号连接。&nbsp;
<br />
<br />
调整chkconfig项&nbsp;
<br />
<br />
<br />
调整chkconfig的&nbsp;项几乎和列出现在的设置一样容易。格式:&nbsp;
<br />
<br />
<br />
chkconfig&nbsp;[--level&nbsp;&lt;运行级&gt;;]&nbsp;&lt;名字&gt;;&nbsp;
<br />
<br />
例如，如果我们决定在运行级&nbsp;2禁止crond，&nbsp;
<br />
<br />
#&nbsp;chkconfig&nbsp;--level&nbsp;2&nbsp;crond&nbsp;off&nbsp;
<br />
<br />
(root执行)&nbsp;会在运行级2关掉crond.&nbsp;运行&nbsp;chkconfig&nbsp;--list会确信crond的配置已经被调整。&nbsp;更进一步，下面的find&nbsp;命令command&nbsp;显示一个&nbsp;kill脚本已经在目录rc2.d中代替了&nbsp;start脚本&nbsp;：&nbsp;
<br />
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*crond'&nbsp;-print&nbsp;
<br />
/etc/rc.d/init.d/crond&nbsp;
<br />
/etc/rc.d/rc0.d/K60crond&nbsp;
<br />
/etc/rc.d/rc1.d/K60crond&nbsp;
<br />
/etc/rc.d/rc2.d/K60crond&nbsp;
<br />
/etc/rc.d/rc3.d/S40crond&nbsp;
<br />
/etc/rc.d/rc4.d/S40crond&nbsp;
<br />
/etc/rc.d/rc5.d/S40crond&nbsp;
<br />
/etc/rc.d/rc6.d/K60crond&nbsp;
<br />
<br />
紧记&nbsp;chkconfig不是立即自动禁止或激活一个服务的&nbsp;它只是简单的改变了符号连接，超级用户可以用这个命令
&nbsp;/etc/rc.d/init.d/crond&nbsp;stop立刻禁止crond服务。最后，你可以用一个命令行激活/禁止多个运行级的某个命令&nbsp;。例如输
入：&nbsp;
<br />
<br />
chkconfig&nbsp;--levels&nbsp;2345&nbsp;crond&nbsp;on&nbsp;
<br />
<br />
会设定&nbsp;crond&nbsp;在运行级2，&nbsp;3，&nbsp;4&nbsp;和&nbsp;5启动。&nbsp;
<br />
<br />
<br />
删掉一项&nbsp;
<br />
<br />
<br />
有的时候，删掉一个服务也很恰当。&nbsp;例如，针对sendmail，&nbsp;在客户机上导入本地账号的邮件没有必要。运行sendmail最为守护进程就
不是必要的了。这种情况，我发现禁止sendmail服务很有必要，减少了潜在的安全问题，从chkconfig中删掉sendmail，输入：&nbsp;
<br />
<br />
chkconfig&nbsp;--del&nbsp;sendmail&nbsp;
<br />
<br />
在下面，我们的find命令显示该处没有符号连接了，不过sendmail的init脚本仍然有：&nbsp;
<br />
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*sendmail'&nbsp;-print&nbsp;/etc/rc.d/init.d/sendmail&nbsp;
<br />
<br />
在我看来这很完美。脚本保留了，万一&nbsp;sendmail&nbsp;需要作为一个服务实现呢？不过所有的符号连接去掉了。我们能在每一个运行级禁止
sendmail&nbsp;服务，这将在每一个rc*.d子目录中放置一个kill脚本，虽然sendmail从不在初始化阶段启动，是个不必要的任务，可是，我
曾看到一些系统管理员需要在特定的场合手工启动服务&nbsp;。把kill脚本留在那里确保可以干净的杀掉服务。&nbsp;
<br />
<br />
<br />
添加一个chkconfig&nbsp;项&nbsp;
<br />
<br />
<br />
到目前为止，一切顺利，我们已经知道使用chkconfig如何查看、调整、删掉服务。现在添加一个新的服务。看下面的脚本。&nbsp;
<br />
<br />
----------------------------------------------------&nbsp;
<br />
Listing&nbsp;1.&nbsp;Oracle&nbsp;Script&nbsp;
<br />
----------------------------------------------------&nbsp;
<br />
#!/bin/sh&lt;\n&gt;;&nbsp;红帽子的&nbsp;
<br />
<br />
#chkconfig:&nbsp;2345&nbsp;80&nbsp;05&nbsp;
<br />
#description:&nbsp;Oracle&nbsp;8&nbsp;Server&nbsp;
<br />
<br />
ORA_HOME=/usr/home/oracle/product/8.0.5&nbsp;
<br />
ORA_OWNER=oracle&nbsp;
<br />
<br />
if&nbsp;[&nbsp;!&nbsp;-f&nbsp;$ORA_HOME/bin/dbstart&nbsp;]&nbsp;
<br />
then&nbsp;
<br />
echo&nbsp;&quot;Oracle&nbsp;startup:&nbsp;cannot&nbsp;start&quot;&nbsp;
<br />
exit&nbsp;
<br />
fi&nbsp;
<br />
<br />
case&nbsp;&quot;$1&quot;&nbsp;in&nbsp;
<br />
&quot;start&quot;)&nbsp;
<br />
su-$ORA_OWNER&nbsp;-c&nbsp;$ORA_HOME/bin/dbstart&nbsp;
<br />
su-$ORA_OWNER&nbsp;-c&nbsp;&quot;$ORA_HOME/bin/lsnrctl&nbsp;start&quot;&nbsp;
<br />
;;&nbsp;
<br />
&quot;stop&quot;)&nbsp;
<br />
su-$ORA_OWNER&nbsp;-c&nbsp;$ORA_HOME/bin/dbshut&nbsp;
<br />
su-$ORA_OWNER&nbsp;-c&nbsp;&quot;$ORA_HOME/bin/lsnrctl&nbsp;stop&quot;&nbsp;
<br />
;;&nbsp;
<br />
esac&nbsp;
<br />
-----------------------------------------------------&nbsp;
<br />
<br />
<br />
使用这个脚本，&nbsp;Oracle&nbsp;8可以以参数&nbsp;&quot;start&quot;启动，以&nbsp;&quot;stop&quot;&nbsp;参数停止。它符合init脚本的最小要求可以和&nbsp;/etc/rc.d/rc脚本联合使用。&nbsp;
<br />
<br />
把脚本放到&nbsp;/etc/rc.d/init.d中并运行&nbsp;(以&nbsp;root)&nbsp;：&nbsp;
<br />
<br />
<br />
chmod&nbsp;+x&nbsp;/etc/rc.d/init.d/oracle&nbsp;
<br />
<br />
使你的脚本可执行&nbsp;。如果你担心普通用户察看这个脚本，你可以设定更严格的文件权限&nbsp;。只要这个脚本可以被root作为单独的脚本运行就可以。&nbsp;
<br />
<br />
注意脚本中的两行注释:&nbsp;
<br />
<br />
<br />
#chkconfig:&nbsp;2345&nbsp;80&nbsp;05&nbsp;
<br />
#description:&nbsp;Oracle&nbsp;8&nbsp;Server&nbsp;
<br />
<br />
chkconfig需要这些行来决定如何实现初始运行级添加服务，如何设定启动和停止顺序的优先级&nbsp;。这些行指明脚本将为运行级2，3，4，5启动&nbsp;Oracle&nbsp;8&nbsp;服务。另外，启动优先权将被设定为&nbsp;80而停止优先权设定为05。&nbsp;
<br />
<br />
现在脚本在合适的位置，并且有合适的执行权限，以及恰当的chkconfig注释，我们可以添加init脚本，作为&nbsp;root，&nbsp;
<br />
<br />
#&nbsp;chkconfig&nbsp;--add&nbsp;oracle.&nbsp;
<br />
<br />
用&nbsp;chkconfig的查询，我们能核实我们所作的添加:&nbsp;
<br />
<br />
<br />
[root]#&nbsp;chkconfig&nbsp;--list&nbsp;|&nbsp;grep&nbsp;oracle&nbsp;
<br />
oracle&nbsp;0:off&nbsp;1:off&nbsp;2:on&nbsp;3:on&nbsp;4:on&nbsp;5:on&nbsp;6:off&nbsp;
<br />
<br />
而且，我们可以用标准的&nbsp;find&nbsp;命令察看chkconfig如何设定符号连接：&nbsp;
<br />
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*oracle'&nbsp;-print&nbsp;
<br />
<br />
/etc/rc.d/init.d/oracle&nbsp;
<br />
/etc/rc.d/rc0.d/K05oracle&nbsp;
<br />
/etc/rc.d/rc1.d/K05oracle&nbsp;
<br />
/etc/rc.d/rc2.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc3.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc4.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc5.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc6.d/K05oracle&nbsp;
<br />
<br />
正如需要的那样，kill连接的名字包含优先权05而start连接包含80。如果你需要调整优先权，(e.g.我们停止的优先权需要设为
&nbsp;03)，简单的调整oracle&nbsp;init脚本的chkconfig&nbsp;注释行并运行&nbsp;reset命令&nbsp;command，如下所示。符号连接会被改名：&nbsp;
<br />
<br />
[root]#&nbsp;chkconfig&nbsp;oracle&nbsp;reset&nbsp;
<br />
[root]#&nbsp;find&nbsp;/etc/rc.d&nbsp;-name&nbsp;'*oracle'&nbsp;-print&nbsp;
<br />
/etc/rc.d/init.d/oracle&nbsp;
<br />
/etc/rc.d/rc0.d/K03oracle&nbsp;
<br />
/etc/rc.d/rc1.d/K03oracle&nbsp;
<br />
/etc/rc.d/rc2.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc3.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc4.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc5.d/S80oracle&nbsp;
<br />
/etc/rc.d/rc6.d/K03oracle&nbsp;
<br />
<br />
Red&nbsp;Hat&nbsp;7中的改进&nbsp;
<br />
<br />
<br />
大家可能都知道了，inetd在&nbsp;Red&nbsp;Hat&nbsp;7种已经被xinetd&nbsp;所取代。而且，chkconfig&nbsp;的功能已经被扩展，可以管理一些xinetd的Internet服务。例子如下：&nbsp;
<br />
<br />
<br />
[root]#&nbsp;chkconfig&nbsp;--list&nbsp;
<br />
...&nbsp;
<br />
xinetd&nbsp;based&nbsp;services:&nbsp;
<br />
finger:&nbsp;on&nbsp;
<br />
linuxconf-web:&nbsp;off&nbsp;
<br />
rexec:&nbsp;off&nbsp;
<br />
rlogin:&nbsp;off&nbsp;
<br />
rsh:&nbsp;off&nbsp;
<br />
ntalk:&nbsp;off&nbsp;
<br />
talk:&nbsp;off&nbsp;
<br />
telnet:&nbsp;on&nbsp;
<br />
tftp:&nbsp;off&nbsp;
<br />
wu-ftpd:&nbsp;on&nbsp;
<br />
<br />
禁掉一个&nbsp;xinetd&nbsp;服务，可能是&nbsp;finger，你应该输入：&nbsp;
<br />
<br />
[root]#&nbsp;chkconfig&nbsp;finger&nbsp;off.&nbsp;
<br />
<br />
很简洁啊，呵呵。可是，这里有个问题。当配置已经改变，命令/etc/init.d/xinetd&nbsp;reload指明xinetd&nbsp;自动重载入新
的配置，被&nbsp;chkconfig执行。这个脚本运行一个带有SIGUSR2信号的kill&nbsp;指示&nbsp;xinetd&nbsp;进行一个&quot;硬&quot;重配置。&nbsp;
<br />
<br />
那意味着什么？哦，当我测试的时候，通过xinetd&nbsp;提供的活动服务(i.e.,&nbsp;Telnet,&nbsp;FTP,&nbsp;etc.)立刻被中止。&nbsp;
<br />
<br />
如果你能计划在最合适的时间启动/禁止你的系统上的服务，可能不是个问题。作为一种替代方式，你可以调整你的
/etc/init.d/xinetd脚本，这样&nbsp;reload&nbsp;选项发送一个&nbsp;SIGUSR1&nbsp;信号。&nbsp;这是个&quot;软&quot;重配置。这将重启动你的服务而不中
断你现存的连接。chkconfig&nbsp;管理下，添加xinetd服务只要简单的添加xinetd服务文件到&nbsp;/etc/xinetd.d目录中。
chkconfig会自动的&quot;捡起&quot;它并使其可用，通过chkconfig&nbsp;工具进行管理。简洁阿！&nbsp;
<br />
<br />
结论&nbsp;
<br />
<br />
现在你已经应该认识到红帽子的chkconfig工具管理init脚本的好处了，虽然它的功能似乎简单了些，但是它节省时间，这使其成为一个系统管理员适用的命令，值得记牢。
</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/211414#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 11:08:58 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/211414</link>
        <guid>http://ivanl.javaeye.com/blog/211414</guid>
      </item>
      <item>
        <title>User and Group in Linux</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/211336" style="color:red;">http://ivanl.javaeye.com/blog/211336</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>ls -l 显示的是先group 在 user<br />
而chown 语法里是先owner:[group]</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/211336#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 09:27:27 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/211336</link>
        <guid>http://ivanl.javaeye.com/blog/211336</guid>
      </item>
      <item>
        <title> linux fg bg ctrl + z jobs &amp; 等命令</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/211310" style="color:red;">http://ivanl.javaeye.com/blog/211310</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>
		fg、bg、jobs、&amp;、ctrl + z都是跟系统任务有关的，虽然现在基本上不怎么需要用到这些命令，但学会了也是很实用的<br />
一。&amp; 最经常被用到<br />
 &nbsp; &nbsp;这个用在一个命令的最后，可以把这个命令放到后台执行<br />
二。ctrl + z<br />
 &nbsp; &nbsp; &nbsp;可以将一个正在前台执行的命令放到后台，并且暂停<br />
三。jobs<br />
 &nbsp; &nbsp; &nbsp;查看当前有多少在后台运行的命令<br />
四。fg<br />
 &nbsp; &nbsp; &nbsp;将后台中的命令调至前台继续运行<br />
 &nbsp; &nbsp;如果后台中有多个命令，可以用 fg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)<br />
五。bg<br />
 &nbsp; &nbsp; &nbsp;将一个在后台暂停的命令，变成继续执行<br />
 &nbsp; &nbsp;如果后台中有多个命令，可以用bg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/211310#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 08:49:58 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/211310</link>
        <guid>http://ivanl.javaeye.com/blog/211310</guid>
      </item>
      <item>
        <title>终于可以在我的RHEL4上输入中文了</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/210602" style="color:red;">http://ivanl.javaeye.com/blog/210602</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>参考文献<br />
<a href="http://people.redhat.com/petersen/scim/" target="_blank">http://people.redhat.com/petersen/scim/</a><br />
<a href="http://blog.linuxeden.com/?uid-56353-action-viewspace-itemid-5878" target="_blank">http://blog.linuxeden.com/?uid-56353-action-viewspace-itemid-5878</a><br />
只是可惜现在在FF上还是不能输入中文，有待解决！</p>
<p>&nbsp;</p>
<p>目前只能gedit /tmp/notepad.txt &amp;<br />
copy <br />
paste<br />
方式了</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/210602#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 14:28:05 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/210602</link>
        <guid>http://ivanl.javaeye.com/blog/210602</guid>
      </item>
      <item>
        <title>linux 开机自动启动脚本方法</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/210414" style="color:red;">http://ivanl.javaeye.com/blog/210414</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1）redhat的启动方式和执行次序是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载内核<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行init程序<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/rc.d/rc.sysinit # 由init执行的第一个脚本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/rc.d/rc.local&nbsp;&nbsp;&nbsp;&nbsp; #相应级别服务启动之后、在执行该文件（其实也可以把需要执行的命令写到该文件中）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /sbin/mingetty # 等待用户登录<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Redhat中，/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作，包括：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调入keymap以及系统字体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动swapping<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置主机名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置NIS域名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 检查（fsck）并mount文件系统<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开quota<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装载声卡模块<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置系统时钟<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/rc.d/rc则根据其参数指定的运行模式(运行级别，你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ，都以stop为参数来调用；凡是以Sxx开头的，都以start为参数来调用。调用的顺序按xx<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从小到大来执行。(其中xx是数字、表示的是启动顺序)例如，假设缺省的运行模式是3，/etc/rc.d/rc就会按上述方式调用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/rc.d/rc3.d/下的脚本。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值得一提的是，Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的最后一个，所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后，登录之前执行的命令。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init在等待/etc/rc.d/rc执行完毕之后（因为在/etc/inittab中/etc/rc.d/rc的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action是wait），将在指定的各个虚拟终端上运行/sbin/mingetty，等待用户的登录。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此，LINUX的启动结束。<br />
&nbsp;&nbsp;&nbsp; 2）init运行级别及指令<br />
&nbsp;&nbsp;&nbsp; 一、什么是INIT:<br />
　　init是Linux系统操作中不可缺少的程序之一。<br />
　　所谓的init进程，它是一个由内核启动的用户级进程。<br />
　　内核自行启动（已经被载入内存，开始运行，并已初始化所有的设备驱动程序和数据结构等）之后，就通过启动一个用户级程序init的方式，完成引导进程。所以,init始终是第一个进程（其进程编号始终为1）。<br />
　　内核会在过去曾使用过init的几个地方查找它，它的正确位置（对Linux系统来说）是/sbin/init。如果内核找不到init，它就会试着运行/bin/sh，如果运行失败，系统的启动也会失败。<br />
　　二、运行级别<br />
　　那么，到底什么是运行级呢？<br />
　　简单的说，运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ，具有不同的功能。<br />
　　不同的运行级定义如下<br />
　　# 0 - 停机（千万不能把initdefault 设置为0 ）<br />
　　# 1 - 单用户模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # s&nbsp;&nbsp; init s = init 1<br />
　　# 2 - 多用户，没有 NFS<br />
　　# 3 - 完全多用户模式(标准的运行级)<br />
　　# 4 - 没有用到<br />
　　# 5 - X11 多用户图形模式（xwindow)<br />
　　# 6 - 重新启动 （千万不要把initdefault 设置为6 ）<br />
　　这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件，最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中，启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 3）：chkconfig 命令（redhat 操作系统下）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不像DOS 或者 Windows，Linux 可以有多种运行级。常见的就是多用户的2,3,4,5 ，很多人知道 5 是运行 X-Windows 的级别，而 0 就&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是关机了。运行级的改变可以通过 init 命令来切换。例如，假设你要维护系统进入单用户状态，那么，可以使用 init 1 来切换。在&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux 的运行级的切换过程中，系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K 和 S 开头的文件，按后面的数字顺序，执行这&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 些脚本。对这些脚本的维护，是很繁琐的一件事情，Linux 提供了chkconfig 命令用来更新和查询不同运行级上的系统服务。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 语法为：<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig --list [name]<br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig --add name<br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig --del name<br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig [--level levels] name<br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig [--level levels] name<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig 有五项功能：添加服务，删除服务，列表服务，改变启动信息以及检查特定服务的启动状态。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; chkconfig 没有参数运行时，显示用法。如果加上服务名，那么就检查这个服务是否在当前运行级启动。如果是，返回 true，否则返回&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; false。 --level 选项可以指定要查看的运行级而不一定是当前运行级。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果在服务名后面指定了on，off 或者 reset，那么 chkconfig 会改变指定服务的启动信息。on 和 off 分别指服务在改变运行级时的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动和停止。reset 指初始化服务信息，无论有问题的初始化脚本指定了什么。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于 on 和 off 开关，系统默认只对运行级 3，4， 5有效，但是 reset 可以对所有运行级有效。指定 --level 选项时，可以选择特&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定的运行级。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 需要说明的是，对于每个运行级，只能有一个启动脚本或者停止脚本。当切换运行级时，init 不会重新启动已经启动的服务，也不会再&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 次去停止已经停止的服务。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 选项介绍：<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; --level levels<br />
&nbsp;&nbsp;&nbsp;&nbsp; 指定运行级，由数字 0 到 7 构成的字符串，如：<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; --level 35 表示指定运行级3 和5。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 要在运行级别3、4、5中停运 nfs 服务，使用下面的命令：chkconfig --level 345 nfs off<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; --add name<br />
&nbsp;&nbsp;&nbsp;&nbsp; 这个选项增加一项新的服务，chkconfig 确保每个运行级有一项 启动(S) 或者 杀死(K) 入口。如有缺少，则会从缺省的init 脚本自动&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; --del name<br />
&nbsp;&nbsp;&nbsp;&nbsp; 用来删除服务，并把相关符号连接从 /etc/rc[0-6].d 删除。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; --list name<br />
&nbsp;&nbsp;&nbsp;&nbsp; 列表，如果指定了name 那么只是显示指定的服务名，否则，列出全部服务在不同运行级的状态。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 运行级文件<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动，那么使用 - 代替运行级。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 第二行对服务进行描述，可以用 跨行注释。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 例如，random.init 包含三行：<br />
&nbsp;&nbsp;&nbsp;&nbsp; # chkconfig: 2345 20 80<br />
&nbsp;&nbsp;&nbsp;&nbsp; # description: Saves and restores system entropy pool for<br />
&nbsp;&nbsp;&nbsp;&nbsp; # higher quality random number generation.<br />
&nbsp;&nbsp;&nbsp;&nbsp; 表明 random 脚本应该在运行级 2, 3, 4, 5 启动，启动优先权为20，停止优先权为 80。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 好了，介绍就到这里了，去看看自己目录下的/etc/rc.d/init.d 下的脚本吧。 <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 设置自启动服务:chkconfig --level 345 nfs on<br />
&nbsp;&nbsp;&nbsp; <br />
2. 实例介绍：<br />
&nbsp;&nbsp; 1、在linux下安装了apache 服务（通过下载二进制文件经济编译安装、而非rpm包）、apache 服务启动命令：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /server/apache/bin/apachectl start&nbsp;&nbsp;&nbsp; 。让apache服务运行在运行级别3下面。&nbsp; 命令如下：<br />
&nbsp; <br />
&nbsp;&nbsp; 1）touch /etc/rc.d/init.d/apache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vi /etc/rc.d/init.d/apache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chown -R root /etc/rc.d/init.d/apache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chmod 700 /etc/rc.d/init.d/apache<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ln -s /etc/rc.d/init.d/apache /etc/rc.d/rc3.d/S60apache&nbsp;&nbsp; #S 是start的简写、代表启动、K是kill的简写、代表关闭。60数字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代表启动的顺序。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apache的内容：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #!/bin/bash<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Start httpd service<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /server/apache/bin/apachectl start<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此 apache服务就可以在运行级别3下 随机自动启动了。（可以结合chkconfig 对启动服务进行相应的调整）</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/210414#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:22:28 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/210414</link>
        <guid>http://ivanl.javaeye.com/blog/210414</guid>
      </item>
      <item>
        <title>python 奇特的传参方法</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/205198" style="color:red;">http://ivanl.javaeye.com/blog/205198</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          When a final formal parameter of the form **name is present, it receives a dictionary containing all keyword arguments except for those corresponding to a formal parameter. This may be combined with a formal parameter of the form *name (described in the next subsection) which receives a tuple containing the positional arguments beyond the formal parameter list. (*name must occur before **name.) For example, if we define a function like this: <br /><br /><pre name="code" class="python">
def cheeseshop(kind, *arguments, **keywords):
    print "-- Do you have any", kind, '?'
    print "-- I'm sorry, we're all out of", kind
    for arg in arguments: print arg
    print '-'*40
    keys = keywords.keys()
    keys.sort()
    for kw in keys: print kw, ':', keywords[kw]
</pre><br />It could be called like this: <br /><br /><pre name="code" class="python">
cheeseshop('Limburger', "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           client='John Cleese',
           shopkeeper='Michael Palin',
           sketch='Cheese Shop Sketch')
</pre><br />and of course it would print: <br /><br /><pre name="code" class="python">
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/205198#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 16:03:46 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/205198</link>
        <guid>http://ivanl.javaeye.com/blog/205198</guid>
      </item>
      <item>
        <title>使用python求素数的快捷方法</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/204741" style="color:red;">http://ivanl.javaeye.com/blog/204741</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="python">
  lim=int(raw_input("Please put a range:"))
  for n in range(2,lim):
  	for x in range(2,n):
  		if n%x == 0:
  			break
  	else:
  		print n, 'is a prime number'
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/204741#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 17:17:22 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/204741</link>
        <guid>http://ivanl.javaeye.com/blog/204741</guid>
      </item>
      <item>
        <title>使用java zip 压缩文件目录</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/204226" style="color:red;">http://ivanl.javaeye.com/blog/204226</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
@Test
    public void testPackageContent() {
        try {
            FileOutputStream f = 
                new FileOutputStream(BASE_PATH + "/../" + packageName + ".zip");
            CheckedOutputStream csum = 
                new CheckedOutputStream(f, new Adler32());//Adler32 is faster than CRC32
            ZipOutputStream out = 
                new ZipOutputStream(new BufferedOutputStream(csum));
            out.setComment("some comments");
            File srcDir = new File(BASE_PATH);
            zipFile(out, srcDir, "packageName");
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * zip the given file
     * @param out - ZipOutputStream
     * @param srcDir - if it is a file then add this file into zip, if it is dir, then call zipFile cascade
     * @param filePath - the filepath in zipfile
     * @throws IOException
     */
    private void zipFile(ZipOutputStream out, File srcDir, String filePath) throws IOException{
        for(File file : srcDir.listFiles()){
            if(file.isDirectory()){
                zipFile(out, file, filePath+"/"+file.getName());
                continue;
            }
            Logger.global.info("Writing file : "+file.getName());
            FileInputStream in = new FileInputStream(file);
            out.putNextEntry(new ZipEntry(filePath+"/"+file.getName()));
            byte[] b = new byte[1024];
            int off = 0;
            while((in.read(b,off,1024)) != -1){
                out.write(b);
            }
            in.close();
        }
    }
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/204226#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Jun 2008 16:54:49 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/204226</link>
        <guid>http://ivanl.javaeye.com/blog/204226</guid>
      </item>
      <item>
        <title>敏捷软件开发笔记(一)</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/202195" style="color:red;">http://ivanl.javaeye.com/blog/202195</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <ul><li>敏捷项目不是50米短跑，而是马拉松长跑。团队不是以全速启动并试图在项目开发期间维持那个速度;相反，他们一块是但是可以持续的速度进行。跑得过快会导致团队精力耗尽、出现短期行为，以至于崩溃。敏捷团队会测量自己的数度。他们不允许自己过于疲惫。他们不会借用明天的精力来在今天多完成一点工作。他们工作在一个可以使整个项目开发期间保持高质量标准的速度上。</li><li>极限编程者不能容忍重复的代码，无论在哪里发现重复的代码，他们都会消灭它们</li></ul>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/202195#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 16:04:51 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/202195</link>
        <guid>http://ivanl.javaeye.com/blog/202195</guid>
      </item>
      <item>
        <title>写给面试者--来至一线面试官的忠告</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/190667" style="color:red;">http://ivanl.javaeye.com/blog/190667</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近由于team壮大，连续不断面试了很多人，目前为止已经面试了40多人，我这轮负责技术考察和英语，在面试的过程中有发现很多面试时因该注意的问题，在这里跟大家分享一下，希望各位找工作的朋友在面试的时候不要犯同样的错误。<br /><br /><span style="font-size: large">忠告 1: 想去外企，必须过外语这一关</span><br />一个人来应聘高级软件工程师，他技术能力，管理能力等我们都很满意，可是就是口语太差，没法用英语交流。最后只好作罢，还有一个来应聘pl sql developer,让她打题没答出来几道，在交流是她又会哪些问题，后来查发现这位姐姐原来是学俄语的，英语阅读很费劲，看不懂英文资料，在外企工作，能看到的都是英文，如果英文读写能力差的话，根本无法开展工作，最后这位姐姐自己知趣的离开了。<br /><br /><span style="font-size: large">忠告 2:为人要诚实，不要试图去蒙考官</span><br />有一个应聘者自称写过很多pl sql,一说overview的东西，他就口若悬河,什么pl sql里也有oo的思想了,也有异常的概念了,后来我让他写一个pl sql抛出异常，结果得到这样类似的结果<br /><pre name="code" class="java">
    try{
          .......
    }catch(Exception e){
       ...
    }
</pre><br />又问了他一些他声称知道的东西，他还是跟我扯理论，overview,网上都能看到的东西，没办法，让老哥走了<br /><br /><span style="font-size: large">忠告 3:expert , master,精通这样的词汇要慎用</span><br />除非真正是expert,否则在简历中不要出现这样的词汇，这样写，会使考官对你有一个非常高的期望值，往往问的问题也会偏难,如果学艺不精，连续几个问题都答不出来，会使印象分大打折扣,本来作为一个普通的developer可以hire的，但是由于第一印象太差，也可能失去机会。如果是那方面的专家，或者那个方面很擅长，在面试的时候一样可以表现出来.<br /><br /><span style="font-size: large">忠告 4:不要看着公司打就漫天要价，在要价之前先看看自己是否值这个价钱</span><br />不要由于面试的是个比较大的公司就对薪水要求的没边，有个应聘者面试时我们觉得各个方面都不错，但是在谈薪水的时候漫天要价，结果没法谈下去了。还有个小伙子本来技术不满足我们的要求，但是在交流中感觉他学习能力很强，又刚刚毕业不久，所以想给他一次机会，但是这位老哥是过一关一个价，有点飘飘然了，结果可想而知。<br /><br /><span style="font-size: large">忠告 5:要尊重考官</span><br />面试准时，应该是最基本的礼貌了吧，但是介于北京的交通状况，你迟到了也没什么，主要是迟到了你也打电话说一声呀。还有的老哥不来面试了，就音信全无，我们打电话过去询问，他连句道歉的话也没有，这样的人幸亏没有hire,这种不尊重别人时间的人是做不出什么成绩的。
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/190667#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 17:17:47 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/190667</link>
        <guid>http://ivanl.javaeye.com/blog/190667</guid>
      </item>
      <item>
        <title>使用flowplayer播放Flash Video</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/186800" style="color:red;">http://ivanl.javaeye.com/blog/186800</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://flowplayer.org/index.html" target="_blank">http://flowplayer.org/index.html</a><br /><br />1:在网页中需要引入flashembed.min.js这个文件<br />2:声明一个带id的div<br />3: 添加js代码<br /><pre name="code" class="java">
  window.onload = function() {  
    /*
      use flashembed to place flowplayer into HTML element 
      whose id is "example" (below this script tag)
    */
    flashembed("example", 
   
		/* 
			first argument supplies standard Flash parameters. See full list:
			http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_12701
		*/
      {
         src:'$ServerURL/FlowPlayerDark.swf',
			width: 468, 
			height: 350
      },
		
      /*
			second argument is Flowplayer specific configuration. See full list:
			http://flowplayer.org/player/configuration.html
		*/
      {config: {   
			videoFile: '$ServerURL/$name.flv'
      }} 
   );
}
&lt;div id="example">&lt;/div>
</pre><br /><br />注意flv跟swf格式的播放器要放在同一个域名里，跨域有security问题，请求不到flv文件
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/186800#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 15:19:51 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/186800</link>
        <guid>http://ivanl.javaeye.com/blog/186800</guid>
      </item>
      <item>
        <title>明天到老婆去照婚纱照</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/184890" style="color:red;">http://ivanl.javaeye.com/blog/184890</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          老婆提前很长时间就开始做准备了，又是减肥，又是保养的，生怕照不好！看她紧张的样子，真是好笑！
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/184890#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 13:27:15 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/184890</link>
        <guid>http://ivanl.javaeye.com/blog/184890</guid>
      </item>
      <item>
        <title>张开双臂 拥抱 Beijing Open Party</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/182249" style="color:red;">http://ivanl.javaeye.com/blog/182249</a>&nbsp;
          发表时间: 2008年04月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Beijing Open Party,期待以及的盛会，这里是一群有激情有理想的人，这里是一个自由开放的环境，每一个来参加party的人都可以贡献自己的力量，都会有不同的收获。我有幸参加了4月12日在TW举行的第三届Beijing Open Party,在这里记录一下我的收获。<br />   <ul><li>胡正：来至redhat的黑客,stardict的作者，论坛中人们都叫他胡教主，他的一句话让我印象很深,“redhat的人都很勇敢，很有冒险精神”,从他的谈吐可以看出他对开源事业非常的热爱。我们公司里很缺乏这样的精神，很缺乏这种动力，有的时候并不是给很高的薪水就能够留住人的，而是需要让人感到在这个公司，在这个组里工作很有自豪感，成就感，才能在最大限度发挥人的内在潜力。</li>   </ul><br />   <ul><li>大野狼：好看簿的创始人，今天跟大家分享了他在网站推广中的一些经验，我同学widen的网站跟好看簿出发点一样，属于同一类型的网站，只是widen在做网站推广的时候遇到了困难，目前还没有继续做下去。</li>    </ul><br />   <ul><li>ThoughtWorkers:敏捷的倡导者,今天参加了一个state based testing的topic,听完topic后，打消了我想对我们unit test中Model Object Proxy的Mock想法，因为要想mock一个我们的Model Object Proxy话费的代价太高；还有认识到standup meeting中stand的重要性，要督促大家用最简短的语言讲述最关键的问题，不要陷入技术细节中，耽误大家时间，以后我们team standup meeting打算就在大厅里进行，也不用定会议室了。</li>   </ul>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/182249#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Apr 2008 09:35:17 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/182249</link>
        <guid>http://ivanl.javaeye.com/blog/182249</guid>
      </item>
      <item>
        <title>oracle锁表与解表</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/174225" style="color:red;">http://ivanl.javaeye.com/blog/174225</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SELECT /*+ rule */ s.username,<br />decode(l.type,'TM','TABLE LOCK',<br />'TX','ROW LOCK',<br />NULL) LOCK_LEVEL,<br />o.owner,o.object_name,o.object_type,<br />s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser<br />FROM v$session s,v$lock l,dba_objects o<br />WHERE l.sid = s.sid<br />AND l.id1 = o.object_id(+)<br />AND s.username is NOT Null<br /><br /> <br /><br /> <br /><br />--kill session语句<br />alter system kill session'50,492';<br />--以下几个为相关表<br />SELECT * FROM v$lock;<br />SELECT * FROM v$sqlarea;<br />SELECT * FROM v$session;<br />SELECT * FROM v$process ;<br />SELECT * FROM v$locked_object;<br />SELECT * FROM all_objects;<br />SELECT * FROM v$session_wait;<br />--1.查出锁定object的session的信息以及被锁定的object名<br />SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,<br />l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time<br />FROM v$locked_object l, all_objects o, v$session s<br />WHERE l.object_id = o.object_id<br />AND l.session_id = s.sid<br />ORDER BY sid, s.serial# ;<br />--2.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句<br />--比上面那段多出sql_text和action<br />SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,<br />l.os_user_name,s.machine, s.terminal,a.sql_text, a.action<br />FROM v$sqlarea a,v$session s, v$locked_object l<br />WHERE l.session_id = s.sid<br />AND s.prev_sql_addr = a.address<br />ORDER BY sid, s.serial#;<br />--3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal，锁的type,mode<br />SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,<br />s.terminal, s.logon_time, l.type<br />FROM v$session s, v$lock l<br />WHERE s.sid = l.sid<br />AND s.username IS NOT NULL<br />ORDER BY sid;<br /><br /> <br /><br /> <br /><br />这个语句将查找到数据库中所有的DML语句产生的锁，还可以发现，<br />任何DML语句其实产生了两个锁，一个是表锁，一个是行锁。<br />杀锁命令<br />alter system kill session 'sid,serial#'<br />SELECT /*+ rule */ s.username,<br />decode(l.type,'TM','TABLE LOCK',<br />'TX','ROW LOCK',<br />NULL) LOCK_LEVEL,<br />o.owner,o.object_name,o.object_type,<br />s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser<br />FROM v$session s,v$lock l,dba_objects o<br />WHERE l.sid = s.sid<br />AND l.id1 = o.object_id(+)<br />AND s.username is NOT NULL<br />如果发生了锁等待，我们可能更想知道是谁锁了表而引起谁的等待<br />以下的语句可以查询到谁锁了表，而谁在等待。<br />以上查询结果是一个树状结构，如果有子节点，则表示有等待发生。<br />如果想知道锁用了哪个回滚段，还可以关联到V$rollname，其中xidusn就是回滚段的USN<br />col user_name format a10<br />col owner format a10<br />col object_name format a10<br />col object_type format a10<br />SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,<br />o.owner,o.object_name,o.object_type,s.sid,s.serial#<br />FROM v$locked_object l,dba_objects o,v$session s<br />WHERE l.object_id=o.object_id<br />AND l.session_id=s.sid<br />ORDER BY o.object_id,xidusn DESC
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/174225#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 17:25:34 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/174225</link>
        <guid>http://ivanl.javaeye.com/blog/174225</guid>
      </item>
      <item>
        <title>第一次出国经历--入境</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/169918" style="color:red;">http://ivanl.javaeye.com/blog/169918</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过6个小时的飞行，终于到达目的的,Perth WA,这里跟新加坡完全是不同的风格，出关检查就给大家一个下马威，任何食品，药品都不准带入澳大利亚，而且最近6天内如果去够南美或非洲还要受到特殊的礼遇(我们没有感受下，估计不怎么样)，澳大利亚或新西兰公民跟其他人是分不同的口出关的(难道有歧视)？perth的机场比新加坡可是小多了，只有一个航站楼，外面也不繁华，有点乡村的感觉，perth整个城市不大，人口更是少的可怜，晚上5：00后所有的店铺都关门了，街上基本上没有人，交通特别顺畅，到目前为止还没有碰到堵车的情况，我们周日早早就到了，我们索性去公司看看，公司在perth著名的经典Kings Park,环境特别Nice,跟森林公园一样，这里应该是早秋，下午3:00左右太阳特别足，但是由于海风特别湿润，走在路上根本不出汗，感觉很舒服。 <br />&nbsp;&nbsp;&nbsp;&nbsp; 我们住在喜来登酒店，按理说这个酒店也算是比较大的了，到了一看，感觉也就是中国3星级，到了酒店想洗个澡，发现酒店没有拖鞋，想想没有就将就吧，以开水龙头，还是坏的，对喜来登立刻失去了好感，叫工人来修，好久才来，他弄了半天终于放出水来了，我一弄，还是不行，最后只好换房。 <p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/169918#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Mar 2008 17:27:37 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/169918</link>
        <guid>http://ivanl.javaeye.com/blog/169918</guid>
      </item>
      <item>
        <title>第一次出国经历--转机</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/169442" style="color:red;">http://ivanl.javaeye.com/blog/169442</a>&nbsp;
          发表时间: 2008年03月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这次没出来之前，我到过的最南边的地方是北京(我是东北人)，这次一出国就跑南半球去了，目的的：澳大利亚，现在在新加坡转机呢，飞机居然晚点，闲来无事，利用飞机场无线上网在这里记录一下，离家在外，很是想念家中娇妻，唉，真是没出息呀！呜呜！<br /><br />新加坡是个非常漂亮的城市，城市非常干净，绿化率非常高，这次来新加坡转机，时间比较充裕，就坐了新加坡旅游局组织的城市观光巴士到新加坡城里逛了一圈，感觉不错，但是没能下车，只能干看看，等从澳大利亚回来我要自己去城里逛逛，亲身感受一下。<br /><br />新加坡的由于地域狭小，根本没什么资源，再加上它独特的地理位置，使得他的贸易非常发达，新加坡樟宜机场的免税店非常大，商品也非常全，虽然是免税店，但是我感觉这里的电子产品好像还没有中关村的便宜，但是这里免税店的东西肯定是行货，不会有假货。<br /><br />新加坡樟宜国际机场现在一共有3个航站楼，各个航站楼之间都有免费的skytrain,非常方便，在新加坡转机的乘客可以在新加坡逗留3天，无需另外签证，如果逗留时间短，还可以乘坐旅游观光bus到市区转一圈，还有导游，而且全程免费。<br /><br />新加坡70%都是华人，基本都会说汉语，我今天说的最多的两居英语就是。<br /><pre name="code" class="java">
if("can you speek Chinese" == true){
     //汉语bulabula
}else{
   "Thank you"
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/169442#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 09 Mar 2008 01:19:36 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/169442</link>
        <guid>http://ivanl.javaeye.com/blog/169442</guid>
      </item>
      <item>
        <title>在样式定义有冲突时的优先级如何分配</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/156500" style="color:red;">http://ivanl.javaeye.com/blog/156500</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
&lt;style>
  div{color:black}
  #demo{color:red}
  .demo{color:blue}
  .demo1{color:yellow !important}
  .demo2{color:gray}
&lt;/style>
&lt;div>color:black&lt;/div>
&lt;div class="demo">color:blue&lt;/div>
&lt;div class="demo demo2">color:gray&lt;/div>
&lt;div id="demo" class="demo">color:red&lt;/div>
&lt;div id="demo" class="demo" style="color:green">
color:green&lt;/div>
&lt;div id="demo" class="demo1" style="color:green">
color:yellow&lt;/div>
</pre><br />可以看出，以类选择符方式定义的样式的优先级最低，其实是类型选择符的，再就是ID选择符，然后到直接在对象上定义的，加了! important声明的优先级最高。<br />提示：如果还有链接外部的CSS，它的优先级是最低的。 <br /><br /><span style="font-size: x-large"><span style="color: black">特别说明</span></span><br /><br />CSS样式的优先级遵循的是就近原则，理论上的是离对象越近，优先级别越高，但需要注意的是用! important声明的优先级最高，同一方式定义的CSS则以最后定义的为准。
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/156500#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 15:31:52 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/156500</link>
        <guid>http://ivanl.javaeye.com/blog/156500</guid>
      </item>
      <item>
        <title>SVG 编程第一步</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/154348" style="color:red;">http://ivanl.javaeye.com/blog/154348</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: x-large">Supported　Browser</span><br /><br /><ul><li>Firefox 2+</li><li>Opera 9.0+</li><li>Safari 3.0+</li><li>SeaMonkey 1.1+</li></ul><br /><br /><span style="font-size: x-large">SVG Resource </span><br /><ul><li> <a href="http://blog.csdn.net/firefight/archive/2006/09/20/1253440.aspx" target="_blank">SVG 编程告诫</a></li><li> <a href="http://developer.mozilla.org/en/docs/SVG_in_Firefox" target="_blank">FireFox 对SVG 标签的支持列表</a></li><li> <a href="https://www6.software.ibm.com/developerworks/cn/education/xml/x-svg/tutorial/index.html" target="_blank">SVG Tutorial</a></li><li><a href="http://www.ibm.com/developerworks/cn/xml/x-matters40/" target="_blank">Dev with SVG</a></li><li><a href="http://www.ibm.com/developerworks/cn/xml/x-svgint/index.html" target="_blank">SVG 交互</a></li><li><a href="http://www.w3.org/TR/SVG/types.html#ColorKeywords" target="_blank">SVG 颜色介绍</a></li></ul> <br /><br />把SVG嵌入到网页中的3种方式<br /><ul><li>Use &lt;object> Tag</li><li>Use &lt;embed> Tag (Best Practice)</li><li>As embeded namespace</li></ul><br /><br /><pre name="code" class="xml">
&lt;?xml version="1.0" standalone="no"?>
&lt;!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
&lt;head>
  &lt;title>SVG as embedded object and nested namespace&lt;/title>
&lt;/head>
&lt;body>
&lt;h2>Object tag&lt;/h2>
&lt;object type="image/svg+xml" data="standalone.svg">
Your browser is currently unable to display SVG images.
&lt;/object>
&lt;h2>Nested namespace&lt;/h2>
&lt;svg:svg version="1.1" width="5cm" height="4cm"
      xmlns:svg="http://www.w3.org/2000/svg">
  &lt;svg:title>Four rectangles&lt;/svg:title>
  &lt;svg:rect x="0.5cm" y="0.5cm" width="2cm" height="1cm"/>
  &lt;svg:rect x="0.5cm" y="2cm" width="1cm" height="1.5cm"/>
  &lt;svg:rect x="3cm" y="0.5cm" width="1.5cm" height="2cm"/>
  &lt;svg:rect x="3.5cm" y="3cm" width="1cm" height="0.5cm"/>
  &lt;!-- Show outline of canvas using 'rect' element -->
  &lt;svg:rect x=".01cm" y=".01cm" width="4.98cm" height="3.98cm"
       fill="none" stroke="blue" stroke-width=".02cm" />
&lt;/svg:svg>
&lt;h2>Embed tag&lt;/h2>
&lt;embed id="svg3" src="standalone.svg" />
&lt;/body>
&lt;/html>
</pre><br /><br /><span style="font-size: x-large">SVG 中画箭头例子</span><br /><br /><pre name="code" class="xml">
&lt;?xml version="1.0" standalone="no"?>
&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" 
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
&lt;svg width="4cm" height="4cm" viewBox="0 0 400 400"
     xmlns="http://www.w3.org/2000/svg">
  &lt;desc>Markers&lt;/desc>
  &lt;defs>
    &lt;marker id="arrow"
      viewBox="0 0 10 10" refX="0" refY="5" 
      markerUnits="strokeWidth" markerWidth="3" markerHeight="10"
      orient="auto">

      &lt;path d="M 0 0 L 10 5 L 0 10 z" fill="yellow" stroke="black"/>

    &lt;/marker>
  &lt;/defs>
  &lt;rect x="1" y="1" width="398" height="300"
        fill="none" stroke="blue" />

  &lt;!-- First row -->
  &lt;path d="M75,100 c25,-75 50,50 100,0 s50,-50 150,50"
        stroke="purple" stroke-width="5" fill="none"
        marker-start="url(#arrow)"
        marker-mid="url(#arrow)"
        marker-end="url(#arrow)" />

  &lt;!-- Second row -->
  &lt;path d="M75,200 c25,-75 50,50 100,0 s50,-50 150,50"
        stroke="purple" stroke-width="3" fill="none"
        marker-start="url(#arrow)"
        marker-mid="url(#arrow)"
        marker-end="url(#arrow)" />
&lt;/svg>
</pre><br /><br />SVG 中用鼠标划线 例子<br /><br /><pre name="code" class="xml">
&lt;svg version="1.1" baseProfile="full"
     xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     xmlns:ev="http://www.w3.org/2001/xml-events" 
     width='100%' height='100%'
    onload='Init(evt)'   onmousedown='Grab(evt)'    onmousemove='Drag(evt)' onmouseup='Drop(evt)'>
   &lt;title>Drag And Drop&lt;/title>
   &lt;desc>
      A Demo to Draw line in SVG Canvas
   &lt;/desc>
   &lt;defs>
    &lt;marker id="arrow"
      viewBox="0 0 10 10" refX="0" refY="5" 
      markerUnits="strokeWidth" markerWidth="3" markerHeight="10"
      orient="auto">
      &lt;path d="M 0 0 L 10 5 L 0 10 z" fill="yellow" stroke="black"/>
    &lt;/marker>
   &lt;/defs>
   &lt;script type="text/ecmascript">&lt;![CDATA[
      var SVGDocument = null;
      var SVGRoot = null;
      var BackDrop = null;
      var isDrawLine = null;
      var gCanvas = null;
      var lineNode = null;

      function Init(evt)
      {
         SVGDocument = evt.target.ownerDocument;
         SVGRoot = SVGDocument.documentElement;

         // this will serve as the canvas over which items are dragged.
         //    having the drag events occur on the mousemove over a backdrop
         //    (instead of the dragged element) prevents the dragged element
         //    from being inadvertantly dropped when the mouse is moved rapidly
         BackDrop = SVGDocument.getElementById('BackDrop');
         gCanvas = SVGDocument.getElementById('gid');
      }

      function Grab(evt)
      {   
          lineNode=SVGDocument.createElementNS('http://www.w3.org/2000/svg','line');
          lineNode.setAttributeNS(null,'x1',evt.clientX);
          lineNode.setAttributeNS(null,'y1',evt.clientY);
          lineNode.setAttributeNS(null,'x2',evt.clientX);
          lineNode.setAttributeNS(null,'y2',evt.clientY);
          lineNode.setAttributeNS(null,'stroke','blue');
          lineNode.setAttributeNS(null,'stroke-width','2');
          BackDrop.parentNode.appendChild(lineNode);
          isDrawLine = true;
      };
      function Drag(evt)
      {
         // if we don't currently have an element in tow, don't do anything
         if (isDrawLine)
         {
            lineNode.setAttributeNS(null,'x2',evt.clientX);
            lineNode.setAttributeNS(null,'y2',evt.clientY);
            lineNode.setAttributeNS(null,'marker-end','url(#arrow)');
         }
      };
      function Drop(evt)
      {
         // if we aren't currently dragging an element, don't do anything
         if ( isDrawLine )
         {
            lineNode.setAttributeNS(null,'x2',evt.clientX);
            lineNode.setAttributeNS(null,'y2',evt.clientY);
            isDrawLine = false;
         }
      };
   ]]&gt;&lt;/script>
  &lt;g id="gid">
   &lt;rect id='BackDrop' x='-10%' y='-10%' width='110%' height='110%' fill='none' pointer-events='all' />
  &lt;/g>
&lt;/svg>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/154348#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 13:34:16 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/154348</link>
        <guid>http://ivanl.javaeye.com/blog/154348</guid>
      </item>
      <item>
        <title>EXT 中js语法请教</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/153659" style="color:red;">http://ivanl.javaeye.com/blog/153659</a>&nbsp;
          发表时间: 2008年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ext.js文件中有这样一段js代码<br /><pre name="code" class="java">
(function(){
    var ua = navigator.userAgent.toLowerCase();

    var isStrict = document.compatMode == "CSS1Compat",
        isOpera = ua.indexOf("opera") > -1,
        isSafari = (/webkit|khtml/).test(ua),
        isIE = ua.indexOf("msie") > -1,
        isIE7 = ua.indexOf("msie 7") > -1,
        isGecko = !isSafari && ua.indexOf("gecko") > -1,
        isBorderBox = isIE && !isStrict,
        isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),
        isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),
        isLinux = (ua.indexOf("linux") != -1),
        isSecure = window.location.href.toLowerCase().indexOf("https") === 0;
})();
</pre><br /><br />这段代码应该是加载后自动执行，不知道这没写的用以何在？是不是为了防止命名冲突？
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/153659#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jan 2008 14:26:36 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/153659</link>
        <guid>http://ivanl.javaeye.com/blog/153659</guid>
      </item>
      <item>
        <title>Oracle Portlet security实践</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/141855" style="color:red;">http://ivanl.javaeye.com/blog/141855</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1: 基于oid组的权限认证<br />  1.1 配置${portletName}.properties,添加如下配置<br />  <pre name="code" class="java">
        autoReload=true
	oidManager=true
	oidAdminClass=${OidAdminClass} extends oracle.portal.provider.v2.oid.OidInfo
	oidHost=${oidhostName}
	oidPort=${oidPortNumber} default is 389
	oidUser=${oidadmin user name} default is orcladmin
	oidPasswd=******
  </pre><br />  1.2 ${OidAdminClass} 可以参考一下实现<br />  <pre name="code" class="java">
   import oracle.portal.provider.v2.ProviderContext;
   import oracle.portal.provider.v2.oid.OidInfo;

   public class ${OidAdminClass}  extends OidInfo {
       
        private final String OID_HOST_PROPERTY = "oidHost";
        private final String OID_PORT_PROPERTY = "oidPort";
        private final String OID_USER_PROPERTY = "oidUser";
        private final String OID_PASSWD_PROPERTY = "oidPasswd";

        public void init(ProviderContext pc)
        {

            // This class gets its data from the deployment config file
            // deployments/oid.properties
            // 
            // The data has already been extracted and is accessible via
            // ProviderContext.  

            setLDAPHost( (String)pc.getAttribute(OID_HOST_PROPERTY) );
            setLDAPPort( (String)pc.getAttribute(OID_PORT_PROPERTY) );
            setLDAPUser( (String)"cn=" + pc.getAttribute(OID_USER_PROPERTY) );
            setLDAPPasswd( (String)pc.getAttribute(OID_PASSWD_PROPERTY) );
        }
    }
  </pre><br />  1.3 配置provider.xml<br />    <pre name="code" class="java">
          &lt;securityManager class="oracle.portal.provider.v2.security.GroupSecurityManager">
          &lt;group>cn=${group1},cn=${portalID},cn=Groups,dc=cn,dc=oracle,dc=com&lt;/group>
          &lt;group>cn=${group2},cn=${portalID},,cn=Groups,dc=cn,dc=oracle,dc=com&lt;/group>
      &lt;/securityManager>
    </pre><br />2: 自己实现portlet 认证<br />  2.1:创建类${SecurityManager} extends oracle.portal.provider.v2.security.PortletSecurityManager<br />  2.2: 实现方法public boolean hasAccess(ProviderInstance pi, PortletDefinition pd, ProviderUser user) 和        public boolean hasAccess(PortletReference ref, ProviderUser user) throws PortletNotFoundException<br />  2.3:在这个方法里可以实现自己的业务逻辑来判断当前用户能否访问指定的provider.<br />    2.4:这种方式比较灵活，可以所有的逻辑都自己控制。
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/141855#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 19:38:59 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/141855</link>
        <guid>http://ivanl.javaeye.com/blog/141855</guid>
      </item>
      <item>
        <title>自己拼的URL中的parameter值一定要用Encode</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/137126" style="color:red;">http://ivanl.javaeye.com/blog/137126</a>&nbsp;
          发表时间: 2007年10月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          碰到过2次这种问题了，swing程序中自己拼的url,然后
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/137126#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 31 Oct 2007 22:13:16 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/137126</link>
        <guid>http://ivanl.javaeye.com/blog/137126</guid>
      </item>
      <item>
        <title>当你在工作中有合作不愉快的经历时</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/132027" style="color:red;">http://ivanl.javaeye.com/blog/132027</a>&nbsp;
          发表时间: 2007年10月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看看这里<br />
<a href="http://www.pickthebrain.com/blog/resolving-conflicts-quickly-and-peacefully/" target="_blank">http://www.pickthebrain.com/blog/resolving-conflicts-quickly-and-peacefully/</a><br />
<br />
争强好胜是初级程序员的通病。。。<br />
我无意争什么东西，特别是谁的技术最NB这类无聊的话题。。。。
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/132027#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 15 Oct 2007 18:25:29 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/132027</link>
        <guid>http://ivanl.javaeye.com/blog/132027</guid>
      </item>
      <item>
        <title>Oracle Portal 个人开发经验总结</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/131929" style="color:red;">http://ivanl.javaeye.com/blog/131929</a>&nbsp;
          发表时间: 2007年10月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1：在deregister一个provider时，有可能这个provider的url已经不可用了，但是portal还是会尝试去链接provider,直到timeout,如果timeout时间比较长，deregister的时间就会很长.<br />
解决办法：先Edit Registration，把provider的链接给程一个可用的url链接，然后在deregister,这样速度会快很多。<br />
<br />
2: Export Oracle Portal Instance时，provider信息也会被导出来，但是在import时，Oracle Portal会检查要注册的Provider链接信息，如果目标机器跟源机器的Provider源不能够连通，那么导出到provider就不会被注册到目标portal instance上(我们在部署portal时就出现了这个问题，我们在内网开发的，目标机也是vpn内网)。<br />
解决办法：先把portlet部署到目标机上，然后在把本地的provider注册信息都改成目标机的url,再export,在到目标机import，这样provider注册信息就能够被导到目标机器上了。<br />
<br />
3：开发Portlet中JS问题，portlet开发不同于普通页面的开发，因为portlet很可能被加入到任意一个portal页，同时一个portlet可能被加入portal页多次，那么在portlet里写javascript时命名就注意防止命名冲突，而且如果是多人协作开发portlet时，js命名尤为重要，要有一个好的命名规则，否则就会出现portlet单个跑都没有问题，但是一放到portal上就出不来了。<br />
解决办法：使用Extjs的命名空间+好的命名规则+PDK-Java的PortletRenderRequestObj.getQualifiedParameter().<br />
<br />
4: 开发Portlet中JS引用库问题，不要在每个portlet中都引用公共JS库文件，例如prototype.js, ext-base.js等等，这样会造成js库重复引用。<br />
解决办法：把JS库应用放到HTML Template里去，在portlet里不包含基础JS库的引用。<br />
<br />
5：Ajax跨域提交问题，这个在portal开发中经常出现，因为provider很可能(大多数情况下都不是跟portal server在一台机器上)，Ajax跨域请求会出错。<br />
解决办法：创建一个AjaxProxy工程，部署到portal server上，代码详见http://ivanl.javaeye.com/blog/47910 这篇blog,在portlet中都通过ajaxProxy来进行Ajax请求调用。<br />
<br />
6：Parameter传递，前文提到过portlet打多数情况下都不会跟portal instance在一台机器上，用户请求的又都是portal page,这样在url后面加上参数是无法直接传给portlet的。<br />
解决办法：<br />
&nbsp; 6.1: 在portal page上建立参数，用来接受url中的参数。<br />
&nbsp; 6.2: 在portlet 的provider.xml里声明输入参数，准备在portlet中使用。<br />
&nbsp; 6.3: 在Portal page中的properties-&gt;parameters tab中mapping page parameter and portlet parameter.<br />
<br />
7: portlet一定是html片段，不能包含&lt;html&gt;,&lt;body&gt;等标签，我见过有人这么加过(暴汗)。<br />
<br />
8：整个页面是div+span的梦想，在portal中不能实现，因为每一个region就是一个table,Oracle poral是用table来布局的。<br />
解决办法：别想了。
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/131929#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 15 Oct 2007 14:02:00 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/131929</link>
        <guid>http://ivanl.javaeye.com/blog/131929</guid>
      </item>
      <item>
        <title>Oracle/PLSQL: Decode Function</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/130842" style="color:red;">http://ivanl.javaeye.com/blog/130842</a>&nbsp;
          发表时间: 2007年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Oracle/PLSQL, the decode function has the functionality of an IF-THEN-ELSE statement.<br /><br />The syntax for the decode function is:<br /><pre name="code" class="java">
    decode( expression , search , result [, search , result]... [, default] )
</pre><br />expression is the value to compare.<br /><br />search is the value that is compared against expression.<br /><br />result is the value returned, if expression is equal to search.<br /><br />default is optional. If no matches are found, the decode will return default. If default is omitted, then the decode statement will return null (if no matches are found).<br /><br />Applies To:<br /><br />    * Oracle 9i, Oracle 10g, Oracle 11g<br /><br /><br />For example:<br /><br />You could use the decode function in an SQL statement as follows:<br /><pre name="code" class="java">
    SELECT supplier_name,
    decode(supplier_id, 	10000, 	'IBM',
    	10001, 	'Microsoft',
    	10002, 	'Hewlett Packard',
    		'Gateway') result
    FROM suppliers;
</pre><br /><br />The above decode statement is equivalent to the following IF-THEN-ELSE statement:<br /><pre name="code" class="java">
    IF supplier_id = 10000 THEN
         result := 'IBM';

    ELSIF supplier_id = 10001 THEN
        result := 'Microsoft';

    ELSIF supplier_id = 10002 THEN
        result := 'Hewlett Packard';

    ELSE
        result := 'Gateway';

    END IF;
</pre><br /><br />The decode function will compare each supplier_id value, one by one.
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/130842#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 10 Oct 2007 17:55:59 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/130842</link>
        <guid>http://ivanl.javaeye.com/blog/130842</guid>
      </item>
      <item>
        <title>extjs初体验之Grid --- get Row/Cell Data</title>
        <author>Ivan Li</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ivanl.javaeye.com">Ivan Li</a>&nbsp;
          链接：<a href="http://ivanl.javaeye.com/blog/130806" style="color:red;">http://ivanl.javaeye.com/blog/130806</a>&nbsp;
          发表时间: 2007年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
  function rowClicked() {
  var selectionModel = grid.getSelectionModel();
  var record = selectionModel.getSelected();
  alert(record.data['is_folder']);
  }
  grid.addListener("rowclick", rowClicked);
</pre><br />这个function 也可以写成匿名函数
          <br/>
          <span style="color:red;">
            <a href="http://ivanl.javaeye.com/blog/130806#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 10 Oct 2007 16:08:20 +0800</pubDate>
        <link>http://ivanl.javaeye.com/blog/130806</link>
        <guid>http://ivanl.javaeye.com/blog/130806</guid>
      </item>
  </channel>
</rss>