Sunday, December 31, 2006

22 Dec 2006 Christmas for Folks的活动报告

(懒了很久。今天心情好,赶快写一个活动报告…)

上次我自告奋勇说要加入策划服务中心的活动,22 Dec的 Christmas for Folks就是第一个。

不过后来也没有什么策划到。活动的大概一个星期前,我去服务中心找 Seow Hong 开会,Seow Hong 已经把流程都安排好了。11am布置,12 - 2pm活动。

Seow Hong说,我负责游戏就可以了。惨,我要想给年长者的游戏。年长者的行动迟缓,游戏要慢,不用移动,大家都能玩的。难过,怎样想? 而且我最怕用脑想了。幸好 Seow Hong 提议了传东西的概念,我们激荡讨论了之后,出了两个游戏。

所以活动的细节如下:
5-10分钟  牧师讲圣诞节的故事
15分钟   传气球游戏 (1)
1小时   吃午饭
15分钟   唱圣诞歌
15分钟   用吸水管传胶圈游戏 (2) (Optional)
10分钟   交换礼物

(1) 年长者随着音乐传气球。音乐停止,谁手上有气球,牧师就发问。问题来自之前讲的圣诞节故事。

(2) 分组竞争用吸水管传胶圈。(后来发现,给年长者分组其实很麻烦。不过我已经设计出一个适合团体围圆圈玩游戏的阵法。改天才写。)

过了一个平静的礼拜,活动当天,刚好也是冬至。那天风很大,布置圣诞节的饰物有点麻烦。当年长者和食物(很多食物,包括汤圆) 陆陆续续到达之后,活动开始。Seow Hong 直接把麦克风交给我,说你去主持吧。我傻眼,我几时是主持人了? 还有,牧师勒? Seow Hong 说没有牧师,直接玩传气球游戏。

要命,我没有主持经验。但说什么我都是受过 YAH 培训的催化员,所以我二话不说,就跳出去假装一下。所以之后讲话含糊不清,没有条理,中英并用,到底合不合格? 我不知道,只有 Tricia 知道。

没有牧师讲故事在先,我不知道要如何处罚年长者,要罚他们讲圣诞节故事吗? 幸好这些年长者有些是 K 歌和舞蹈高手,请他们上来唱歌跳舞,还行。主持过程中,脑里面我回忆陈树承如何主持普威之夜,所以后来我第一个问题就问他们的名字,那里来,怎样来。不然,空空洞洞的,冷场,我不知道要和年长者讲什么。

除了开头的这个意外,其他的吃午饭,唱圣诞歌,传胶圈游戏,交换礼物的流程就如计划进行。当然,进程颠簸,不过还可以。

照片:
http://picasaweb.google.com/yangchengsoon

回馈:
1. 饭,应该不要淋太多汤汁,因为纸盘都软了。
2. 如果有行动不便或记忆力不好的年长者,我们可以请义工特别盯住他们。

Tuesday, December 12, 2006

OracleAS1012 vs OracleAS1013

A minor version difference between the number 1012 and 1013, however the underlying mechanisms and libraries have huge changes.

AS1012AS1013
JDK Version1.4.21.5
JDBC Versionclasses12.jarojdbc14.jar
Corresponding JDeveloper VersionJDeveloper 1012JDeveloper 1013
ClusteringManual joining server farm via EMDynamic Discovery with broadcasting address in opmn.xml
JSF SupportNeed extra tweakingSupported
WEB-INF/web.xml (plain)Define namespace such as xmlns:xsi, xsi:schemaLocation, etc, which is not compatible with AS1012
Misc Java librariesWorking with JDK1.4.2Working with JDK1.5. Not completely compatible with AS1012.
Startupopmnctl and emctlopmnctl

Enterprise Manager

http://machine:1810http://machine/em

The above are the list of difference I have encountered.

What it means is that, at this point of time when you develop web application, you need to explicitly synchronize Oracle AS version and environment.

For example, you use JDeveloper 1013 to develop web application and deploy it into OracleAS1013 only. If you try to deploy it into AS1012, it is very problematic. You need to manually edit web.xml and bundle older underlying libraries (such as classes12.jar) into your EAR file.

Friday, December 08, 2006

Burning CD for Linux and in Linux

Reference:
1. http://linuxlab.dk/tipsntricks/cdburning
2. http://sourceforge.net/projects/jcdwriter/

Burning CD/DVD for Linux and in Linux is quite a challenging experience.

Oracle softwares are downloaded in cpio format and come in multiple disks. It is disk space and time consuming to extract each cpio each time. So, my idea is to create 1 DVD to consist of all multiple CDs, hence save the trouble to swap disks.

For example, DVD_ROOT:
+ AS1012
+ Disk1
+ Disk2
+ Disk3
+ Disk4
+ AS1013
+ Disk1

Intuitively I simply extracted cpio in Linux, ftp the extracted files to Windows, then use Roxio CD Creator to burn DVD.

Problem: Windows-burned DVD has lost the ownership and execution privilege of all files. I cannot simply “runInstaller” off the DVD. The DVD is useless.

Hence, the next plan is to burn DVD directly on Linux and hope that Linux will keep the correct execution privilege.

By default, Linux has already come with 2 command line utilities to produce CD/DVD:
1. mkisofs - create the iso image of the files.
2. cdrecord - burn CD from iso image.

There are 3 steps to produce CD in Linux:

1. Produce ISO image.

% mkisofs -graft-point -R -J -l -D -o /tmp/filename.iso /AS1012/=/tmp/OracleAS/AS1012/ /AS1013/=/tmp/OracleAS/AS1013/

... where,
-J : Generate Joliet directory records in addition to regular iso9660 file names. This is primarily useful when the discs are to be used on Windows-NT or Windows-95 machines. The Joliet filenames are specified in Unicode and each path component can be up to 64 Unicode characters long.

-l: Allow full 31 character filenames.

-D: Do not use deep directory relocation, and instead just pack them in the way we see them.

The above 3 arguments are necessary. Otherwise default Linux-burned CD will have seriously messed-up filename (capitalized and truncated) and directory structure (relocated deep directory).

2. Detect the CD-Writer.

% cdrecord -scanbus
Cdrecord-Clone 2.01-dvd (i686-pc-linux-gnu) Copyright (C) 1995-2004 JÃrg Schilling
Note: This version is an unofficial (modified) version with DVD support
scsibus2:
2,0,0 200) '_NEC ' 'DVD_RW ND-1300A ' '1.0B' Removable CD-ROM
2,1,0 201) *
2,2,0 202) *
2,3,0 203) *
2,4,0 204) *
2,5,0 205) *
2,6,0 206) *
2,7,0 207) *


3. Burn CD from ISO image.

% cdrecord -v dev=2,0,0 speed=2 --eject /tmp/filename.iso

... where
dev=devicename:scsibus,target,lun is the id of the CD-Writer scanned from step 2.
--eject: Eject after burned CD.

Thursday, November 30, 2006

Run AutoConfig to change hostname for E-Business Suite

Oracle E-Business Suite is dependent on hostname. User can easily change the IP of the machine, but user cannot anyhow change the hostname of the machine. To change the hostname, we need to run AutoConfig on E-Business Suite.

First, startup dbTier. AppTier is not required at all in the whole process.

FOR DATABASE TIER:
Note:338003.1 How to change the hostname and/or port of the Database Tier using AutoConfig

1. Login as oracle user.

2. De-register the current database server.
perl $ORACLE_HOME/appsutil/bin/adgentns.pl appspass=apps contextfile=$CONTEXT_FILE -removeserver

3. Update AutoConfig Context file with new host information. Edit $CONTEXT_FILE directly.
* Copy $CONTEXT_FILE to a new context file.
cp /opt/oracle/product/10.1.0/db/appsutil/PROD_<oldhost>.xml
/opt/oracle/product/10.1.0/db/appsutil/PROD_<newhost>.xml
* Edit /opt/oracle/product/10.1.0/db/appsutil/PROD_<newhost>.xml directly.
- Replace all <oldhost> to <newhost>
- Replace all <olddomain.com> to <newdomain.com>

4. Change hostname.
- Execute "system-config-network" to change the new hostname for the machine.
- Edit /etc/hosts with "newhost.newdomain.com ip newhost".

(After changing hostname, you'll not be able to startup any graphical application such as xclock due to "Xlib: connection to :0.0 refused by server". You can press "ctrl + alt + backspace" to kill x server.)

5. Execute AutoConfig for dbTier.
cd $ORACLE_HOME/appsutil/bin/
./adconfig.sh contextfile=$ORACLE_HOME/appsutil/PROD_<newhost>.xml


FOR APPS TIER:
Note:341322.1 How to change the hostname of an Applications Tier using AutoConfig

1. Login as applmgr user.

2. De-register the current apps server.
perl $AD_TOP/bin/adgentns.pl appspass=apps contextfile=$CONTEXT_FILE -removeserver

3. Update AutoConfig Context file with new host information. It is easier to edit $CONTEXT_FILE directly.
* Copy $CONTEXT_FILE to a new context file.
cp /opt/oracle/apps/prodappl/admin/PROD_<oldhost>.xml
/opt/oracle/apps/prodappl/admin/PROD_<newhost>.xml
* Edit /opt/oracle/apps/prodappl/admin/PROD_<newhost>.xml directly.
- Replace all <oldhost> to <newhost>
- Replace all <olddomain.com> to <newdomain.com>

4. Execute AutoConfig for appTier.
cd $AD_TOP/bin
./adconfig.sh contextfile=/opt/oracle/apps/prodappl/admin/PROD_<newhost>.xml appspass=apps


FINISHING TASK:

AutoConfig doesn't convert E-Business Suite completely. Some settings may remain unchanged or reset to default. So, it is required to go check the configuration as described in Cloning Guide.

Identified steps are:

1. As applmgr, vi /opt/oracle/apps/prodappl/admin/adgetlnxver.sh to ensure ctxfile is pointing to correct PROD_<newhost>.xml file.
ctxfile="/opt/oracle/apps/prodappl/admin/PROD_htb.xml"

2. As applmgr user, vi $IAS_ORACLE_HOME/Apache/Jserv/etc/jserv.properties to ensure:
wrapper.bin.parameters=-Djava.awt.headless=true
wrapper.bin.parameters=-DAdaptorCatalog=/opt/oracle/apps/prodappl/au/11.5.0/java/catalog.xml
wrapper.bin.parameters=-DClientMode=local

3. As oracle user, do the following:
$ sqlplus apps/apps
sql> update icx_parameters set session_cookie_domain='newdomain.com';
sql> conn applsys/apps
sql> select profile_option_value from fnd_profile_option_values where profile_option_value like '%oldhost%';
sql> update fnd_profile_option_values set profile_option_value='/opt/oracle/db/proddb/9.2.0/appsutil/outbound/PROD_newhost' where profile_option_value like '%oldhost%';

3 rows will be updated.
sql> exit;

Done. You can startup AppTier now and access E-Business Suite login page at http://newhost.newdomain.com:8000.

Tuesday, November 21, 2006

Ask VMWare to generate unique id (UUID)

Last month, the company updated the physical network configuration. The VMWare instance experienced a mysterious problem - VMWare instance could access the outside world, but outside world could not ping it.

I have tested static IP, DHCP, configured this VMWare instance to use valid IP of other machine (while shutting that machine down), extracted the old backup version of this VMWare instance, etc. A colleague told me he encountered this issue before. What to do is, while this VMWare instance executes "ping ..." to outside world, then outside world can ping it but with 50% packet lost. This is still mysterious and not acceptable.

I recalled, when VMWare starts up the vm instance, it would ask whether to generate unique id (universally unique identifier) for the vmware instance. This step gives the virtual machine's Ethernet card a new MAC address, to prevent address conflicts with other people using this virtual machine.

However I have chosen the option to always keep the uuid, how do I ask VMWare to ask me to create the uuid again?

Reference: http://www.vmware.com/support/gsx3/doc/manage_uuid_gsx.html

1. In the folder that contains VMWare files, look for .vmx file. It is a plain text file that contains setting of the vm instance.
2. Copy .vmx to other name, e.g. file2.vmx.
3. Edit file2.vmx to remove the line, which contains “uuid.action”.Start VMWare to load file2.vmx, VMWare will ask you to create uuid again.

Wednesday, November 15, 2006

SSL-enabled AS1013

By default, AS1013 is already SSL-enabled with dummy certificate. And it is listening port 4443.
So you can access your web application via https://HOST:4443. Click the bottom right hand side lock icon in IE to view the certificate is dummy.

In Linux, reference http://download-west.oracle.com/docs/cd/B25221_04/web.1013/b25211/ssl.htm to properly generate a valid SSL certificate via Oracle Wallet Manager (owm).

However, the document stops at successfully installation of certificate only. It doesn't explain how to access the web application simply via httpS://HOST (without specifying port).

We need to do the following:

1. Edit AS/Apache/Apache/conf/ssl.conf to load the correct certificate. For example,
SSLWallet = (where you install the SSL certificate) e.g /etc/ORACLE/WALLETS/oracle

2. Redirection 4443 to 443.
In Linux, ports below 1024 need to be executed by root priviledge. The simplest way is to use iptables command to redirect uncommon 4443 to common SSL port 443.

Edit /etc/rc.d/rc.local to include the following:
iptables -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j REDIRECT --to-port 4443

3. If you want to force the web server to always serve https. Meaning, when user access http://HOST/anything, they will be routed to httpS://HOST/anything automatically.
(Reference:http://forums.oracle.com/forums/thread.jspa?messageID=1430117?)

Edit AS/Apache/Apache/conf/httpd.conf to include the following:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

Friday, November 03, 2006

Oracle AS class loading sequence

We use a simple JSP page to show the classpath in Application Server.
<html>
<body>
<p>Show CLASSPATH: [<%= System.getProperty("java.class.path") %>]</p>
</body>
</html>


Show CLASSPATH: [oc4j.jar:
/opt/oracle/AS1012/j2ee/home/lib/ejb.jar:
/opt/oracle/AS1012/j2ee/home/lib/servlet.jar:
/opt/oracle/AS1012/j2ee/home/lib/ojsp.jar:
/opt/oracle/AS1012/j2ee/home/lib/jndi.jar:
/opt/oracle/AS1012/j2ee/home/lib/jdbc.jar:
/opt/oracle/AS1012/j2ee/home/iiop.jar:
/opt/oracle/AS1012/j2ee/home/iiop_gen_bin.jar:
/opt/oracle/AS1012/j2ee/home/lib/jms.jar:
/opt/oracle/AS1012/j2ee/home/lib/jta.jar:
/opt/oracle/AS1012/j2ee/home/lib/jmxri.jar:
/opt/oracle/AS1012/j2ee/home/lib/javax77.jar:
/opt/oracle/AS1012/j2ee/home/lib/javax88.jar:
/opt/oracle/AS1012/j2ee/home/../../opmn/lib/ons.jar:
/opt/oracle/AS1012/j2ee/home/../../opmn/lib/optic.jar:
/opt/oracle/AS1012/j2ee/home/../../lib/dms.jar:
/opt/oracle/AS1012/j2ee/home/../../dms/lib/dms.jar:
/opt/oracle/AS1012/j2ee/home/../../diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/j2ee/home/../../dms/diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/j2ee/home/lib/connector.jar:
/opt/oracle/AS1012/j2ee/home/lib/bcel.jar:
/opt/oracle/AS1012/j2ee/home/lib/cos.jar:
/opt/oracle/AS1012/j2ee/home/lib/jsse.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/lib/jsse.jar:
/opt/oracle/AS1012/j2ee/home/lib/jnet.jar:
/opt/oracle/AS1012/j2ee/home/lib/jcert.jar:
/opt/oracle/AS1012/j2ee/home/lib/activation.jar:
/opt/oracle/AS1012/j2ee/home/lib/mail.jar:
/opt/oracle/AS1012/j2ee/home/../../javavm/lib/jasper.zip:
/opt/oracle/AS1012/j2ee/home/../../lib/xmlparserv2.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/lib/xmlparserv2.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/orai18n.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/orai18n.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaxp.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaas.jar:
/opt/oracle/AS1012/j2ee/home/jazn.jar:
/opt/oracle/AS1012/j2ee/home/../../jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/j2ee/home/../../jdbc/lib/nls_charset12.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jdbc/lib/nls_charset12.jar:
/opt/oracle/AS1012/j2ee/home/jaxb-rt-1.0-ea.jar:
/opt/oracle/AS1012/j2ee/home/../../soap/lib/soap.jar:
/opt/oracle/AS1012/j2ee/home/../../webservices/lib/wsserver.jar:
/opt/oracle/AS1012/j2ee/home/../../webservices/lib/wsdl.jar:
/opt/oracle/AS1012/j2ee/home/../../rdbms/jlib/aqapi.jar:
/opt/oracle/AS1012/j2ee/home/lib/jem.jar:
/opt/oracle/AS1012/j2ee/home/../../javacache/lib/cache.jar:
/opt/oracle/AS1012/j2ee/home/lib/http_client.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/jssl-1_1.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/jssl-1_1.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/repository.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/repository.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaasmodules.jar:
/opt/oracle/AS1012/j2ee/home/../../sqlj/lib/runtime12ee.jar:
/opt/oracle/AS1012/j2ee/home/../../sqlj/lib/translator.jar:
/opt/oracle/AS1012/j2ee/home/lib/crimson.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcs.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcs.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcp.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcp.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpse.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpse.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpsmime.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpsmime.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcms.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcms.jar::
/opt/oracle/AS1012/j2ee/home/applib:
/opt/oracle/AS1012/jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/jlib/oraclepki.jar:
/opt/oracle/AS1012/jlib/ojpse.jar:
/opt/oracle/AS1012/jlib/ldapjclnt10.jar:
/opt/oracle/AS1012/jlib/netcfg.jar:
/opt/oracle/AS1012/jlib/jssl-1_1.jar:
/opt/oracle/AS1012/jlib/javax-ssl-1_1.jar:
/opt/oracle/AS1012/jlib/orai18n.jar:
/opt/oracle/AS1012/owm/jlib/owm-3_0.jar:
/opt/oracle/apps/prodcomn/java:
/opt/oracle/apps/prodcomn/java/xmlparserv2.zip:
/opt/oracle/apps/prodcomn/java/ieoservers.zip:
/opt/oracle/apps/prodcomn/java/jbojdbcpatch.zip:
/opt/oracle/apps/prodcomn/java/cache.zip:
/opt/oracle/apps/prodcomn/java/bc4jdatum817.zip:
/opt/oracle/apps/prodcomn/java/jdev-rt.zip:
/opt/oracle/apps/prodcomn/java/fndoam.zip:
/opt/oracle/apps/prodcomn/java/nls_charset11.zip:
/opt/oracle/apps/prodcomn/java/jbodatum111.jar:
/opt/oracle/apps/prodcomn/java/aqapi.zip:
/opt/oracle/apps/prodcomn/java/ieoall.zip:
/opt/oracle/apps/prodcomn/java/xdoparser.zip:
/opt/oracle/apps/prodcomn/java/sax2.zip:
/opt/oracle/apps/prodcomn/java/appsborg.zip:
/opt/oracle/apps/prodcomn/java/F1J7Swing.jar:
/opt/oracle/apps/prodcomn/java/bipres.zip:
/opt/oracle/apps/prodcomn/java/jdbc14.zip:
/opt/oracle/apps/prodcomn/java/servlet.zip:
/opt/oracle/apps/prodcomn/java/ojdigsig.zip:
/opt/oracle/apps/prodcomn/java/loadjava.zip:
/opt/oracle/apps/prodcomn/java/jdbc12.zip:
/opt/oracle/apps/prodcomn/java/graphbuilder.zip:
/opt/oracle/apps/prodcomn/java/appsborg2.zip:
/opt/oracle/apps/prodcomn/java/xmlparserv2-904.zip:
/opt/oracle/apps/prodcomn/java/fwkToolbox.zip:
/opt/oracle/apps/prodcomn/java/nls_charset12.zip:
/opt/oracle/apps/prodcomn/java/owa.zip:
/opt/oracle/apps/prodcomn/java/HTBGateway.zip:
/opt/oracle/apps/prodcomn/java/jdbc111.zip:
/opt/oracle/apps/prodcomn/java/jmscommon.zip:
/opt/oracle/AS1012/BC4J/lib:
/opt/oracle/AS1012/BC4J/lib/collections.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jdomorcl.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jimdomains.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jmt.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jct.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jmtejb.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jctejb.jar:
/opt/oracle/AS1012/BC4J/lib/adfm.jar:
/opt/oracle/AS1012/BC4J/lib/adfmtl.jar:
/opt/oracle/AS1012/BC4J/lib/adfmweb.jar:
/opt/oracle/AS1012/jlib/ojmisc.jar:
/opt/oracle/AS1012/ord/jlib/ordim.jar:
/opt/oracle/AS1012/ord/jlib/ordhttp.jar:
/opt/oracle/AS1012/jlib/jdev-cm.jar:
/opt/oracle/AS1012/lib/dsv2.jar:
/opt/oracle/AS1012/lib/xsu12.jar::
/opt/oracle/AS1012/j2ee/home/applications/SessionTest/sessiontest/WEB-INF/classes:
/opt/oracle/AS1012/j2ee/home/applications/SessionTest/sessiontest/WEB-INF/lib/htbclnt.jar
]

... in fact, how do you feel? I feel very bad about so many irrelevant libaries were loaded in AS by default. No wonder AS has huge memory requirement. And next bad thing is, my application (SessionTest) libraries only appear at the end of the CLASSPATH.

This has caused one major problem. For example, if my application needs a particular version of classes12dms.zip JDBC library (because Oracle has released so many version of JDBC drivers, I have problem with RMI Serialization), AS will never be able to load my needed classes12dms.zip because there are so many JDBC libraries existing ahead.

So, I need to force AS to load my application libraries (in classes and lib folder).

In JDeveloper1012, we'll go New->General->Deployment Descriptors->orion-web.xml. Update the file with:
<orion-web-app servlet-webdir="/">
<web-app-class-loader search-local-classes-first="true"/>
</orion-web-app>


Then, deploy the application again. And we'll see what happens to the class loading sequence:

Show CLASSPATH: [:
/opt/oracle/AS1012/j2ee/home/applications/SessionTest/sessiontest/WEB-INF/classes:
/opt/oracle/AS1012/j2ee/home/applications/SessionTest/sessiontest/WEB-INF/lib/htbclnt.jar
:
oc4j.jar:/opt/oracle/AS1012/j2ee/home/lib/ejb.jar:
/opt/oracle/AS1012/j2ee/home/lib/servlet.jar:
/opt/oracle/AS1012/j2ee/home/lib/ojsp.jar:
/opt/oracle/AS1012/j2ee/home/lib/jndi.jar:
/opt/oracle/AS1012/j2ee/home/lib/jdbc.jar:
/opt/oracle/AS1012/j2ee/home/iiop.jar:
/opt/oracle/AS1012/j2ee/home/iiop_gen_bin.jar:
/opt/oracle/AS1012/j2ee/home/lib/jms.jar:
/opt/oracle/AS1012/j2ee/home/lib/jta.jar:
/opt/oracle/AS1012/j2ee/home/lib/jmxri.jar:
/opt/oracle/AS1012/j2ee/home/lib/javax77.jar:
/opt/oracle/AS1012/j2ee/home/lib/javax88.jar:
/opt/oracle/AS1012/j2ee/home/../../opmn/lib/ons.jar:
/opt/oracle/AS1012/j2ee/home/../../opmn/lib/optic.jar:
/opt/oracle/AS1012/j2ee/home/../../lib/dms.jar:
/opt/oracle/AS1012/j2ee/home/../../dms/lib/dms.jar:
/opt/oracle/AS1012/j2ee/home/../../diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/j2ee/home/../../dms/diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/j2ee/home/lib/connector.jar:
/opt/oracle/AS1012/j2ee/home/lib/bcel.jar:
/opt/oracle/AS1012/j2ee/home/lib/cos.jar:
/opt/oracle/AS1012/j2ee/home/lib/jsse.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/lib/jsse.jar:
/opt/oracle/AS1012/j2ee/home/lib/jnet.jar:
/opt/oracle/AS1012/j2ee/home/lib/jcert.jar:
/opt/oracle/AS1012/j2ee/home/lib/activation.jar:
/opt/oracle/AS1012/j2ee/home/lib/mail.jar:
/opt/oracle/AS1012/j2ee/home/../../javavm/lib/jasper.zip:
/opt/oracle/AS1012/j2ee/home/../../lib/xmlparserv2.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/lib/xmlparserv2.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/orai18n.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/orai18n.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaxp.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaas.jar:
/opt/oracle/AS1012/j2ee/home/jazn.jar:
/opt/oracle/AS1012/j2ee/home/../../jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/j2ee/home/../../jdbc/lib/nls_charset12.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jdbc/lib/nls_charset12.jar:
/opt/oracle/AS1012/j2ee/home/jaxb-rt-1.0-ea.jar:
/opt/oracle/AS1012/j2ee/home/../../soap/lib/soap.jar:
/opt/oracle/AS1012/j2ee/home/../../webservices/lib/wsserver.jar:
/opt/oracle/AS1012/j2ee/home/../../webservices/lib/wsdl.jar:
/opt/oracle/AS1012/j2ee/home/../../rdbms/jlib/aqapi.jar:
/opt/oracle/AS1012/j2ee/home/lib/jem.jar:
/opt/oracle/AS1012/j2ee/home/../../javacache/lib/cache.jar:
/opt/oracle/AS1012/j2ee/home/lib/http_client.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/jssl-1_1.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/jssl-1_1.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/repository.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/repository.jar:
/opt/oracle/AS1012/j2ee/home/lib/jaasmodules.jar:
/opt/oracle/AS1012/j2ee/home/../../sqlj/lib/runtime12ee.jar:
/opt/oracle/AS1012/j2ee/home/../../sqlj/lib/translator.jar:
/opt/oracle/AS1012/j2ee/home/lib/crimson.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcs.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcs.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcp.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcp.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpse.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpse.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpsmime.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpsmime.jar:
/opt/oracle/AS1012/j2ee/home/../../jlib/ojpcms.jar:
/opt/oracle/AS1012/j2ee/home/../../oracle/jlib/ojpcms.jar::
/opt/oracle/AS1012/j2ee/home/applib:
/opt/oracle/AS1012/jdbc/lib/classes12dms.jar:
/opt/oracle/AS1012/diagnostics/lib/ojdl.jar:
/opt/oracle/AS1012/jlib/oraclepki.jar:
/opt/oracle/AS1012/jlib/ojpse.jar:
/opt/oracle/AS1012/jlib/ldapjclnt10.jar:
/opt/oracle/AS1012/jlib/netcfg.jar:
/opt/oracle/AS1012/jlib/jssl-1_1.jar:
/opt/oracle/AS1012/jlib/javax-ssl-1_1.jar:
/opt/oracle/AS1012/jlib/orai18n.jar:
/opt/oracle/AS1012/owm/jlib/owm-3_0.jar:
/opt/oracle/apps/prodcomn/java:
/opt/oracle/apps/prodcomn/java/xmlparserv2.zip:
/opt/oracle/apps/prodcomn/java/ieoservers.zip:
/opt/oracle/apps/prodcomn/java/jbojdbcpatch.zip:
/opt/oracle/apps/prodcomn/java/cache.zip:
/opt/oracle/apps/prodcomn/java/bc4jdatum817.zip:
/opt/oracle/apps/prodcomn/java/jdev-rt.zip:
/opt/oracle/apps/prodcomn/java/fndoam.zip:
/opt/oracle/apps/prodcomn/java/nls_charset11.zip:
/opt/oracle/apps/prodcomn/java/jbodatum111.jar:
/opt/oracle/apps/prodcomn/java/aqapi.zip:
/opt/oracle/apps/prodcomn/java/ieoall.zip:
/opt/oracle/apps/prodcomn/java/xdoparser.zip:
/opt/oracle/apps/prodcomn/java/sax2.zip:
/opt/oracle/apps/prodcomn/java/appsborg.zip:
/opt/oracle/apps/prodcomn/java/F1J7Swing.jar:
/opt/oracle/apps/prodcomn/java/bipres.zip:
/opt/oracle/apps/prodcomn/java/jdbc14.zip:
/opt/oracle/apps/prodcomn/java/servlet.zip:
/opt/oracle/apps/prodcomn/java/ojdigsig.zip:
/opt/oracle/apps/prodcomn/java/loadjava.zip:
/opt/oracle/apps/prodcomn/java/jdbc12.zip:
/opt/oracle/apps/prodcomn/java/graphbuilder.zip:
/opt/oracle/apps/prodcomn/java/appsborg2.zip:
/opt/oracle/apps/prodcomn/java/xmlparserv2-904.zip:
/opt/oracle/apps/prodcomn/java/fwkToolbox.zip:
/opt/oracle/apps/prodcomn/java/nls_charset12.zip:
/opt/oracle/apps/prodcomn/java/owa.zip:
/opt/oracle/apps/prodcomn/java/HTBGateway.zip:
/opt/oracle/apps/prodcomn/java/jdbc111.zip:
/opt/oracle/apps/prodcomn/java/jmscommon.zip:
/opt/oracle/AS1012/BC4J/lib:
/opt/oracle/AS1012/BC4J/lib/collections.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jdomorcl.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jimdomains.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jmt.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jct.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jmtejb.jar:
/opt/oracle/AS1012/BC4J/lib/bc4jctejb.jar:
/opt/oracle/AS1012/BC4J/lib/adfm.jar:
/opt/oracle/AS1012/BC4J/lib/adfmtl.jar:
/opt/oracle/AS1012/BC4J/lib/adfmweb.jar:
/opt/oracle/AS1012/jlib/ojmisc.jar:
/opt/oracle/AS1012/ord/jlib/ordim.jar:
/opt/oracle/AS1012/ord/jlib/ordhttp.jar:
/opt/oracle/AS1012/jlib/jdev-cm.jar:
/opt/oracle/AS1012/lib/dsv2.jar:
/opt/oracle/AS1012/lib/xsu12.jar:]

Yes. Mission accomplished. AS is loading my application libraries first.

Monday, October 30, 2006

Oracle AS101202 Installation Step on RHEL4

Oracle AS 1012.02 installation step on RHEL4 is summarized from Reference: Oracle® Application Server Quick Installation Guide 10g Release 2 (10.1.2) for Linux x86
http://download-west.oracle.com/docs/cd/B14099_19/linux.1012/quickinstall.1012/quickinstall/toc.htm

1) System hardware requirement.
Skip. No need to check, the runInstaller script will check for you.

2) Software dependency. Cut and paste the following command.
$ rpm -q glibc glibc-common binutils gcc gcc-c++ libstdc++ libstdc++-devel openmotif21 pdksh setarch make gnome-libs sysstat compat-db control-center xscreensaver
$ rpm -qa grep compat-libstdc++

3) Edit Kernel Parameters.

Execute $ ulimit -Hn
If the value is less than 65536, edit /etc/security/limits.conf
* soft nproc 2047
* hard nproc 16384
* soft nofile 2048
* hard nofile 65536

Edit /etc/sysctl.conf to include the following:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 256 32000 100 142
fs.file-max = 131072
kernel.msgmni = 2878
kernel.msgmax = 8192
kernel.msgmnb = 65535

4) Edit /etc/hosts such that the machine has a proper domain name.
Eg. 10.206.100.76 as1012.domain.com as1012

5) As root, add oracle user and oinstall group.
# /usr/sbin/groupadd oinstall
# /usr/sbin/useradd -g oinstall oracle

Set password for newly created user,
# passwd oracle

6) As root user, execute xhost + to enable any user to startup graphical interface.

7) As oracle user, execute /media/cdrom/disk1/runInstaller

Saturday, October 28, 2006

Oracle AS - Clustering and remove clustering for AS1013

Enable Clustering
Reference: http://www.oracle.com/technology/products/ias/hi_av/Dynamic%20Routing.htm

In AS1013 we do not need to explicitly select multiple nodes via EM to join them into a cluster. However we configure a broadcasting address to opmn.xml of different nodes, different nodes will discover each other automatically and join as a cluster.

E.g. Running the following command for each node.
$ opmnctl config topology update discover "*225.0.0.20:8001"
$ opmnctl reload

The above command will update AS1013/opmn/conf/opmn.xml file with the following entry:

<topology>
<discover list="*225.0.0.20:8001">
</topology>


To see the cluster status in terminal,
$ opmnctl @cluster status -l

To see the individual application status,
$ opmnctl status -l -app

To see more usage of opmnctl command,
$ opmnctl usage config

When you login EM, at some point it will prompt you that only 1 EM should exist to rule the rest of AS instances.

Remove Clustering
To remove the instance from cluster, we'll execute the following command in that instance.
$ opmnctl config topology delete discover "*225.0.0.20:8001"
$ opmnctl reload
(Note: obtain the discover broadcasting value from AS1013/opmn/conf/opmn.xml)

Immediately it'll be out from the cluster.

As a stand-alone instance, it'll need to have EM running so that we can manage it easily. To explicitly startup EM, execute the following:
$ opmnctl startproc ias-component=OC4J application=ascontrol

Thursday, August 10, 2006

VNC related

Changing VNC Password
Reference: http://www.die.net/doc/linux/man/man1/vncpasswd.1.html

It is very easy to update VNC Password.
% /usr/bin/vncpasswd

Thursday, July 27, 2006

Incapable management

Reference: http://www.ftchinese.com/sc/story.jsp?id=001005847

张庆洲的报告文学《唐山警示录——七·二八大地震漏报始末》
... ...
经过七年的不懈的调查,张庆洲吃惊的发现,那场造成超过24万人死亡的唐山地震,在发生前早已被不同地震监测者的预报出来,从开滦马家沟矿的工程师马希融,唐山地震办公室的杨友寰,乐亭红卫中学的观测点,到国家地震局的科学家汪成民,关于唐山即将发生大地震的预测在7月28日之前,一直不断被确认着,直到地震发生前的9个小时,马希融还在向上级单位作出强震临震的预报。

所有的警告都在向上传递的过程中都被漠视了,而没有来自上级的批准,任何行动都又是被禁止的,以至于为了召开一次一拖再拖的震情讨论会,汪成民不得不在7月22日将一张大字报贴到了国家地震局局长办公室的门上...

This article shows how severe it is, if the management is incapable:
1. Incapable management will ignore problem.
2. Incapable management will delay and prevent capable people from working effectively.
3. Without management approval and support, regardless how people shouting and jumping, nothing is gonna work.

BiZ - 商业计划书 Business Plan

Reference: http://chn.blogbeta.com/170.html

Be it as big as a business plan, or as small as starting an IT project, the questions we need to answer are similar.

下面是那些应该解答的问题:
1) 你的眼光是什么?
* 你的远见是什么?
* 你要解决什么问题?对象是谁?
* 你将来想要成为什么样的人?
2) 你的市场机会是什么?市场有多大?
* 您目标的市场有多大?发展有多快?
* 这个市场有多成熟,或多不成熟?
* 你是否有资本成为这个市场前两三位?
3) 介绍你的产品和服务
* 你的产品或服务是什么?
* 解决了用户的什么问题?
* 你的产品或服务有什么特别之处?
4) 你的用户是谁?
* 谁是现在的用户?
* 谁是目标的用户?
* 理想的用户是什么样的?
* 谁会付费?
* 介绍一下某个具体用户的例子
5) 你的价值主张是什么?
* 你给用户提供了什么价值?
* 使用/买你的产品,用户的投资回收率是什么?
* 你解决了什么问题?
* 你是销售维他命,阿司匹林,还是消炎药?(奢侈品,有益的东西,还是必需品?)
6) 你如何销售?
* 销售程序是什么?周期有多长?
* 你的销售和市场方针是什么?
* 你当前的销售链是什么?
7) 你怎么吸引客户?
* 争取每个用户要花费多少钱?
* 在不同时期这个费用是否不同?为什么?
* 用户的永久价值什么?
8) 你的管理团队有谁?
* 你的管理团队有谁?
* 他们有什么经验?
* 欠缺那些环节?有什么计划去弥补?
9) 你的收入模式是什么?
* 如何赚钱
* 你的收入模式
* 需要怎样才能盈利?
10) 你现在进展到哪一步?
* 你现在进展到哪一步了?技术/产品?团队?财务/营收?
* 现在进展情况如何?现状和前景是否更清晰了?
* 你将来的计划是什么?
11) 你的融资计划是什么?
* 已经得到了什么投资?
* 希望得到多少投资?比例如何?
* 资金用在什么地方?
* 资金可以支持多久?到那时公司是否可以发展到一个重要里程碑?
* 你还打算吸引多少资金?什么时候?
12) 你的竞争对手是谁?
* 谁是你当前和潜在的竞争对手?
* 谁有可能和你竞争,谁有可能和你合作?
* 你的优势和弱点?
* 你有什么特殊之处?
13) 你有什么合作伙伴?
* 谁是你的销售或技术合作伙伴?当前?未来?
* 这些合作伙伴有多可靠?
14) 为什么适合有意的投资者?
* 和投资者的方向,经验吻合?
* 与投资者现有的投资组合有什么互补,或竞争?
15) 其它
* 成功的条件里有什么还只是假设?
* 有什么突然因素有可能一夜之间改变你的生意?新科技,新市场成员,规则法规的变化?
* 你公司的薄弱环节是什么?

Sunday, July 23, 2006

Online Proxy

Access Blogspot.com
- To access Blogspot.com which is blocked in India, Pakistan, Iran or China, access http://blogname.blogspot.com via http://www.pkblogs.com/blogname

Saturday, July 22, 2006

Eat - 火鍋 Fondu Steamboat

Recording purpose. Sounds good. I shall suggest to try it in next classmate gathering.

Source: http://www.zaobao.com.sg/fk/fk060722_512.html

  这家相信是本地首家香港火锅店的食店——富临渔港海鲜·火锅,就开在甘榜格南的一条横街里,注重汤底和配料丰富是香港火锅的两大特色。富临备有7种汤锅、7种汤底和50多种配料供顾客选择,其中沙爹汤底和木瓜玉米鲜鱼汤底最特别。

南洋风味的汤底

  沙爹汤底在香港非常受欢迎,那是用沙爹酱、花生末和峇拉煎等材料制作的汤底,带点辣味,很有南洋风味。因为汤味浓而微浊,用来烫配料可以增加配料的滋味。

  木瓜玉米鲜鱼汤底是用木瓜、玉米、红枣、鲨鱼骨和石斑鱼骨熬煮4个小时而成。罗家光说,这汤并没下盐调味,完全是食材的自然滋味。

  个人建议不妨来一个鸳鸯锅,一边为沙爹汤,主要用来烫配料;一边为木瓜玉米鲜鱼汤,主要当汤喝。沙爹汤6元,木瓜玉米鲜鱼汤8元。

餐馆:富临渔港海鲜·火锅 地址:阿里哇路(Aliwal Street)14号
营业时间:下午5时30分至凌晨3时30分 电话:6745-2632

Thursday, July 20, 2006

FT - 中国的不合理

Source: http://www.ftchinese.com/sc/story.jsp?id=001005201
人才不只是“高学历”
读者:sukenny 2006年6月28日 星期三

... 现在中国的很多企业招聘要求非常不合理,他们认为有高学历的人才是人才,这严重的制约了人才的发展。于是就出现了很多人去造假;出现了很多人为了找一份好工作,不惜一切去读书,拿高学历;出现了因为没有学历而找不到工作,永远都生活在社会低层的人。那样中国什么时候才可以摆脱落后的困境呢?

我国的农民占全国的3分之2,如果每个人都去读大学,那样中国要开多少所大学才可以把9亿多的人安置去读大学呢?现在工作招聘要求最低的是大专以上的学历,这个问题是非常严峻的。

很多北方的人都去南方工作,以为广东就是好挣钱的地方,来了才知道——广东很多的工厂的工资都超不过600块钱。你想一下,出来打工的都想挣钱回家,钱挣不到,就开始“偷”和“抢”... 又出现了另外的社会问题。其实有很多事情,不如你们所想的那么美好。国际的人都看到中国每年的GDP增长8%到9%,可是真正实惠的有几个人呢?每每看到学者们说中国的好,心里都有点酸酸的感觉,可惜的是,没有地方可以去发泄不满。

中国是一个极为严重的贫富悬殊的地方,有钱的人更有钱,很多人一辈子都是为了一间房子去奋斗,但到死的那天也没有把房子供完,那又是一种什么现象呢?

Source: http://www.ftchinese.com/sc/story.jsp?id=001005842
贫富悬殊还得讲常识
读者铁山杰迪
2006年7月27日 星期四

薛兆丰先生在《劫富济贫有何不妥》一文中的看法是不妥的,犯了若干常识错误。

首先,他用自己身边的微观例子,来否定宏观社会学意义基尼系数的准确性,属于以偏概全。对个体而言,洗手次数多不代表手一定干净。但就人群来说,10000个人而言,洗手多的5000个,干净程度必定超过洗手少的5000个。

其次,他忽视了贫富悬殊带来的社会震荡,巨大的社会成本。世事无绝对,一定的贫富悬殊可以带来更为快速的资本积累,可以产生资本家,往更大了说,文化也和贫富悬殊息息相关,金子塔就是法老占有巨额财富而奴隶不占有财富的前提下才可能修建。但是,贫富悬殊过度会造成的问题也是很可怕的。始皇的财富被项羽毁灭,八百里的阿房宫化为灰烬。朱门酒肉臭,路有冻死骨。杜甫之后,便是唐末的大混乱和倒退。

第三,不能因为个体的慈善否认制度的力量。不可否认,比尔盖兹和巴菲特捐出了他们的财富,这样的做法可以缓和矛盾。但是,慈善之所以高尚,乃是因为稀缺。为富不仁,不肯把金钱捐出来的富人还是多数。须知,从群体意义上说,不贪财的人是很难发财的。制度本身是妥协的产物,不能让富人丧失创造财富的欲望,也不能让穷人穷得起来造反,所以需要再次分配,所以才有税收和福利体系。诚然,政府分配效率必定会有损耗,但是,不能因噎废食,什么样的再分配会没有损耗呢?没有。

第四,穷人没有劫富,富人却在劫贫。现在哪里有什么劫富济贫,对农民土地的占有,对民工的残酷剥削,国内福利保障体系的不完善,对国有资产的疯狂侵吞,都是富有阶层才能做的事情。现在的问题,根本不是穷人在打劫富人,而是有产阶层太不人道,把穷人饭碗里的最后几粒米拿走,这才是活生生的现实。现在提保护富人实在言之过早,太过滑稽。

经济学还不是一门严谨的科学,经济学的很多问题,需要很多其他领域的知识,政治、历史、社会、文化,乃至自然地理等等等等,才可能得出一个正确的结论。薛兆丰先生用简单的加减乘除来解释经济学问题是不妥当的。

Friday, July 14, 2006

Oracle Business Rules - 1. Getting Started

It is a mystery that, even in OTN Oracle Business Rules the webpage itself, I couldn't find "Getting Started" guide. I read somewhere mentioning Application Server 10.1.3 comes free with Oracle Business Rules. But after installing 10gAS Release 3, where is Oracle Business Rules?

Searching Google high and low also couldn't find the layman instruction. Finally, while solving other problem, I found it! It is hiding inside 10gAS R3 Installation Guide.

The steps are as follows:
  1. Access the Oracle Enterprise Manager 10g Application Server Control Console using the following URL: http://hostname:port/em
  2. In the Groups section of the page, click on the AS Instance.
  3. Select the Applications tab.
  4. Click [Deploy] button.
  5. In Deploy: Select Archive page, you see Archive section on top and Deployment Plan section at bottom.
    * For Archive, select "Archive is already present on the server". Then, enter the absolute path to point to $ORACLE_HOME/rules/webapps/ruleauthor.ear file, e.g. "/opt/oracle/AS1013/rules/webapps/ruleauthor.ear".
    * For Deployment Plan, select "Automatically create a new deployment plan".
  6. Enter the name of the application as ruleauthor.
  7. Nothing to change. Click [Deploy] button.

To deploy the online help for Oracle Business Rules Rule Author, the step is similar to above. The absolute path to the ear file is "/opt/oracle/AS1013/rules/webapps/rulehelp.ear".

Preface

In my daily work, I keep records of the information that I learned. Because I involve in various projects, I keep a log book for each project.

The new problem is, there is no better way to organize information.

When I wanted to look for the particular information, sometimes I cannot remember where I have recorded the step-by-step guide in which project log book. That's terrible and frustrating.

I realize a possible solution. Why not I write everything inside a blog? Then, any information that I want to look for, the website has the "search" feature for me to search by keyword.

That seems a good idea. So let's try this idea out today.