Wednesday, April 18, 2007

Upgrade OracleDB

In a project I was requested to install Oracle SOA Suite 10g (10.1.3.1.0).

It is interesting that my colleagues simply knew I need to upgrade an existing OracleDB to higher version. But when I asked where do I find the documentation regarding the upgrade, they replied they hit an error before and they solved it but they didn't remember where's the documentation.

Anyway, the summary is, documentation does exist. You may go http://otn.oracle.com/ -> Documentation -> Oracle Application Server -> etc. Please reference the following link for the corresponding OracleDB that is required by SOA Suite 10g installation:
http://download-uk.oracle.com/docs/cd/B31019_01/install.1013/install/reqs.htm#CHDEAICG

% sqlplus sys/password as sysdba
SQL> select version from product_component_version where product like 'Oracle%9i%' or product like 'Oracle%Database%';

The existing OracleDB is 10.1.0.4. How do I upgrade it to 10.1.0.5?

Steps to find patch for upgrading OracleDB:

1. Login http://metalink.oracle.com
2. Go to [Patches & Upgrades] tab.
3. Select "Advanced Search".
4. Search with the following options:

* Product Family: RDBMS Server
* Release: Oracle 10.1.0.4, 10.1.0.5

5. Then, a list of related items are returned.

I want to upgrade OracleDB 10.1.0.4 to 10.1.0.5, which one is the right one? Siva simply suggested me to use "4505133 - Oracle Database Family: Patchset 10.1.0.5 PATCH SET FOR ORACLE DATABASE SERVER". I asked him, how do you know is this one? He replied, you click the readme file, then you'll know everything. Magic. Anyway, I trust him, so I just simply download patch 4505133.

Here you go. Upgrade patch is bundled in OUI (Oracle Universal Installer) format. So we simply shutdown all database processes and execute "./runInstaller". OracleDB will be upgraded beautifully.

Saturday, April 14, 2007

YAH Batch 3 Anniversary

April 14, Saturday was a busy day. Today was the opening day of YAH Community College Batch 6 at Center for Seniors in Bishan Junction 8. Started from 8am, volunteers and facilitators had started to prepare and welcome students.


Reception



Student coming.


12 April 2006 was the day all the Batch 3 facilitators got together. So we decided to have an anniversary gathering on same day 14 April 2007. After lunch in Junction 8 food court, Bao Xuan drove May Ying and me together to East Coast Park Island Resort.


Inside chalet


While we were waiting for the rest to arrive in the evening, we have an informative chat. I learned 2 tips to become good boyfriend/husband from Bao Xuan, haha...

Around 6:30pm, more people and food arrived. The buffet was ordered by May Ying. The presentation looked good and the food was tasty. Yue Feng had also prepared Mo Mo Cha Cha dessert.



This was a rare gathering. We had some new friends, husband and wife coming. Everybody ate ate and chat chat. Then, it was ice-breaking cum team-building game time. Soon prepared 3 games, they were (1) Guess who am I? (2) Phoenix Hall of Fame and (3) Memorized Puzzle.


Game1: Guess who am I?



Game2: Phoenix Hall of Fame



Game3: Memorized Puzzle


Aiyo... it was not easy to control the crowd. Players started to act before Soon finished explaining. They argued with the rules or they refused to accept the “prizes”. Haha... quite messy.



Refuse to accept the Prize


As we were facilitators, we had the debrief session after the activities. Somehow somebody had opinions and somehow ended up Soon went on stage to sing. Bee Yew the potential future facilitator was involved also.


After game debrief



Bee Yew and Soon sang on the stage


Finally, the event was ended. Hopefully everybody had a happy and memorable night.

For the complete photo album, visit here:
http://picasaweb.google.com/yangchengsoon/070414YAHBatch3Anniversary

2 tips to become good boyfriend/husband

Tips # 1: 了解和让着她。不是讲讲而已,是真的了解那种。

由于本人性格比较随和,多数事情不太计较。有一次出国旅行找旅店的时候,有朋友十分小心翼翼的审查睡床表面干不干净,窗口对那边,地板脏不脏,房间整体的色调好不好,之类的。我看了简直不可思议,“ 喂,我们不是买房子,只是住旅店一晚,你没有必要如此斤斤计较吧?” 言下之意,就是将就一点。

我一直都不觉得自己这样有什么问题。然而,和一个女性朋友聊天之后,我才明白自己这样是太不体谅别人的性格和习惯了。

那个女性朋友天生就是一个爱干净,爱选择美观的东西,的人。如果床不舒服,冲凉房不干净,她就是睡不着,不愿洗澡,或者干脆不住进去的那种。我心里就想,哎哟,如果我带这样的一个女朋友出门真麻烦。可是!她的先生是怎样反应的?我听了感触良深。

当她和朋友要在外面过夜,她的先生听到是什么地方的时候,他十分预知的告诉她,你在那边是睡不着的啦,还是回家休息吧。哇,太了解自己的妻子了。

而且,如果他们夫妇旅行的时候,她的老公一定花费多一点,住星级旅店。哇,太体谅自己的妻子了。

这个可以学一学。

Tips # 2: 老婆是拿来疼的,不是当家里的佣人。

有时聊天谈论到找对象的时候,有时候有人会提到说,希望自己的妻子能够做家务和照顾老人小孩。

然而我的女性朋友回到丈夫婆家吃饭的时候,她的先生反而会叫他的妹妹洗碗收拾,我的女性朋友是不用动手的。先生的家里人当然会抗议嘛。她的先生就说,老婆是拿来疼的,不是当家里的佣人。

这个例子有点极端,不过做丈夫的想法却很超越。想一想,如果一个男孩子还没有结婚,到处去跟人家说希望他的妻子能够做家务,那么肯定把女孩子吓跑了嘛。难怪有人找不到女朋友了。

这一条可以参考参考。

Friday, March 30, 2007

Shell script execution - command not found, syntax error near unexpected token

When we edit shell script in Windows machine, and ftp it to Linux for execution, sometimes we hit the following error:

command not foundh” line xxx
command not foundne” line xxx: syntax error near unexpected token `

This is due to the newline characters used on both systems. We need to replace all occurances of "\r\n" with "\n".

In vi, do the following:

// Change from (DOS) to just (Unix):
:set fileformat=unix
:w


// change back to Carriage Return + Line Feed for DOS
:set fileformat=dos
:w


// writing for apple computers:
:set fileformat=mac
:w


// remove multiple (repeated) Carriage Returns using search and replace
:%s/[^M]$//
:w

Thursday, January 25, 2007

年长者的失眠症

有一位年长者缺席了一堂课。我打电话去慰问她什么原因没来。她提到她有失眠问题,星期六早上觉得头晕,怕走路跌到,又不想麻烦女儿早起载她上学,所以便没来了。

我和她聊了很久,针对她的问题我给了我的意见。最后她反应道,“你的意见很新奇,我没有想过。”

因为聊了很多,她大概也记不了。所以我把重点写出来,印在纸上给她看。

问题: 白天不敢午睡,怕晚上会睡不着。常常小睡十五分钟就起身。
建议: 如果白天能够入睡,就应该敢敢睡久久。如果晚上睡不着了,就起身做事。反正都已经退休了,时间都是自己的,不用怕白天和晚上的生理时钟颠倒了。最重要的是睡的足够,睡到自然醒,睡足比药补好。

问题: 可是白天忙於做家务,不能午睡太久。
建议: 把家务事分开来。累时睡觉休息,醒了之后,就算在晚上也可以继续做家务。

问题: 晚上失眠,想看书看杂志,可是又不敢开灯,怕打扰到家人。
建议: 可以去客厅,去厨房,去厕所看书。

问题: 早上调闹钟,准时起来为家人准备早餐。
建议: 老娘今天不想早起做家务,你们自己吃面包。你不是女佣嘛,不需要做家务24小时。

问题: 已经习惯坐在书桌上看书,坐久会腰痛。躺下就会舒缓舒服。
建议: 做人不要让自己的习惯绑死,可以尝试洒脱的躺在床上看书。如果累了,书一丢,可以马上在床上睡着。

Saturday, January 13, 2007

OracleAS rewrite/redirect URL to internal machine hostname

Usually when we setup a machine, we’ll simply give a hostname for the machine. Then we install OracleAS on it.

When it goes live, we’ll assign a new Domain Name to point to this machine. Hence, this machine has 2 names. Internally it is machine_hostname.domain.com and externally it is host.internet.com.

From Internet when we access this machine, here comes a strange behaviour: when we login OracleAS EM (Enterprise Manager) or perform JSP/Struct/JSF Redirect in our web application, the internal machine hostname is shown up in browser. Hence the browser shows “Page cannot be displayed”.

Amazing. What’s wrong? What happens inside JSP/Struct/JSF Redirect?

Here is the culprit:

vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf”.

You see the following information:


ServerName machine_hostname.domain.com


# UseCanonicalName: (new for 1.3) With this setting turned on, whenever
# Apache needs to construct a self-referencing URL (a URL that refers back
# to the server the response is coming from) it will use ServerName and
# Port to form a "canonical" name. With this setting off, Apache will
# use the hostname:port that the client supplied, when possible. This
# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
UseCanonicalName On


Observation is,
1) ServerName is hardcoded with internal machine hostname.
2) Read the explanation of UseCanonicalName, Apache use ServerName to construct a self-referencing URL.

So, we need to set UseCanonicalName off, then Apache will use the hostname:port that the client supplied.

Problem solved. Mission accomplished.

What happens inside JSP/Struct/JSF Redirect?

Let’s use the following servlet to demo a redirect.
public class RedirectServlet extends HttpServlet
{
public void service(HttpServletRequest req,
HttpServletResponse resp)
{
String contextPath = req.getContextPath();
String redirectStr = contextPath +
"/nextpage.jsp?param1=value1";
// Use encodeRedirectURL so that session id can be
// included in browser which doesn't support cookies.
resp.sendRedirect(resp.encodeRedirectURL(redirectStr));
}
}
Then, we use Telnet to access this servlet:
% telnet machine_hostname 8080

Manually enter:
GET /servlet/RedirectServlet HTTP/1.0

You will get the reply:
HTTP1.1 302 Moved Temporarily
Location: http://machine_hostname:8080/webapp/nextpage.jsp?param1=value1
DATE: ...
Server: ...
Connection: ...


What to observe is that,
1) Redirect in fact is a 302 response from webserver.
2) The complete URL and Port are written out fully in the Location.

This is the reason why the internal machine hostname will be shown up in browser, when we login OracleAS EM (Enterprise Manager) or perform a JSP/Struct/JSF Redirect in our web application.

Please check how to let EM and Redirect return URL as expected-ly.

Run OHS at port 80 (HTTP) and port 443 (HTTPS)

By default, OracleAS HTTP Server runs at port 7777 for HTTP and port 4443 for HTTPS.

In Linux, only root user can use port less than 1024. So, in order to have OHS runs at port 80 and HTTPS runs at port 443, we need to do the following steps:

1. As oracle user,
"cd $ORACLE_HOME/Apache/Apache/conf"

2. Edit httpd.conf
"vi httpd.conf"

Search for 7777 by ":/7777"
You see:
# This port is used when starting without SSL
Port 7777
Listen 7777

Change them to:
# This port is used when starting without SSL
Port 80
Listen 80


3. Edit ssl.conf
"vi ssl.conf"

Replace all occurance of 4443 with 443.
":1,$ s/4443/443/g" or ":%s/4443/443/g"

4. As root user, "cd $ORACLE_HOME/Apache/Apache/bin". Execute:
# chmod 777 apachectl
# chown root .apachectl
# chmod 6750 .apachectl

You'll see the following:
# ll apachectl
-rwxrwxrwx 1 oracle dba 11909 Dec 8 15:11 apachectl
# ll .apachectl
-rwsr-s--- 1 root dba 1703684 Jan 16 2006 .apachectl

Ok, done.

As oracle user, you can startup OracleAS with "opmnctl startall"
Also, you can view the status with "opmnctl status -l"

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) 其它
* 成功的条件里有什么还只是假设?
* 有什么突然因素有可能一夜之间改变你的生意?新科技,新市场成员,规则法规的变化?
* 你公司的薄弱环节是什么?