Ahoy there! This is my personal blog which I use as my memory extension and a medium to share stuff that could be useful to others.

Archive for November, 2009

CET – What you see is what your customer sees

Is service fine? What’s the impact to service? These are some of the key questions often asked by IT management in relation to their company’s IT services. In many cases, attempts are made to answer these questions by checking various system health monitors. In rare cases, these questions can be answered accurately by directly asking the customer(s) (although this will give an indication that you’re not in control). So, how do we know a customer’s experience of an IT service? The simple answer – by putting yourself in the customer’s shoes and trying to do what he/she does when using the service. However, implementation of this “customer experience” is not always straightforward, especially in enterprises having complex IT systems. Given below, is an illustration of Customer Experience Testing (CET).

 

CET.png

 

CET is testing a product or service from a customer perspective. CET contributes greatly towards helping you provide an excellent customer experience for your product or service.

Why would Organizations avoid CET?

  • Time
  • Money
  • Complexity

Time and money are the primary reasons why some organizations don’t implement CET even for business-critical services. Some organizations are put off by the complexity of their IT systems. However, this is a big mistake, because if CET is designed and implemented properly, it will actually save time and money.

How do you implement CET?

Design CET: CET is not just a process – it’s also a solution and so must be catered to in solution/system/end-to-end designs. A couple of reasons often given for not testing a particular service like a customer would do, are lack of test data and lack of a process for backend systems/implementers to identify a test. A few years ago, my colleagues and I were working on a problem with the payment fulfilment on a telecom giant’s website. Quite a few customers had reported problems with certain shopping journeys on the website. We wanted to simulate the problem and troubleshoot, but we did not have credit/debit card details to do so and staff were apprehensive of using their own cards due to the cumbersome process involved in getting a refund. We eventually fixed the problem, but had to rely heavily on customer feedback and that would not have made the customer comfortable. If we had test data and an end-to-end CET solution to place an order, then we could have been proactive and identified the fault before the customer reported it and we would have been able to fix the problem confidently and quickly and provide excellent customer satisfaction.

Know your use cases: A well-designed CET solution will use a CET Test Robot – a system that automates interaction with your product or service. In order to ensure that the CET test robot simulates a customer’s interaction with your product/service as closely as possible, you must know all your product’s use cases (what your product/service is designed to cater to) and setup the test robot to execute the use cases and validate responses regularly. Depending on your customer profile, using more than one CET robot and locating them across various locations in which your product/service has customers will provide you a better idea of customer experience.

Know your customer interaction: No matter how much time you spend on identifying use cases, at times, a customer will interact with your product/service in a way that you least expect (and consequently not covered by your use cases). So, how do you simulate these customer interactions in your CET testing? Well, you cannot simulate what you you cannot see. So, you need to know how your customers interact with your product/service. That’s why a solution which records customer interaction across all systems enabling a product/service must be implemented. This solution is sometimes part of “MIS” or “Business Intelligence” initiatives within organizations.

Know your customer: Machines can never completely replace humans (at least I’d like to think so!). While CET Test robots automate use case tests and MIS solutions record customer interaction, there is the possibility of not covering/recording every possible customer interaction. So, that’s why human intelligence is a also a key part of CET Testing – a CET Test Analyst. Rather than just execute a document of standard use cases and recorded customer interactions, the test analyst must think “out-of-box” and try to test the product/service as if he/she were a customer using that product/service. To enable this, the test analyst must work closely with the Support staff (and the customers) to understand the various problems reported by customers and customers’ inclinations. Over time, an experienced CET test analyst will be able to test an almost exhaustive list of customer interactions, thereby playing a vital role in ensuring customer satisfaction.

Use Dashboards: It will be enormously useful to feed the results of CET testing performed by robots and analysts to a dashboard application, so that at any time, the service’s stakeholders can view the status of various services, closely, if not accurately reflecting the usability of these services by the customers. To be useful, the dashboard must be simple, clear and provide the required information about services in an instant to its viewers. You may also choose to make such dashboards public so that in addition to the maintenance pages, you can provide one clear view of the status of all the services your organization provides.

What are the benefits of CET?

  • Tests the end-to-end business process from a customer perspective
  • Gives you a good idea (almost WYSIWYCS – What you see is what your customer sees) of the customer’s experience of a product/service at all times
  • Enables you identify problems with a product/service quickly, take proactive action to notify customers and fix the problem

In large enterprises, CET may not be easy to implement. However, given its huge benefits, CET is a must-have for customer-centric organizations and is definitely a worthwhile investment.

VN:F [1.6.5_908]
Rating: 0 (from 0 votes)

sconn : Socket Connectivity Monitoring

Today, most enterprise systems are complex, requiring several systems to implement services, thereby creating several system interfaces. A basic monitoring requirement is to check if the system stack is broken. i.e. whether system interfaces are broken. Although almost all software products have some sort of "health monitor" to test connectivity with an interfacing system, it can be handy to have a standard utility to test all interfaces. Well, there is the wonderful "netcat" utility which can easily meet this requirement. Unfortunately, netcat is not standard on all UNIX systems (e.g. Solaris) and you may have constraints (e.g. company policy) which prevent you from installing netcat.

sconn is a simple korn shell script which helps you monitor socket connectivity for system interfaces. It’s basically a wrapper around a perl script which tests the connectivity. A simple script in perl alone would have sufficed, but as I’m not familiar with perl, I used the korn shell to meet my requirements. More people will be familiar with shell scripting than with perl and so if others have similar requirements, sconn could be used as-is or tweaked.

How sconn works:

sconn.png

 

Screenshots:

(1) Configuration

Configuring sconn

(2) Execution

Executing sconn 

(3) Output

sconn output files

Recommendations:

  • Execute sconn regularly as a cron job for continual monitoring.
  • Feed sconn data and/or statusnow files to a dashboard or graphing program.

 

Version 1: Last updated – 22:56 GMT, 24th November 2009

Download sconn v1.0

 

NOTE:

(1) sconn has been scanned and is safe to download.

(2) sconn has been tested. If you wish to use sconn, I recommend you also test it before deploying it on a Production system.

(3) Your rating of this post/software will be greatly appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +1 (from 1 vote)

Shmon : Basic Solaris Host Monitoring

Shmon is a bash script (which uses a teeny weeny bit of perl) that monitors a Solaris (versions 8,9 and 10) host. When executed as a cron job, Shmon provides basic, but vital monitoring of key system parameters.

 

How Shmon works:

 Shmon.png

 

Version 1: Last updated – 6:44 PM GMT, 2nd December 2009

Download Shmon v1.0 Download Shmon v1.0 User Guide

 

NOTE:

(1) Shmon is a basic bespoke software developed to meet my specific requirements.

(2) Shmon has been scanned and is safe to download.

(3) Shmon has been tested. If you wish to use Shmon, I recommend you also test it before deploying it on a Production system.

(4) Your rating of this post/software will be greatly appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +1 (from 1 vote)

Henry’s hand of God

Last week, France beat the Republic of Ireland to make it to the FIFA world cup in South Africa next year, consequently preventing the Irish from qualifying. However, France’s victory was highly controversial given that their winning goal was made possible by Thierry Henry’s hands. Henry prevented the ball from going past the goal line with his hand and then kicked the ball to Gallas who scored. Watch the video below.

 

 

After the match, everybody and his dog had something to say about the controversy and so here I am doing my bit. Well, Henry said he’s honest, he’s never cheated and admitted it was handball and even went to the extent of saying that a rematch would be the fairest solution.

However, Henry’s integrity has been blotched and everybody won’t buy into his views after the match. Henry said the handball was instinctive and not deliberate. Ok, well, I’ll buy that.

However, if Henry is as honest and innocent as he claims, why did he celebrate after that goal, fully aware that the Irish players were protesting against his handball? Why did he not go to the referee then and there and admit it was a handball, thereby allowing the referee to make the correct decision?

Henry’s admission of handball and his consequent comments to pacify the Irish were too little too late. He knew it was a handball when the goal was scored. So, why admit it only after the match? It means he simply wanted to deceive the referee. Henry is one of the greatest footballers around today and he knows he has more than a million fans and so he should be even more careful with such incidents. All fans (like me) who respected Thierry Henry both as a footballer and an individual will feel a bit let down by his dishonesty. Henry must be going through tough times as he will be contemplating on losing an opportunity for cementing his name as a sporting legend as now it will be convenient for people to associate Henry with the handball and brand him “cheat”. Well, although Henry’s handball has disappointed me, I will surely never forget the amazing football he’s given us.

VN:F [1.6.5_908]
Rating: 0 (from 0 votes)

India’s Senas – worse than UK’s BNP

Yesterday, the Shiv Sainiks attacked the offices of the news channel IBN Lokmat in retaliation to the channel’s remarks against the Shiv Sena supremo Bal Thackeray. This is yet another attack by the far-right Shiv Sena after several attacks on the media over the years, for any remark passed against the party. As per the Shiv Sena goons, freedom of speech has its limits! Bal Thackeray even blasted Tendulkar last week for his comments that he was first Indian and then Maharashtrian. The Sena parties have caused enough problems and they must be stopped!

Typically, far-right political parties represent facism – an ugly scar on a multicultural, democratic, civilized country and how much impact a country allows its facist parties to have, gives an indication of how democratic, civilized and developed that country and its people are. Given the recent furore out here in the UK over the appearance of the BNP leader Nick Griffin on the popular BBC Question Time programme, I couldn’t help but compare the far-right political parties in India (Shiv Sena, MNS) and the UK(BNP).

 

India (the Senas)

UK (BNP)

A Regional Party – Maharashtra and some other states

A National Party

Founded on the “sons of the soil” policy – Maharashtra is only for Marathi people.

Founded on the “Britain is for indigenous people (white Caucasian)” policy

Still incites and propagates violence against non-Maharashtrians and non-Hindus

Has been associated with violence in the past, but relatively quiet today.

Commits atrocities with impunity as successive Indian Central and State Governments lacked the political will to take action against the violence committed by these parties’ thugs.

The BNP is condemned by many sections of the mainstream media. All mainstream political parties are united in their strong opposition to the BNP. Prime Minister Gordon Brown stated: "Londoners and the rest of the British people know that backing the BNP is totally at odds with what it really means to be British – and the great British values the rest of us share, such as democracy and decency, freedom and fairness, tolerance and equality”

 

Where were these bloody “sons of the soil” Sena blokes when terrorists held seige to Bombay on 26/11? They didn’t have the cojones to even show their faces in public. And commandos from outside Maharashtra played a key role in wiping out the terrorists.

The corruption and vote-bank politics in India have allowed the far-right Sena parties to take law into their hands and commit various atrocities.

Ironically, the very “divide-and-rule” policy that enabled the British to rule India is now followed by the far-right Sena parties in Independent India. What’s that “Unity in Diversity” I studied about, when I was a kid?

If India cannot tackle these fundamental issues and protect the democratic rights of its citizens, then you can flush all talk about India becoming a developed nation, let alone a super-power, down the drain.

VN:F [1.6.5_908]
Rating: 0 (from 0 votes)

A couch potato’s dream gadget

I have experienced the frustration of wanting to switch channels on my TV using my remote only to see nothing happening, because I ignored the many “Low Battery” warnings for my remote control. I’m sure quite a lot of people, especially those couch potatoes out there, would have gone through a similar experience.

nec-prototype-remote Well, two Japanese companies, NEC Electronics and Soundpower have created a prototype remote control which does not need batteries! The power required for its use is generated from the pressing its buttons. So, just using the remote control generates the power required for its operation! Brilliant innovation!

VN:F [1.6.5_908]
Rating: +2 (from 2 votes)

Pac-Man wins a historic seventh world title

I just watched LIVE, the 12-round demolition of Miguel Cotto by Manny Pacquiao earning Manny the WBO welterweight title. Manny created history by winning a seventh world title in an unprecedented seventh weight division.

Manny Pacquiao (left) and Miguel Cotto

 

Manny was simply superb – very lively, darting in and out, punched with lightning speed and accuracy and although he stepped up in weight, it did not show one bit. Cotto landed a few good punches, but Manny seemed unperturbed by them. Manny had Cotto down a couple of times before the referee stopped the fight in the last round. Manny dominated the fight and proved that welterweight power ain’t a problem for him and his iron chin, by demolishing a great welterweight champion.

Now, the fight every boxing fan will want to see is Manny Pacquiao Vs Floyd Mayweather Jr. Both these boxers are the top two contenders for the planet’s best pound-for-pound boxers and exhibit excellent boxing skills and speed. A fight between them is a mouth-watering prospect!

VN:F [1.6.5_908]
Rating: 0 (from 0 votes)

UNIX shell commands return exit statuses or exit codes upon completion, irrespective of whether successful or not. In UNIX, an exit status of 0 indicates successful execution of a command and a non-zero exit status indicates a failure. Some shells (e.g. ksh93) document the various exit statuses and their meanings. So, checking exit statuses of commands is typically done in programs like shell scripts to decide further action to be taken by the script.

However, piped commands or a pipeline (cmd A | cmd B), add a twist to checking exit statuses as by default, most UNIX shells adhere to the POSIX requirement of returning the exit status of the last command in the pipe. Refer the example below:

 

#
# Two commands piped and both commands are successful.
#
$ grep MemTotal /proc/meminfo | awk '{print $2}'; echo "EXIT STATUS = $?"                                                                      
1056836
EXIT STATUS = 0
#
# Two commands piped and first command throws an error.
# Note that the EXIT STATUS is still 0
#
$ grep MemTotal /proc/meminf | awk '{print $2}'; echo "EXIT STATUS = $?"
grep: /proc/meminf: No such file or directory
EXIT STATUS = 0

 

So, checking the exit status of a pipeline as in the above example will cause problems for your script if any of the piped commands other than the last command throw an error. Given below are two solutions (using ksh93 and bash) to solve this problem and ensure a valid exit status check for a pipeline:

SOLUTION 1: Using ksh93 and the pipefail option

The Korn Shell 1993 version ‘g’ point release (ksh93g) introduced a pipefail option which ensures that the exit status of a pipeline will be that of the first command in the pipe that has failed (of course, the exit status of the pipeline will be 0 if all commands in the pipe succeed). Unfortunately, ksh88 is distributed as the default Korn Shell with most UNIX systems (with all Solaris versions I believe) because ksh93 is owned by Lucent and AT&T and there were licensing restrictions. Refer I (Q.14) and III (Q.8) of the Korn shell FAQs at http://kornshell.com/doc/faq.html

An example of how the pipefail option is used is shown below:

 

#
# Check ksh version
#
$ ksh --version
  version         sh (AT&T Research) 93s+ 2008-01-31
#
# Set pipefail option on (it's off by default)
#
$ set -o pipefail
#
# Now, notice the non-zero exit status due to the error in the first command
#
$ grep MemTotal /proc/meminf | awk '{print $2}'; echo "EXIT STATUS = $?"
grep: /proc/meminf: No such file or directory
EXIT STATUS = 2

 

Note: There are other solutions using ksh88 with co-processes and file descriptor manipulation, but those solutions are not script-friendly.

 

SOLUTION 2: Using bash and the PIPESTATUS array

The bash shell uses an array called PIPESTATUS to store the exit statuses of commands in a pipeline.

 

#
# Using the PIPESTATUS array to display exit statuses of both commands in the pipe
#
mrkips@mrkips-laptop:~$ grep MemTotal /proc/meminf | awk '{print $2}'; echo "EXIT STATUS = ${PIPESTATUS[0]}"
 
grep: /proc/meminf: No such file or directory
 
EXIT STATUS = 2
 
 
mrkips@mrkips-laptop:~$ grep MemTotal /proc/meminf | awk '{print $2}'; echo "EXIT STATUS = ${PIPESTATUS[1]}"
 
grep: /proc/meminf: No such file or directory
 
EXIT STATUS = 0

 

Be aware of SIGPIPE

SIGPIPE is a signal sent to a process (that causes the process to terminate) that writes to a pipe when there is nothing to read from the pipe. If you use any of the above mthods to check the exit status of a pipeline and a SIGPIPE is received by one of the commands in the pipeline, then your exit status may not correlate with the success/failure of the pipeline.

For example, in the command,

ls -lrt | head -1

“ls -lrt” writes to a pipe and “head -1″ reads from that pipe. Now, “head -1″ only requires the first line from the pipe and as soon as it gets it, it terminates and sends a SIGPIPE (signal 13) to “ls -lrt” causing “ls -lrt” to terminate with a non-zero exit code.

 

NOTE:

(1) The how-to above describes how I implemented something and may not be the only method of implementation.

(2) Your rating of this post will be much appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +9 (from 9 votes)

Problem:

WebLogic10_ActivateChanges

 

When activating changes (clicking the button "Activate Changes" as shown in the image on the left) on the Administration console of a WebLogic 10.0 MP1 domain comprising an admin server and two managed servers (each managed server on a different host), it took around 5 minutes for the activation to complete.

 

 

 

 

Background:

From WebLogic Server versions 9.x and later, any changes performed on the Administration console must go through a three-step process – (1) Lock and Edit (2) Edit config (3) Activate Changes. It’s the third step in this process that took about 5 minutes to complete. The changes were successfully made, albeit after 5 minutes. Interestingly, when we located all the managed servers in the domain on the same host, this problem disappeared and the activation of changes took less than 10 seconds. However, locating all managed servers on one host cannot be a solution. We enabled debug for Deployment on all servers. Given below is the output of the debug during occurrence of the problem:

 

####<Sep 29, 2009 10:56:45 AM BST> <Debug> <Deployment> <myhost> <myadmin> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1254218205661> <BEA-000000> <Experienced Exception while c.tryLock() and it is ignored :: java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl.checkList(FileChannelImpl.java:853)
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:820)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:967)
at weblogic.deploy.internal.targetserver.datamanagement.ConfigDataUpdate.getFileLock(ConfigDataUpdate.java:374)
at weblogic.deploy.internal.targetserver.datamanagement.ConfigDataUpdate.getFileLock(ConfigDataUpdate.java:357)
at weblogic.deploy.internal.targetserver.datamanagement.ConfigDataUpdate.acquireFileLock(ConfigDataUpdate.java:338)
.
.
.

 

Solution:

After liasing with Oracle Support, we upgraded our JVM and the upgrade resolved the problem. After the upgrade, the activation of changes took less than 10 seconds irrespective of whether the managed servers were located on the same host or not. Details of the upgrade are given below:

Old JVM:

java version “1.5.0_14″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
BEA JRockit(R) (build R27.5.0-110_o-99226-1.5.0_14-20080528-1505-linux-x86_64, compiled mode)

 

New JVM:
java version “1.5.0_17″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)
BEA JRockit(R) (build R27.6.3-40_BR8141840-120019-1.5.0_17-20090828-1133-linux-x86_64, compiled mode)

 

Root Cause:

Bug in JVM 1.5.0_14 (JRockit R27.5.0)

 

NOTE:

(1) The solution above describes a successful problem-solving experience and may not be applicable to all problems with similar symptoms.

(2) Your rating of this post will be much appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +3 (from 3 votes)

How to determine UNIX process elapsed time

At times, you may want to determine the elapsed wall-clock time or uptime for a running process. While you can determine the process’ elapsed time using certain versions of the ps utility, it can also be determined using a simple shell script with a bit of perl. Both these methods are described below with the init process (PID = 1):

SOLUTION 1: The ps utility on some variants of UNIX (e.g. Linux, but not Solaris)

ps -oetime 1
    ELAPSED
      39:45

 

SOLUTION 2: A shell script with a bit of perl (should work on all variants of UNIX)

Download the shell script (puptime.ksh) or copy and paste from below:

#!/bin/ksh
# puptime.ksh - Gavin Satur - http://cybergav.in/2009/11/09/puptime
# Simple script to calculate the uptime (elapsed wall clock time) of a process
##############################################################################
#
# Accept PID and do some basic validation
#
proc_pid=$1
if [ -z "$proc_pid" ]; then
   print "\nERROR : Missing input argument. SYNTAX: ksh puptime.ksh <pid>\n"
   exit 999
fi
if [ ! -d /proc/$proc_pid ]; then
   print "\nERROR : No directory for PID $proc_pid in /proc. Check if process is running!\n"
   exit 999
fi
#
# Calculate start time of process and current time in epoch time using a bit of perl
#
proc_stime=`perl -e 'use File::stat;  my $filename = "$ARGV[0]"; $sb = stat($filename); printf "%s", $sb->mtime;' /proc/$proc_pid`
currtime=`perl -e 'print time;'`
#
# Calculate process uptime in seconds and then slice'n'dice for human-friendly output
#
proc_time=$(( currtime - proc_stime ))
proc_time_days=$(( proc_time / 86400 ))
proc_time_secs=$(( proc_time % 86400 ))
proc_time_hours=$(( proc_time_secs / 3600 ))
proc_time_secs=$(( proc_time_secs % 3600 ))
proc_time_minutes=$((proc_time_secs / 60 ))
proc_time_secs=$(( proc_time_secs % 60 ))
print "\nUPTIME FOR PROCESS WITH PID $proc_pid = $proc_time_days day(s) $proc_time_hours hour(s) $proc_time_minutes minute(s) $proc_time_secs second(s) \n"
./puptime.ksh 1
UPTIME FOR PROCESS WITH PID 1 = 0 day(s) 0 hour(s) 39 minute(s) 37 second(s)
VN:F [1.6.5_908]
Rating: +2 (from 2 votes)

David beats Goliath…again!

I watched the David Haye Vs Nikolai Valuev WBA Heavyweight title fight a couple of hours ago. There was a lot of hype before the fight billed as “David Vs Goliath”, given the whopping 7 stone weight difference and significant height difference between the two boxers. Before the fight, David promised that he would be the first man to knock out the “beast from the east” and did some thrash talking about the huge Russian.

Nikolai-Valuev-v-David

 

Well, the fight was far from a spectacle, it was twelve rounds of a cat-and-mouse game, not many punches exchanged and there was no knock out. David Haye won by a majority decision on points and is now the WBA Heavyweight Champion of the world. David was slipping and sliding more than punching. His negative tactics were understandable since he was facing a giant with a massive height and weight advantage, but he could have thrown more punches in the earlier rounds as he in fact rocked Nikolai a bit in the last round with a combination (after the match, David said that he hurt his right hand in the early rounds and so didn’t use it much).

Although no boxing fan would want to see a title being won in such a boring match (and some may even argue that David did not do much in the fight to win the title) , David’s victory is a breath of fresh air for the boxing Heavyweight division. David Haye has the skill, speed, power, aggression and charisma for a world champion (though he can do without a bit of the thrash talking pre-fight), whereas Nikolai is just a boring giant who relies more on his size than skill. Lot of big bucks await David Haye and I wish him well. It will be interesting to watch him take on the Klitshcko brothers.

VN:F [1.6.5_908]
Rating: 0 (from 0 votes)

Problem:

The Administration server of a WebLogic domain comprising WebLogic Server 10.0 and WebLogic Integration 10.2, consumes high CPU and throws java.lang.OutOfMemory errors.

 

Background:

The WebLogic Domain’s admin server had only two web applications deployed on it – the WebLogic Administration console and WebLogic Integration console. After start-up, its CPU utilization gradually increased and reached around 80% within a couple of days. Also, java.lang.OutOfMemory errors were observed in the server logs. This behaviour was observed even when there was no load on the managed servers and the web applications on the admin server were not accessed (all servers idle from a user perspective).

WebLogic Domain details:

Version: WebLogic Server 10.0 MP1, WebLogic Integration 10.2
JVM: JRockit R27.5.0-110 (JRE Standard Edition build 1.5.0_14-b03)
Admin Server JVM Heap: Minimum (Xms) = Maximum (Xmx) = 2 GB
Number of managed servers: 2
Operating System: 64-bit Red Hat Enterprise Linux 5.1
CPU Architecture: AMD64

 

Solution:

The following patches were applied and the problem was resolved. Contact Oracle support or use their Smart Update procedure to obtain the patches.

SL# PATCH COMMENTS
1. D76T CR380997 Admin server gives OOM: Closed the Queue and Session Objects properly.
2. LJTR CR373884 Unable to apply some of the patches for jpd.jar when using "inject" mechanism
3. ZSX5 BUG8174387 MEMORY LEAK OBSERVED ON ADMIN SERVER: No public details available. Patch provided for WLI 10.2

 

Root Cause:

Known issues with WebLogic Integration 10.2

 

NOTE:

(1) The solution above describes a successful problem-solving experience and may not be applicable to all problems with similar symptoms.

(2) Your rating of this post will be much appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +2 (from 2 votes)

log4j: Could not find resource

Problem:

A software’s log4j framework could not find the log4j configuration file which I specified. Details with debug below:

 

Command:

java -Dlog4j.debug=true -Dlog4j.configuration=/mysoftware/config/mylog4j.properties ...

 

Debug Output:


log4j: Trying to find [mysoftware/config/mylog4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@164b95.
log4j: Trying to find [mysoftware/config/mylog4j.properties] using sun.misc.Launcher$AppClassLoader@164b95 class loader.
log4j: Trying to find [mysoftware/config/mylog4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [mysoftware/config/mylog4j.properties].

 

Background:

I did not want to use the default location for the log4j configuration file and wanted to be able to specify to a file with a name and location of my choice.

 

Solution:

The debug output indicates that the absolute path of the resource (log4j.properties) is missing a beginning “/”. That’s because the file:// protocol was not specified. So, the following worked and enabled log4j locate the properties file:

 

java -Dlog4j.debug=true -Dlog4j.configuration=file:///mysoftware/config/mylog4j.properties ...

NOTE: If your log4j configuration file is called log4j.xml or log4j.properties, then placing it in the application classpath will suffice and you will not need the -Dlog4j.configuration option.

 

 

Root Cause:

The file:// protocol was not used to specify the log4j configuration file.

 

Reference:

Short Introduction to log4j – Ceki Gülcü

 

NOTE:

(1) The solution above describes a successful problem-solving experience and may not be applicable to all problems with similar symptoms.

(2) Your rating of this post will be much appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +5 (from 5 votes)

Problem:

When using WLShell 2.1.0.1 to connect to a WebLogic server, the connection fails and the following error is displayed:

couldn’t find or load connector class: wlshell.connect.jmx.weblogic.Connector for protocol: t3 check the libraries required by this connector are in the classpath. use the "ver" and "info -v" commands to display the current classpath.

 

Background:

In order for WLShell 2.1.0.1 to start properly and connect to a WebLogic server, the following must be present in the CLASSPATH: weblogic.jar, wlshell-2.1.0.1.jar, wlshell-2.1.0.jar and log4j-1.2.8.jar

My CLASSPATH had all the above jars, but I still received the error.

WebLogic was installed as a user called "bea" and I was running WLShell as my user (saturg). Both users were not part of the same group, but I ensured that weblogic.jar was accessible and readable by user saturg.

 

Solution:

As I did not have privileges to make both users bea and saturg part of the same group, I executed the following command as the bea user in the WebLogic installation root directory:

 

find . -type f | xargs -i chmod 744 {}

 

So, basically, I ensured that all files in the WebLogic installation were accessible and readable by all users on the host.

Note:The recommended method is to make both the weblogic installation user and WLShell user part of the same group, thereby restricting access to the WebLogic installation

 

Root Cause:

The error message is misleading as the class wlshell.connect.jmx.weblogic.Connector is available in wlshell-2.1.0.jar. The solution above indicates that WLShell requires to access other jars in the WebLogic installation (apart from weblogic.jar) or rather classes in weblogic.jar require to access other jars in the WebLogic installation.

 

NOTE:

(1) The solution above describes a successful problem-solving experience and may not be applicable to all problems with similar symptoms.

(2) Your rating of this post will be much appreciated. Also, feel free to leave comments.

VN:F [1.6.5_908]
Rating: +1 (from 1 vote)

Switching domains for a WordPress blog

My blogs are hosted on hostmonster and run on the WordPress platform. About 8 months ago, before I started blogging (finally!), I researched the pros and cons of various blogging platforms and tried out a few before selecting WordPress. So far, it’s been a great experience blogging using WordPress.

When I first started blogging, I registered the domain www.mrkips.com for my blogs. A few days ago, I registered another domain www.cybergav.in (a domain name which relates more to  me and my ethnic roots). Yesterday, I finally switched my blogs from mrkips.com to cybergav.in and although the WordPress forums provide adequate information on how to do this task, I’m describing the process below which worked for me.

Let’s say you host your WordPress blog on hostmonster (process should be applicable to most hosting platforms) and wish to switch its domain from www.abc.com to www.xyz.com.

 

STEP 1: Register your domain and specify DNS servers

Register your new domain xyz.com after doing a bit of research and choosing an appropriate registrar (typical factors in choosing a registrar are cost, DNS management facility, Domain privacy (not available for all ccTLDs) and customer service – there are other goodies usually provided such as web forwarding, domain cloaking, etc.). When you select your registrar and register your domain, you must ensure that you use the registrar’s DNS management facility to configure the DNS servers belonging to your hosting platform. For example, for my domain, I configured my DNS servers as ns1.hostmonster.com and ns2.hostmonster.com. It is this DNS configuration that will ensure the required DNS A records are inserted in your hosting platform’s DNS servers to map your domain name with your hosting account (and consequently your website).

 

STEP 2: Verify your domain

My domain was registered in less than half an hour and I could verify its registration using a WHOIS search. If your domain name registrar and hosting provider are different companies, then ensure you inform your hosting provider after registering your domain. My hosting provider switched my primary domain to cybergav.in and I configured mrkips.com as a parked domain. Now before you migrate your website to your new domain, you must verify if your new domain is resolvable. To do this, you can either use any one of the myriad websites available (e.g. www.who.is ) or use the nslookup utility as follows:

#
# SYNTAX 1: nslookup <domain name>
#
c:\>nslookup cybergav.in
Server:  BeBox.config
Address:  192.168.1.130:53
 
Non-authoritative answer:
Name:    cybergav.in
Address:  66.147.240.162
 
#
# SYNTAX 2: nslookup <domain name> <dns server>
#
c:\>nslookup cybergav.in ns1.hostmonster.com
Server:  UnKnown
Address:  74.220.195.131:53
 
Name:    cybergav.in
Address:  66.147.240.162

STEP 3: Change your WordPress blog’s domain name

(i) Define the WP_HOMEand WP_SITEURLvariables: This is required in order to give your WordPress blog its new domain name and access its Administration console (wp-admin). You do this by adding the following in wp-config.php (in the root of your WordPress installation):

define('WP_HOME','http://www.xyz.com');
define('WP_SITEURL','http://www.xyz.com');

 

(ii) Update your blog’s WordPress database by ensuring that URLs containing your old domain reflect your new domain as per the following example :

UPDATE wp_posts SET guid = REPLACE (
guid,
'abc.com',
'xyz.com');
 
UPDATE wp_posts SET post_content = REPLACE (
post_content,
'abc.com',
'xyz.com');

 

STEP 4: Redirect all traffic from your old domain to your new domain

After getting your blog up and running with your new domain name, you must redirect all traffic arriving at your old domain to your new domain to ensure your users and search engines know that you’ve switched domains. You must use a HTTP 301 Redirect method (permanent move) so that search engines and browsers will recognize your blog’s new home. You can configure this redirect by either using your hosting provider’s management tools or configuring .htaccess (Apache web server) as per the following example:

 

RewriteEngine On
RewriteCond %{HTTP_HOST} ^abc.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.abc.com$
RewriteRule ^/?$ "http\:\/\/www\.xyz\.com\/" [R=301,L]
VN:F [1.6.5_908]
Rating: +2 (from 2 votes)