Friday, March 07, 2003

J2SE: 1.4.1 boosts garbage collection

A pretty good article on 1.4.1 GC from JavaWorld.

Other 1.4.1 GC Tutorials:
1. From
2. From Wireless Java. Note that this replaces the famous GC Article for 1.2.2
3. From JavaPerformanceTuning.

Some Benchmarks:
1. From JavaLobby.
2. From NetBeans.

Wednesday, March 05, 2003

JSF: EA3 Released

JavaServer Faces Early Access 3 has been posted at Tutorial for JSF is available here.

Weblogic: Starting ManagedServer Programmatically

Weblogic6.1 Node Manager do *not* attempt to restart a Managed Server when its goes down or provide a mechanism where user can use some compand line tool to start the managed server using Node Manager. The following is the example code to start a managed server using nodemanager programmatically. This code when used in combination with script that detects when a server goes down (Example: SNMP management tools which get a trap when managed server goes down), will automate server restart when a problem occurs.

Tested with weblogic6.1SP4.

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;


* This tools starts a managed server when node manager corresponding
* to that server is already running.
* Usage : StartManagedServer -adminurl <> -user <> -pass <> -domain <> -managedserver <>

public class StartManagedServer {

public static void main(String[] args) {

ServerMBean serverMBean = null;

String url = "t3://localhost:7001";
String username = "system";
String password = "password";
String domain = "yourdomain";
String managedServer = "Server1";

int i = 0;

try {

for (; i < args.length; i++) {

if (args[i].equals("-adminurl"))
url = args[++i];

else if (args[i].equals("-user"))
username = args[++i];

else if (args[i].equals("-pass"))
password = args[++i];

else if (args[i].equals("-domain"))
domain = args[++i];

else if (args[i].equals("-managedserver"))
managedServer = args[++i];
} catch (ArrayIndexOutOfBoundsException aio) {
log("Missing value for arguement '" + args[--i] + "'");
log("Usage : StartManagedServer -adminurl <> -user <> -pass <> -domain <> -managedserver <>");

try {

Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, url);
props.put(Context.SECURITY_PRINCIPAL, username);
props.put(Context.SECURITY_CREDENTIALS, password);
Context ctx = new InitialContext(props);

MBeanHome home = (MBeanHome) ctx.lookup("");
serverMBean = (ServerMBean) home.getMBean(managedServer, "Server", domain);

} catch (Exception e) {
log("Exception in getting Admin home & serverMBean: " + e);

try {
log("Sending a start command to the AdminServer ...");
} catch (weblogic.rmi.extensions.RemoteRuntimeException rre) {
//The returned which is not serializable :-)
log("Ignorable Exception occured ...");
} catch (Exception e) {
//InsufficientConfigurationException?? Couldn't find JavaDocs for exception
//mentioned in javadocs.:-)
log("Unexpected exception: " + e);

log("NodeManager initiated the server");

private static void log(String s) {

Starting weblogic7 Node Manager attempts to restart a Managed Server whose health state is "failed".

Monday, March 03, 2003

General: Redirecting Std err

Most Java Programmers I know are unaware of how to redirect Stderr to a file. Here is a 1 minute tutorial on the same. For both Unix and Windows:

When writing shell scripts, you can control input/output redirection. Input redirection is the ability to force a command to read any necessary input from a file instead of from the keyboard. Output redirection is the ability to send the output from a command into a file or pipe instead of to the screen.
Each process created by a shell script begins with three file descriptors associated with it:

0 stdin
1 stdout
2 stderr

You can use the file descriptor numbers 0 (standard input), 1 (standard output), and 2 (standard error) together with the redirection metacharacters to control input and output in the Bourne and Korn shells.

Bourne and Korn Shell Redirection
Take STDIN from file<file, or 0<file
Redirect STDOUT to file> file, or 1>file
Redirect STDERR to file2> file
Append STDOUT to end of file>> file
Redirect STDERR to STDOUT2>&1
Pipe standard output of cmd1 as standard input to cmd2cmd1 | cmd2
Use file as both STDIN and STDOUT<> file
Close STDIN<&-
Close STDOUT>&-
Close STDERR2>&-

When redirecting STDIN and STDOUT in the Bourne and Korn shells, you can omit the file descriptors 0 and 1 from the redirection symbols. You must always use the file descriptor 2 with the redirection symbol.

The 0 and 1 file descriptors are implied, and not used explicitly for the C shell. The C shell representation for standard error (2) is an ampersand (&). STDERR can only be redirected when redirecting STDOUT.

C Shell Redirection Metacharacters
Redirect STDOUT to file> file
Take input from file< file
Append STDOUT to end of file>> file
Redirect STDOUT and STDERR to file>& file
Append STDOUT and STDERR to file>>& file

For windows:
The command shell provides facilities to change the default stream input and output. These facilities are accessed by placing special command redirection symbols in a command.
Windows Command Redirection Symbols

Redirects command output to the file specified. You can also use a standard device name such as LPT1, CON, PRN or CONOUT$ as the file name. Any preexisting contents of the file are lost.


Redirects command output to the file specified. If the file already exists, all command output is appended to the end of the file.


Redirects command input from the file specified. You can also use a standard device name such as CON or CONIN$.


Redirects command error output to the file specified. You can also use a standard device name such as LPT1, CON, PRN or CONOUT$ as the file name. Any preexisting contents of the file are lost.


Redirects command error output to the same location as command output. This makes any command output redirection also apply to command error output.

cmd1 | cmd2

Pipes the command output of cmd1 to the command input of cmd2. Multiple pipe characters are allowed, creating a chain of commands, each sending output to the next command in the chain.