Monday, November 30, 2009

再临华美 Hua Mui Revisited

既然到了新山,我当然会去华美,吃吃它的面包,喝喝它的咖啡,体验殖民地风情,享受慵懒的午后气氛。
Been to Hua Mui once more! Yummy Yummy Hua Mui


外观
Hua Mui here i come again!


内观


内观


非常殖民地风味
Love the colonization era feel. It reminds me this restaurant is close to 100 years old.


叫了杯茶c
I ordered Teh-C. Good. Very Kow.


叫了面包,好吃好吃。
The toast banyak bagus! Delicious. Enak betul.

访新山华族历史文物馆失败记

上个星期五,心血来潮往新山去。既然到了新山,就想顺道去看看不久前开张的新山华族历史文物馆。找了好久才发现那馆近在尺尺。既然没开!大失所望!

没关系,下次再来。

拍了一张外观照。

永平福州鱼丸 Yong Peng FuZhou Fish Ball



哇,首尝福州鱼丸。
Yummy. First time eating FuZhou fish ball.


以往多次路经永平,对荣凯的西刀鱼丸鱼饼情有独钟,所以无缘尝试其他店的鱼丸。
I love XiDao Fish Ball. I used to eat a lot of XiDao Fish Ball & Fish Cake at a shop called Antony's every time i traveled back to my home town.

这次由于已近晚上十点,荣凯已闭门休息。唯有试试别家鱼丸,找上了这间。
Last Friday night at 10pm, i wanted to have dinner at Antony's, which had already closed. Therefore i had my dinner at this shop (i have forgotten the shop name).

其干面与鱼丸配搭没荣凯出色,其鱼饼似乎与荣凯的同出一源。让我欢喜的是那一晚福州鱼丸。鱼丸里头裹着猪肉,是新发明吧?非同凡响,值得一试!
There is a piece of meat inside the fish ball. New invention? Worth trying!

Wednesday, November 11, 2009

Load Test

Past few days i encountered one serious production issue, which the web service timeout before the backend process sent back the message to the SOAP response node in WMB flow. This was due to the high load in production that caused the delay in the backend process.

The whole process is: WMB flow extracts SOAP request message, turns it into a MQ Header message, puts the message to Java adaptor's request queue, then Java adaptor processes the content and puts a response message to the response queue, then WMB flow will read the message in the response queue and will turn it into a SOAP response.

In the progress of investigation, we decided to move one database query out from the java adaptor program to the WMB flow. The reason being is sometimes the db connection will just drop and the java adaptor program has to spend some time reinitiating the db connection. In fact according to the time recorded in the adaptor's log the process was still quite fast, it's even within miliseconds. Well we just gave it a try.

After making all the necessary changes we deployed the works to the testing environment. I then performed some load tests to the web service. The result was negative. The tps was around 3.5 but the average time taken was > 10 seconds and we had to achieve < 10 seconds! So still plenty of work to do :(

We performed a few cycles of investigation, trial and error & testing until we found the solution - increasing the WMB flow instance. This is a setting in the WMB Toolkit. So we increased the number of instances to 3. This time we managed to achieve an average time of 3 seconds! We were so happy and excited!

What about the cause? See below:

There were many messages piling at the response queue which is supposed to be read by the WMB flow. These messages were sent in by the Java Adaptor after it finished processing the data. Apparently these messages were not picked up by the WMB flow in time hence causing the timeout error. By increasing the WMB flow instance, concurrently there are 3 identical WMB flows reading the content of this queue, hence problem resolved!

I was really relieved!

Tuesday, October 20, 2009

又一个日曜日的傍晚



日曜日的傍晚,又是上京时。
喂座驾以足食。
日已落、天凉气爽、犹如雨后、其实无雨。
油站冷清客稀、四周旧楼添诗意。
燕群鸣不已、翼声不绝。举头 - 落寞高楼现,昔日斗气作、今日玄鸟巢。
回忆深深、来年茫茫、不胜唏嘘。
此景焉能永恒?

Wednesday, September 9, 2009

Classloading in Websphere Administrative Console


I have this web service server application which has been running fine at a Websphere Process Server. One day, my application's log was writing to another application B's log. That is really weird. I checked and found out that this B was recently deployed to the server only. The cause for my application to write to B's log is due to B's log4j jar file was put in the server's common directory ! If we do not change the classloading policy, which is default to PARENT_FIRST, then Wepshere's classloader will load that common directory first only will load the jars in our application's WEB-INF/lib directory.

Hence i logged on to Websphere Administrative Console, went to my application's war file and changed the classloader policy to PARENT_LAST. By doing this Websphere will find and load the neccessary classes from your web module's WEB-INF/lib(web module classloader) first, also you must ensure that the jars you put under your application's WEB-INF/lib folder do not clash with the one at server's common directory, else you will get a java.lang.LinkageError exception due to classloader is trying to load duplicate class.

Friday, August 7, 2009

One year already!!

Time flies. It has been one year already since i joined this company in KL. Also it is my 1 year in KL.

I have been working on ESB/SOA stuff since day 1. Back then i was really blur of all these queue/web services/broker/adapter stuff as i was from web development background. I am glad that i was given the chance to get exposed to this area. Thanks to the support from my colleagues. They are really great!

Since i am doing integration job, i often have to liaise with a few parties. Hence the interaction between me and them is quite important. The communication between me and them has to be effective to ensure that i am able to deliver the right solution as according to what business users need. This part has troubled me a lot. I think i still have much space for improvement in this area. Perhaps i need to take some psychology course. Hahaha.

I am quite lucky to witness the outsourcing process. My client - a telco company has outsourced its IT department to my company some time back. Things have turned quite messy at the first few months after the outsourcing. For example my project manager has changed 4 times in 3,4 months time and the process is no longer as clear as the one before the outsourcing. Fortunately i can see things are getting stable now.

Just looking forward to learn more things as long as i have not left this company. I hope can get high pay with minimum workload. Hahaha.

Thursday, August 6, 2009

昔华中学杰出校友

目前为止所知道的杰出校友有数位如下:

  1. 黄子。他常在报章电台等媒体发表意见。他在电台上的说话方式非常滑稽,常常反讽时弊。他现时在南洋商报有个专栏。
  2. 杨善勇。自多年前就常在各报章看到他的文章。从中得知他的专长乃城市策划。近来他在东方日报有个专栏。
  3. 后起之秀彭靖岚彭靖雯两姐妹。他们的部落格/博客/网志在本地非常受落因而累积了一些知名度。2年前我偶然间于凌晨在国营电台听到他们的声音,原来是当天的嘉宾。
就只知道这数位,有待日后补充。

Sunday, August 2, 2009

Ai FM's DJ was crying over Yasmin Ahmad's death

I was driving back to KL from my hometown. I was listening to Ai FM(a mandarin radio) as usual. 10.05pm was DJ Ji An's programme. He was talking about a lot of things about Yasmin Ahmad because he invited Yasmin Ahmad a few times to his programme as guest. I think after a few times Yasmin Ahmad was invited they became some sort of close friends. Well at first his tone was still calm but suddenly he burst into tears. I guess that was really a sad moment for him when Kak Yasmin passed away. So from 10.05pm to 12pm DJ Ji An was replaying all the programs that he had invited Yasmin Ahmad as his guest.

The 2 hours was a nice one. Yasmin Ahmad was really anak Malaysia yang betul-betul membuat movie untuk semua Malaysian. It's a great loss for us Malaysian that Yasmin Ahmad could not produce more touching TV advertisements & movies anymore.

Thursday, July 23, 2009

NullPointerException in SecureRandom.nextBytes

I was facing this issue where a web service client which had always been running fine suddenly stopped functioning properly due to an error NullPointerException in SecureRandom.nextBytes

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.NullPointerException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.lang.NullPointerException
at java.security.SecureRandom.nextBytes(SecureRandom.java:406)
at org.apache.axis.utils.SessionUtils.generateSessionId(SessionUtils.java:62)
As you can see the exception was thrown when some class in Axis is calling the nextBytes function from SecureRandom Class. I spent quite some time in this and i think that is a bug for IBM version of JRE 1.4.2. If you want to know more, read here.

Therefore i changed the script which starts my web service client by using the java command from Java 5 instead of java 1.4.2 and finally it worked!


Friday, July 10, 2009

Now i do not hate PLUS so much...

I was quite surprised that PLUS did actually respond to my complaint! See below:

From: Customer Relationship Mgmt Department
Cc: Husni Bin Md Yusuf ; Rosli Bin Abdul Manan
Sent: Thursday, July 9, 2009 5:51:46 PM
Subject: PLEASE HELP ME AS A PLUS USER!

Our ref. : CRM/00926/AD-COR



Dear Sir,

First of all, we welcome and thank you for your feedback via e-mail with regard to the above.

We are sorry to learn of the unfortunate experience that you are facing while travelling along PLUS Highway due to traffic congestion along the strecth from Pedas Linggi to Nilai on 7/6/09.

Based on our investigation and record, there are a few reasons were contributed to the heavy congestion along the strecth as follows:

1. Heavy traffic entering the highway during Public Holiday and weekend i.e 6/6/09 falls on Saturday cum Agong Birthday (Public Holiday) and 7/6/09 falls on Sunday.

2. There is a climbing area at Km 265.6 NB and a slip road (ingress and egress) to Seremban Rest and Service Area (RSA).

3. Slow moving vehicles had caused back flow all the way to Nilai especially at the climbing area and slip road to Seremban RSA NB.



In view of the above, for an immediate solution we have mobilised an additional Plusronda team to monitor the traffic flow and ensure that no obstruction along the strecth especially during Public Holiday and weekend (Friday to Sunday). On top of that we are now in the midst of discussion with Malaysian Highway Authority (MHA) and Government of Malaysia to look for a permanent solution to the above problems in due course.

We hope that you would satisfy with the above explanation and we are really appreciate for your invaluable feedback.

"Thank you for traveling with PLUS!"

Best regards,



Customer Relationship and Marketing Dept.

PLUS Expressways Berhad





HCR2746

Hi guys, As a user of PLUS expressway, i am really disappointed with the poor management of PLUS on the traffic congestion. I am expecting to enjoy the value of the amount that i have paid for PLUS to use the north-south expressway! I frequently take PLUS north south expressway to go to KL from Simpang Empat toll. I always face problem such that the traffic is congested over the long stretch from Pedas Linggi to Nilai/Pajam/Sepang toll and I notice that the traffic will always go smooth after the Nilai/Pajam/Sepang toll. This shows that actually the north south expressway is able to handle the heavy volume of vehicles! I am urging you to find out what causes the jam or slowdown on Nilai/Pajam/Sepang toll and also please improve this! Your help is very much appreaciated by every PLUS users! Cheers, Disappointed PLUS user

Please be advised that we have changed our email domain from @plus.com.my to @plus.uemnet.com beginning 1 July 2008.
For enquiries, please contact our Corporate Communication Department or MIS Department at 03-76664666.

Thank you!


Well, even tough the response is quite slow(2 weeks), i actually do appreciate them to react upon my complaint!

Wednesday, June 24, 2009

葬礼

今夜难得能一边享受晚餐一边听现场演唱。

我突然想起了最近一次听到的现场演唱,是在2008年初我外公的葬礼上。

当时外公的女儿们雇佣了一支乐队,他们在葬礼处摆了一大堆的乐器,在现场唱了好几首歌,都是些离别之类的曲目。歌手蛮会唱,于当时份外令人伤感。这支乐队当然另有重要任务,就是在运送外公遗体往坟场的路上演奏离别曲。

至于外公的葬礼,印象最深刻的是最后一天来了一大班“兄弟”,个个T衫短裤,其中几位带头,一个接一个的,唱了一些闽南语“江湖曲”,有点像演闽南歌仔戏,值得一提的是他们唱功扎实,从外表是看不出来的。曲终时各位兄弟齐用闽南语喊道”发啊!”,整个过程历时十多分钟,我也从头跪到尾。此环节让我印象深刻。

Saturday, May 30, 2009

Busy with Web Services on WPS

For the past two weeks i had been very busy with building web services using java 1.4. Bad thing was i had to deploy them on Websphere Process Server 6.0,

I had no problem building the web services using Rational Software Architect(RSA). I tested my work by deploying to Websphere Application Server 6.1 runtime that comes together with the RSA. Everything was working fine.

However i started to have a lot of headaches while trying to deploy these web services by using Websphere Admin Consle to Websphere Process Server 6.0.2 which is running on a remote server. My web service application just could not start!

After trying out several solutions, in the end i migrated my source codes to Websphere Integration Developer 6.0(WID). I regenerated every web service related deployment configuration files and proxy classes by using WID.

This time my web service application started successfully! Well the next problem was it was unable to get database connection! It took me quite some time to figure out what's wrong with it and finally i realized that i had to get the JDBC connection from the WPS itself instead of creating my own OracleDataSource cache.

I created all JDBC connection that the web service applications needs by using the Websphere Admin Console. I also changed my code to get the JDBC connection via JNDI.
The method is simple. Just create a default initialContext, then within the context, get your JDBC connection by name like "JDBC/MyDB" will do.

Wednesday, March 25, 2009

How do we measure a company's financial status?


Came across this article online. I am going to try if it is really a good one. This tip is quite useful for us to identify a good company provided it is really accurate :P. Anyway it looks like the index is subjective to every country.

Friday, March 20, 2009

Run java program at backend on Windows

Normally, if you want to start a Java program to run as back end process, just type the command follow by a '&'. However, how do you do the same on Windows?

Yesterday my colleague was facing this problem and i remembered i have gone through the same problem before in my previous company. After we went through the windows command list i found something, which is the 'start' command. Then i remembered i might have used this command before when i had faced the same problem last time.

So we tried the 'start' command and it was successful.

Thursday, March 19, 2009

Why IT Project Fails!

I have come across an article talking about why IT project fails!

Take a look on it!

My experience told me that business users often do not want to spend much time with the developers during the development of a system. They do not realize that it is very very critical and useful to the final result of the system by spending time reviewing developers work to find out whether something is missing at the early phase of the project! Well i do agree that agile methodology approach is very very good provided the business users are willing to allocate resource to examine the system.

Monday, March 16, 2009

Finally i am working on 2nd project!!!

Finally i have a chance to work on 2nd project after joining this company.

The first one has gone for production and it is being supported by the production support team now. Anyway there are several environment issues occurring recently. I want to help them but too bad i am involved in new project already.

To be accurate it is not my 2nd project, but 3rd one. I was involved in a 3 days proof of concept anyway and that gave me a terrible nightmares. It was a typical last minute project which everyone in the team had to work extra time! It is about to build a portal for a telecommunications client.

Now one weird thing of the WBIA running on production is that sometimes the message will be processed twice! This creates a false impression to users of the telco company that the account registration process just fails! The production support team should be quite tension right now of this issue. I think it has something to do with the configuration anyway that why certain XML message is processed twice. Why it is routed back to the adapter again!

Also today i have learned how to upload a WSDL file to DataPower and do a testing today! My teammate said basically we can replace the whole DataPower team after we learned how to configure the WSDL at DataPower. That's funny!

Thursday, March 5, 2009

Working on wrong direction

One day the client raised an issue to me. That issue would not happen if the Websphere Message Broker (WMB) flow that i deployed on the server is running fine.

I checked the queue and channel status by using a tool called MQJ explorer and found out both the sender and receiver channels' status were 'inactive'. I then turned it to 'running' again. However their status will still be 'inactive' after some time. I had gone mad about this and spent a whole day trying to find out what went wrong.


In the end i know i went into the wrong direction. It is normal that after some time the status of the channels go to 'inactive'. As long as the transmission trigger is on then there will be no problem. When the next message comes in then the sender and receiver channels will be activated again.

So what actually went wrong. Argh it is because the portal team did not set the correct queue name to the JMS header of the XML message and thus no response from the whole flow!

Friday, February 27, 2009

Complex investigation, easy solution

Yesterday I was facing one production issue where somehow at some time the connection to a database which is located at another server will be reset. I was getting java.lang.SqlException(io exception: connection resrt). I have reused a method that will reconnect to the database. I hope it works in the next deployment and i believe it should work. Code snippet as below:



public Connection getDBConnection(String dbName) throws OracleConnException, Exception {
if (logger.isInfoEnabled()) {
logger.info("getDBConnection(String) - String dbName=" + dbName); //$NON-NLS-1$
}

Connection cachedConnection = null;
if (ocDataSource == null) {
ocDataSource = new HashMap();
this.printSQL("new HashMap");
}

OracleDataSource ds = (OracleDataSource) ocDataSource.get(dbName);

if(ds == null){
this.printSQL("creatingNewOracleDS");
ds = createNewOracleDS(dbName);
this.printSQL("createdNewOracleDS");
ocDataSource.put(dbName.trim(), ds);
}

int i = 0;
int retry = KenanAdaptorProperties.getORACLE_RETRY_NUM();

for(i = 0; i < retry; i++){
try {
this.printSQL("ds.getConnection() " + ds.getPortNumber());

cachedConnection = ds.getConnection();
this.printSQL("error in connection? ");

if(!isConnectionAlive(cachedConnection)){
this.printSQL("connection is not alive???");
try { ds.close(); } catch(Exception e){
//log.debug("Can't close DataSource object!");
}
ds = null;

ocDataSource.remove(dbName);

ds = createNewOracleDS(dbName);
ocDataSource.put(dbName, ds);
} else {
break;
}

} catch (SQLException se){
logger.error("getDBConnection(String)", se); //$NON-NLS-1$
} catch (Exception e){
this.printSQL("Exception:\r\n" + Util.getStackTraceForLog(e));
}

// sleep for a specific amount of time!
//make it configurable
try {
Thread.sleep(KenanAdaptorProperties.getORACLE_RETRY_SLEEP_TIME());
} catch (InterruptedException e) {
// log.debug("Interrupted Exception:\r\n" + Util.getStackTraceForLog(e));
}

}

if(i == retry){
throw new OracleConnException("Connection is not established. Failed after " + retry + " retries.");
}

return cachedConnection;
}

Tuesday, February 24, 2009

production rollout for Kenan Adapter running on Websphere Business Integration Adapters is successful!

Finally the production rollout for Kenan Adapter is successful!

This is the third deployment after the unsuccessful first two. Well it went well in spite of some minor issues. Most of the scenarios are catered this time. The client's testing team had done a good job this time for testing thoroughly on all kind of possible scenarios! Yeah they should have done that during the UAT time! If they would allocate some time for more scenario testing, the deployment would have gone well even before year 2009! No it's approaching March and the client only managed to use it now. Well, this project does not bring any income to my team anyway. My project manager took this project to cover up some other unit's shit. Now that the long term outsource deal has been closed.

I am studying Websphere Process Server now. It looks far more complicated. I think i need some time to digest some new terms here. I should get myself involved in at least one project related to this product so that i can gain more expertise in this product.

All in all, good news this week. I am glad especially for the successfull rollout for Kenan Adapter. I have put very much effort in making this successful. I would like to thank my project manager for the support! That is important to continue to boost my morale.

Friday, February 13, 2009

Terrible Project, Terrible Day

Bad news hit me last Thursday, i would have to help out in a Proof of Concept(POC) project for a famous Telco company in Malaysia!

I went to the meeting place in the morning. Met with new teammates. Obviously everyone was still trying to adapt to this adhoc situation.

On the first day, I was spending the whole day getting help from a few experts to set up the development and testing environment. They helped me to install IBM Websphere Portal Server, IBM Rational Software Architect for Websphere and etc. All these are resource hungry giants. They made the computer to run so slow! Also, in order to make sure i am developing on the same environment, they migrated their Virtual Machine Image to another laptop that has higher spec than my computer.

I started building simple stuff the second day. After several trials and errors, i managed to build and test run the first portlet! This is my first ever portlet that i built in my life! I was excited and i thought mission completed. Well, demand is never enough. I was assigned a few more tasks and my attendence was expected the next day.

On Friday the POC initiator expected to wrap up everything so that the sales team is able to present a nice thing to the potential client! I was thinking things were done so hurrily the quality will surely does not meet client's expectation. In the end i managed to built 4 portlets: some with static data, some queries data from the DB2 database. During the migration of my war file to the core laptop which one of the technical sales guy is going to use to present to the client, i was facing some database connection issue. Well that was easily solved. After that i was asked to enhance the UI on the portlet. Man! what is this! The scope of work will never end?! It's too much!

I kept quiet and finally completed my tasks at 2am in the morning. After that the technical sales guy was able to ping from A machine's VM to B machine's VM! Double good news! He said i stayed to help and that boost his morale and actually i did not find out the solution. It's him who found it.

I learnt a lot of things in this POC project. I learned how to use Rational Software Architect for Websphere to build portlet. I learned how to deploy a portlet using Websphere Portal Server. Also i have explored a few good features in the WPS. I also learned a lot of things on Virtual Machine. The idea of using Virtual Machine is cool. The Virtual Machine helps each developer to counter the barrier of different development & testing environment. It can reduce unexpected events especially due to environment setup when you are demoing your application to your client!

My teammates also shared some valuable stories with me. For e.g. the technical sales guy told me this is also his worst ever project in our company. Normally some other POC projects are simple. I was considered very unfortunate to get involved in this.

Anyway, i don't really like this kind of ad-hoc call up for help. I hope this is my first time and last time doing this shit. At least please tell me one week earlier, and also let me know the overall plan so that i can get ready.

I still prefer a plan. Hurry can't help win a client.

Tuesday, January 20, 2009

Production Rollout for WBIA for Kenan

Following the unsuccessful production rollout for WBIA for Kenan on December 2008, the client has put a more business knowledge rich human resource to verify the screwed-up production data. Also she has informed me what to change and what not to change. I have also fixed the problem where a 'dynamic' database connection is not 'cached'.

This morning we reached office before 6am. I packed for McDonald's big breakfast. So far no bad news. I think this time the production rollout will go very well.

Thursday, January 15, 2009

Something funny has happened!

I am not sure why. Somehow the XML message that was passed to my request queue contains response tag which is not supposed to be attached to it.

What annoyed me was my WBI adapter for Kenan kept processing the same XML message over and over again! Thank to this and only i found out that there was one database connection remained opened thus causing more and more database sessions created!!! This could be a serious issue and luckily i tackled the problem before the system goes for production! However, i still need to find out why sometimes the XML message is redirected to the request queue even tough it has been processed by the adapter without encountering any Tuxedo connection error! The only clue i know now is this kind of 'problematic' XML message contains response tag! Could it be an error from the portal side? Could it be they acquired the processed XML message from response queue and then sent to request queue again? Well, it is doubtful.

Scratching head... continue tomorrow....

Thursday, January 1, 2009

跨年佛学讲座

我在2008年的最后两天参与了一个佛学讲座。主讲人是来自台湾的慧律法师。法师演讲时还真七情上面,表情丰富,让观众们都不至于闷了睡去。

开场都有一段的唱经。平时有唱经的我也自然而然能随之起哼。

法师主要是说什么是正信佛教。华人社会活在儒、释、道的文化太多年了,导致个宗教都变质了。法师该是想尽力协助大众了解何谓真正的佛教。

法师也强调佛教各派该团结一致,不因些微分歧而闹内讧。

法师的演讲大多时候都简易有趣,可惜有几段因应用经文用语而让佛学初学者如我脑袋转不过来。

有些美中不足的是,以我所了解,佛陀已经涅磐了,那么法师怎么可以说“愿佛陀保佑你”和“愿佛陀保佑我们伟大的祖国-马来西亚”呢?而且第二句让人感到有些怪,但又说不出来其怪在何处。

大会还请来了马来西亚的口琴高手以呈献高水准的演出,我只能说,很棒!

大会负责人上台演讲时也几乎掉泪,主办过程想必艰辛。

在接近2009年的时候,法师们也为大众祈福,观众们全都亮起了手上的莲花灯,场面庄严壮观。

不虚此行。